Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

chore: GCForms release v3.9.0 #644

Merged
merged 1 commit into from
May 30, 2024
Merged

Conversation

sre-read-write[bot]
Copy link
Contributor

@sre-read-write sre-read-write bot commented Apr 30, 2024

🤖 I have created a release beep boop

3.9.0 (2024-05-17)

Features

  • add TF_VAR check and conventional commit lint workflows (#663) (bf44015)

Bug Fixes

  • include the mfa endpoint for WAF detection (0a3baea)
  • missing runs on property in Github workflow (#647) (94b3e2f)
  • modify the load balancer endpoint so it works with both the pre-app router and the new app router (7a16224)
  • notify slack lambda function had missing scripts in package.json (#660) (db9f8cd)
  • Update Notify error handling across lambdas (#651) (de189e2)
  • wrong job dependency name in Github Workflow (#648) (342ecb1)

Miscellaneous Chores

  • add permission for ECS task to call legacy submission Lambda function name (#643) (66f98b9)
  • added description in all package.json files (#649) (2b7ea5c)
  • added test-lambda-code job to Github workflow (#658) (87c2939)
  • adjust WAF rules (e9a3b8a)
  • Disable OpsGenie alerting for non-production environment (72fc8cb)
  • Github workflow deployment script not working as intended (#655) (f6d16cf)
  • sanitize GitHub workflow logs (e7e9537)
  • wait for lambdas images to be ready to use before applying Terraform modules (#650) (3ca2993)

Code Refactoring

  • convert Lambda code from S3 binary object to ECR container image (#626) (524d68f)

This PR was generated with Release Please. See documentation.

@sre-read-write sre-read-write bot force-pushed the release-please--branches--develop branch 10 times, most recently from 2a0b9f3 to 57041d6 Compare May 8, 2024 12:50
@sre-read-write sre-read-write bot force-pushed the release-please--branches--develop branch 3 times, most recently from f5b76c9 to 2ce5007 Compare May 14, 2024 13:22
@sre-read-write sre-read-write bot changed the title chore: GCForms release v3.8.6 chore: GCForms release v3.9.0 May 17, 2024
@sre-read-write sre-read-write bot force-pushed the release-please--branches--develop branch from 2ce5007 to 95fe326 Compare May 17, 2024 18:29
Copy link

Production: ecr

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

⚠️   Warning: resources will be destroyed by this change!

Plan: 27 to add, 0 to change, 1 to destroy
Show summary
CHANGE NAME
add aws_ecr_lifecycle_policy.lambda["audit-logs-archiver-lambda"]
aws_ecr_lifecycle_policy.lambda["audit-logs-lambda"]
aws_ecr_lifecycle_policy.lambda["cognito-email-sender-lambda"]
aws_ecr_lifecycle_policy.lambda["cognito-pre-sign-up-lambda"]
aws_ecr_lifecycle_policy.lambda["form-archiver-lambda"]
aws_ecr_lifecycle_policy.lambda["load-testing-lambda"]
aws_ecr_lifecycle_policy.lambda["nagware-lambda"]
aws_ecr_lifecycle_policy.lambda["notify-slack-lambda"]
aws_ecr_lifecycle_policy.lambda["reliability-dlq-consumer-lambda"]
aws_ecr_lifecycle_policy.lambda["reliability-lambda"]
aws_ecr_lifecycle_policy.lambda["response-archiver-lambda"]
aws_ecr_lifecycle_policy.lambda["submission-lambda"]
aws_ecr_lifecycle_policy.lambda["vault-integrity-lambda"]
aws_ecr_repository.lambda["audit-logs-archiver-lambda"]
aws_ecr_repository.lambda["audit-logs-lambda"]
aws_ecr_repository.lambda["cognito-email-sender-lambda"]
aws_ecr_repository.lambda["cognito-pre-sign-up-lambda"]
aws_ecr_repository.lambda["form-archiver-lambda"]
aws_ecr_repository.lambda["load-testing-lambda"]
aws_ecr_repository.lambda["nagware-lambda"]
aws_ecr_repository.lambda["notify-slack-lambda"]
aws_ecr_repository.lambda["reliability-dlq-consumer-lambda"]
aws_ecr_repository.lambda["reliability-lambda"]
aws_ecr_repository.lambda["response-archiver-lambda"]
aws_ecr_repository.lambda["submission-lambda"]
aws_ecr_repository.lambda["vault-integrity-lambda"]
recreate aws_ecr_lifecycle_policy.form_viewer_policy
Show plan
Resource actions are indicated with the following symbols:
  + create
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_ecr_lifecycle_policy.form_viewer_policy must be replaced
-/+ resource "aws_ecr_lifecycle_policy" "form_viewer_policy" {
      ~ id          = "form_viewer_production" -> (known after apply)
      ~ policy      = jsonencode(
          ~ {
              ~ rules = [
                  ~ {
                      ~ selection    = {
                          - tagPrefixList = [
                              - "v",
                            ]
                          ~ tagStatus     = "tagged" -> "any"
                            # (2 unchanged attributes hidden)
                        }
                        # (3 unchanged attributes hidden)
                    },
                ]
            } # forces replacement
        )
      ~ registry_id = "957818836222" -> (known after apply)
        # (1 unchanged attribute hidden)
    }

  # aws_ecr_lifecycle_policy.lambda["audit-logs-archiver-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "audit-logs-archiver-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["audit-logs-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "audit-logs-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["cognito-email-sender-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "cognito-email-sender-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["cognito-pre-sign-up-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "cognito-pre-sign-up-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["form-archiver-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "form-archiver-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["load-testing-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "load-testing-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["nagware-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "nagware-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["notify-slack-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "notify-slack-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["reliability-dlq-consumer-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "reliability-dlq-consumer-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["reliability-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "reliability-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["response-archiver-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "response-archiver-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["submission-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "submission-lambda"
    }

  # aws_ecr_lifecycle_policy.lambda["vault-integrity-lambda"] will be created
  + resource "aws_ecr_lifecycle_policy" "lambda" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "Keep last 10 images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 10
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "vault-integrity-lambda"
    }

  # aws_ecr_repository.lambda["audit-logs-archiver-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "audit-logs-archiver-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["audit-logs-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "audit-logs-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["cognito-email-sender-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "cognito-email-sender-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["cognito-pre-sign-up-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "cognito-pre-sign-up-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["form-archiver-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "form-archiver-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["load-testing-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "load-testing-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["nagware-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "nagware-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["notify-slack-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "notify-slack-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["reliability-dlq-consumer-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "reliability-dlq-consumer-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["reliability-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "reliability-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["response-archiver-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "response-archiver-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["submission-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "submission-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecr_repository.lambda["vault-integrity-lambda"] will be created
  + resource "aws_ecr_repository" "lambda" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "vault-integrity-lambda"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags_all             = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

Plan: 27 to add, 0 to change, 1 to destroy.

Changes to Outputs:
  + ecr_repository_url_audit_logs_archiver_lambda      = (known after apply)
  + ecr_repository_url_audit_logs_lambda               = (known after apply)
  + ecr_repository_url_cognito_email_sender_lambda     = (known after apply)
  + ecr_repository_url_cognito_pre_sign_up_lambda      = (known after apply)
  + ecr_repository_url_form_archiver_lambda            = (known after apply)
  - ecr_repository_url_load_test                       = "" -> null
  + ecr_repository_url_load_testing_lambda             = (known after apply)
  + ecr_repository_url_nagware_lambda                  = (known after apply)
  + ecr_repository_url_notify_slack_lambda             = (known after apply)
  + ecr_repository_url_reliability_dlq_consumer_lambda = (known after apply)
  + ecr_repository_url_reliability_lambda              = (known after apply)
  + ecr_repository_url_response_archiver_lambda        = (known after apply)
  + ecr_repository_url_submission_lambda               = (known after apply)
  + ecr_repository_url_vault_integrity_lambda          = (known after apply)

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"audit-logs-archiver-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"audit-logs-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"cognito-email-sender-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"cognito-pre-sign-up-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"form-archiver-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"load-testing-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"nagware-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"notify-slack-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"reliability-dlq-consumer-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"reliability-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"response-archiver-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"submission-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.lambda[\"vault-integrity-lambda\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.viewer_repository"]

33 tests, 19 passed, 14 warnings, 0 failures, 0 exceptions

Copy link

Production: s3

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

⚠️   Warning: resources will be destroyed by this change!

Plan: 0 to add, 0 to change, 5 to destroy
Show summary
CHANGE NAME
delete aws_s3_bucket.lambda_code
aws_s3_bucket_ownership_controls.lambda_code
aws_s3_bucket_public_access_block.lambda_code
aws_s3_bucket_server_side_encryption_configuration.lambda_code
aws_s3_bucket_versioning.lambda_code
Show plan
Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  # aws_s3_bucket.lambda_code will be destroyed
  # (because aws_s3_bucket.lambda_code is not in configuration)
  - resource "aws_s3_bucket" "lambda_code" {
      - arn                         = "arn:aws:s3:::forms-production-lambda-code" -> null
      - bucket                      = "forms-production-lambda-code" -> null
      - bucket_domain_name          = "forms-production-lambda-code.s3.amazonaws.com" -> null
      - bucket_regional_domain_name = "forms-production-lambda-code.s3.ca-central-1.amazonaws.com" -> null
      - force_destroy               = true -> null
      - hosted_zone_id              = "Z1QDHH18159H29" -> null
      - id                          = "forms-production-lambda-code" -> null
      - object_lock_enabled         = false -> null
      - region                      = "ca-central-1" -> null
      - request_payer               = "BucketOwner" -> null
      - tags                        = {} -> null
      - tags_all                    = {
          - "CostCentre" = "forms-platform-production"
          - "Terraform"  = "true"
        } -> null

      - grant {
          - id          = "9a5058ac2253284c428c54c019d006666ef3eb73e380322b05c715157b6c384a" -> null
          - permissions = [
              - "FULL_CONTROL",
            ] -> null
          - type        = "CanonicalUser" -> null
        }

      - server_side_encryption_configuration {
          - rule {
              - bucket_key_enabled = false -> null

              - apply_server_side_encryption_by_default {
                  - sse_algorithm = "AES256" -> null
                }
            }
        }

      - versioning {
          - enabled    = true -> null
          - mfa_delete = false -> null
        }
    }

  # aws_s3_bucket_ownership_controls.lambda_code will be destroyed
  # (because aws_s3_bucket_ownership_controls.lambda_code is not in configuration)
  - resource "aws_s3_bucket_ownership_controls" "lambda_code" {
      - bucket = "forms-production-lambda-code" -> null
      - id     = "forms-production-lambda-code" -> null

      - rule {
          - object_ownership = "BucketOwnerEnforced" -> null
        }
    }

  # aws_s3_bucket_public_access_block.lambda_code will be destroyed
  # (because aws_s3_bucket_public_access_block.lambda_code is not in configuration)
  - resource "aws_s3_bucket_public_access_block" "lambda_code" {
      - block_public_acls       = true -> null
      - block_public_policy     = true -> null
      - bucket                  = "forms-production-lambda-code" -> null
      - id                      = "forms-production-lambda-code" -> null
      - ignore_public_acls      = true -> null
      - restrict_public_buckets = true -> null
    }

  # aws_s3_bucket_server_side_encryption_configuration.lambda_code will be destroyed
  # (because aws_s3_bucket_server_side_encryption_configuration.lambda_code is not in configuration)
  - resource "aws_s3_bucket_server_side_encryption_configuration" "lambda_code" {
      - bucket = "forms-production-lambda-code" -> null
      - id     = "forms-production-lambda-code" -> null

      - rule {
          - bucket_key_enabled = false -> null

          - apply_server_side_encryption_by_default {
              - sse_algorithm = "AES256" -> null
            }
        }
    }

  # aws_s3_bucket_versioning.lambda_code will be destroyed
  # (because aws_s3_bucket_versioning.lambda_code is not in configuration)
  - resource "aws_s3_bucket_versioning" "lambda_code" {
      - bucket = "forms-production-lambda-code" -> null
      - id     = "forms-production-lambda-code" -> null

      - versioning_configuration {
          - status = "Enabled" -> null
        }
    }

Plan: 0 to add, 0 to change, 5 to destroy.

Changes to Outputs:
  - lambda_code_arn                = "arn:aws:s3:::forms-production-lambda-code" -> null
  - lambda_code_id                 = "forms-production-lambda-code" -> null

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_s3_bucket.archive_storage"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_bucket.audit_logs_archive_storage"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_bucket.reliability_file_storage"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_bucket.vault_file_storage"]

23 tests, 19 passed, 4 warnings, 0 failures, 0 exceptions

Copy link

Production: cognito

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

⚠️   Warning: resources will be destroyed by this change!

Plan: 4 to add, 1 to change, 6 to destroy
Show summary
CHANGE NAME
delete aws_iam_policy.lambda_s3
aws_s3_object.cognito_email_sender_code
update aws_cognito_user_pool.forms
recreate aws_lambda_function.cognito_email_sender
aws_lambda_function.cognito_pre_sign_up
aws_lambda_permission.allow_cognito_to_call_cognito_email_sender_lambda
aws_lambda_permission.allow_cognito_to_call_cognito_pre_sign_up_lambda
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place
  - destroy
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_cognito_user_pool.forms will be updated in-place
  ~ resource "aws_cognito_user_pool" "forms" {
        id                        = "ca-central-1_eSTGTCw33"
        name                      = "forms_user_pool"
        tags                      = {}
        # (11 unchanged attributes hidden)

      ~ lambda_config {
          ~ pre_sign_up = "arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Pre_Sign_Up" -> (known after apply)
            # (1 unchanged attribute hidden)

          ~ custom_email_sender {
              ~ lambda_arn     = "arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Email_Sender" -> (known after apply)
                # (1 unchanged attribute hidden)
            }
        }

        # (5 unchanged blocks hidden)
    }

  # aws_iam_policy.lambda_s3 will be destroyed
  # (because aws_iam_policy.lambda_s3 is not in configuration)
  - resource "aws_iam_policy" "lambda_s3" {
      - arn         = "arn:aws:iam::957818836222:policy/cognito_lambda_s3" -> null
      - description = "IAM policy for storing files in S3" -> null
      - id          = "arn:aws:iam::957818836222:policy/cognito_lambda_s3" -> null
      - name        = "cognito_lambda_s3" -> null
      - path        = "/" -> null
      - policy      = jsonencode(
            {
              - Statement = [
                  - {
                      - Action   = [
                          - "s3:PutObject",
                          - "s3:ListBucket",
                          - "s3:GetObject",
                          - "s3:DeleteObject",
                        ]
                      - Effect   = "Allow"
                      - Resource = [
                          - "arn:aws:s3:::forms-production-lambda-code/*",
                          - "arn:aws:s3:::forms-production-lambda-code",
                        ]
                    },
                ]
              - Version   = "2012-10-17"
            }
        ) -> null
      - policy_id   = "ANPA56ATTST7GETOCTMRQ" -> null
      - tags        = {} -> null
      - tags_all    = {
          - "CostCentre" = "forms-platform-production"
          - "Terraform"  = "true"
        } -> null
    }

  # aws_lambda_function.cognito_email_sender must be replaced
-/+ resource "aws_lambda_function" "cognito_email_sender" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Email_Sender" -> (known after apply)
      ~ function_name                  = "Cognito_Email_Sender" -> "cognito-email-sender" # forces replacement
      - handler                        = "cognito_email_sender.handler" -> null
      ~ id                             = "Cognito_Email_Sender" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Email_Sender/invocations" -> (known after apply)
      ~ last_modified                  = "2024-01-25T15:02:50.000+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Email_Sender:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Email_Sender:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "cognito_email_sender_code" -> null
      - s3_object_version              = "aLrLBKxnFPKm62yxAOX6kAYx_4l.n1T3" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "JQU+xOvCFaZHW/kdM3TnHxkFnJXz/ytxiRXLMJzpxF0=" -> (known after apply)
      ~ source_code_size               = 5346786 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.cognito_pre_sign_up must be replaced
-/+ resource "aws_lambda_function" "cognito_pre_sign_up" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Pre_Sign_Up" -> (known after apply)
      - filename                       = "/tmp/pre_sign_up_main.zip" -> null
      ~ function_name                  = "Cognito_Pre_Sign_Up" -> "cognito-pre-sign-up" # forces replacement
      - handler                        = "pre_sign_up.handler" -> null
      ~ id                             = "Cognito_Pre_Sign_Up" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Pre_Sign_Up/invocations" -> (known after apply)
      ~ last_modified                  = "2024-01-25T15:02:44.000+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Pre_Sign_Up:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Cognito_Pre_Sign_Up:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "QTDI90Q+x/QfDnbowk26CzT+EGf4lzBQCRoJniGB88s=" -> (known after apply)
      ~ source_code_size               = 326 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (2 unchanged blocks hidden)
    }

  # aws_lambda_permission.allow_cognito_to_call_cognito_email_sender_lambda must be replaced
-/+ resource "aws_lambda_permission" "allow_cognito_to_call_cognito_email_sender_lambda" {
      ~ function_name       = "Cognito_Email_Sender" -> "cognito-email-sender" # forces replacement
      ~ id                  = "terraform-20230619152749482600000002" -> (known after apply)
      ~ statement_id        = "terraform-20230619152749482600000002" -> (known after apply)
      ~ statement_id_prefix = "terraform-" -> (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_lambda_permission.allow_cognito_to_call_cognito_pre_sign_up_lambda must be replaced
-/+ resource "aws_lambda_permission" "allow_cognito_to_call_cognito_pre_sign_up_lambda" {
      ~ function_name       = "Cognito_Pre_Sign_Up" -> "cognito-pre-sign-up" # forces replacement
      ~ id                  = "terraform-20230619152749480500000001" -> (known after apply)
      ~ statement_id        = "terraform-20230619152749480500000001" -> (known after apply)
      ~ statement_id_prefix = "terraform-" -> (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_s3_object.cognito_email_sender_code will be destroyed
  # (because aws_s3_object.cognito_email_sender_code is not in configuration)
  - resource "aws_s3_object" "cognito_email_sender_code" {
      - bucket                 = "forms-production-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "binary/octet-stream" -> null
      - etag                   = "77b6abfcc32504965c9f28128c3bece9-2" -> null
      - force_destroy          = false -> null
      - id                     = "cognito_email_sender_code" -> null
      - key                    = "cognito_email_sender_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/cognito_email_sender.zip" -> null
      - source_hash            = "JQU+xOvCFaZHW/kdM3TnHxkFnJXz/ytxiRXLMJzpxF0=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {
          - "CostCentre" = "forms-platform-production"
          - "Terraform"  = "true"
        } -> null
      - version_id             = "aLrLBKxnFPKm62yxAOX6kAYx_4l.n1T3" -> null
    }

Plan: 4 to add, 1 to change, 6 to destroy.

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.cognito_email_sender"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.cognito_pre_sign_up"]
WARN - plan.json - main - Missing Common Tags: ["aws_cognito_user_pool.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.cognito_lambda_kms"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.cognito_lambda_logging"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.cognito_lambda_secrets"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.cognito_userpool_import_logging"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.cognito_lambda"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.cognito_userpool_import"]
WARN - plan.json - main - Missing Common Tags: ["aws_kms_key.cognito_encryption"]
WARN - plan.json - main - Missing Common Tags: ["aws_lambda_function.cognito_email_sender"]
WARN - plan.json - main - Missing Common Tags: ["aws_lambda_function.cognito_pre_sign_up"]

31 tests, 19 passed, 12 warnings, 0 failures, 0 exceptions

Copy link

Production: load_balancer

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

Plan: 1 to add, 5 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_wafv2_rule_group.rate_limiters_group
update aws_lb_target_group.form_viewer_1
aws_lb_target_group.form_viewer_2
aws_wafv2_regex_pattern_set.cognito_login_paths
aws_wafv2_regex_pattern_set.valid_app_uri_paths
aws_wafv2_web_acl.forms_acl
Show plan
Resource actions are indicated with the following symbols:
  + create
  ~ update in-place

Terraform will perform the following actions:

  # aws_lb_target_group.form_viewer_1 will be updated in-place
  ~ resource "aws_lb_target_group" "form_viewer_1" {
        id                                 = "arn:aws:elasticloadbalancing:ca-central-1:957818836222:targetgroup/form-viewer/8dac72758c8ecdcc"
        name                               = "form-viewer"
        tags                               = {
            "Name" = "form_viewer_1"
        }
        # (17 unchanged attributes hidden)

      ~ health_check {
          ~ path                = "/form-builder/edit" -> "/en/form-builder"
            # (8 unchanged attributes hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lb_target_group.form_viewer_2 will be updated in-place
  ~ resource "aws_lb_target_group" "form_viewer_2" {
        id                                 = "arn:aws:elasticloadbalancing:ca-central-1:957818836222:targetgroup/form-viewer-2/a03ac97959b5fb63"
        name                               = "form-viewer-2"
        tags                               = {
            "Name" = "form_viewer_2"
        }
        # (17 unchanged attributes hidden)

      ~ health_check {
          ~ path                = "/form-builder/edit" -> "/en/form-builder"
            # (8 unchanged attributes hidden)
        }

        # (3 unchanged blocks hidden)
    }

  # aws_wafv2_regex_pattern_set.cognito_login_paths will be updated in-place
  ~ resource "aws_wafv2_regex_pattern_set" "cognito_login_paths" {
        id          = "a810cde4-c807-4b63-9b86-33be80670eae"
        name        = "cognito_login_paths"
        tags        = {}
        # (5 unchanged attributes hidden)

      + regular_expression {
          + regex_string = "^\\/(?:en|fr)?\\/auth\\/mfa$"
        }
      + regular_expression {
          + regex_string = "^\\/(api\\/auth\\/csrf)$"
        }

        # (1 unchanged block hidden)
    }

  # aws_wafv2_regex_pattern_set.valid_app_uri_paths will be updated in-place
  ~ resource "aws_wafv2_regex_pattern_set" "valid_app_uri_paths" {
        id          = "f3927a12-2101-47c6-9a47-7353ac95ba92"
        name        = "valid_app_uri_paths"
        tags        = {}
        # (5 unchanged attributes hidden)

      - regular_expression {
          - regex_string = "^\\/(?:en|fr)?\\/?(?:(admin|id|api|auth|#|profile|forms|unsupported-browser|terms-of-use|404)(?:\\/[\\w-]+)?)(?:\\/.*)?$" -> null
        }
      + regular_expression {
          + regex_string = "^\\/(?:en|fr)?\\/?(?:(admin|id|api|auth|#|profile|forms|unsupported-browser|terms-of-use|contact|support|404)(?:\\/[\\w-]+)?)(?:\\/.*)?$"
        }

        # (4 unchanged blocks hidden)
    }

  # aws_wafv2_rule_group.rate_limiters_group will be created
  + resource "aws_wafv2_rule_group" "rate_limiters_group" {
      + arn         = (known after apply)
      + capacity    = 32
      + id          = (known after apply)
      + lock_token  = (known after apply)
      + name        = "RateLimitersGroup"
      + name_prefix = (known after apply)
      + scope       = "REGIONAL"
      + tags_all    = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + rule {
          + name     = "BlanketRequestLimit"
          + priority = 1

          + action {
              + block {
                }
            }

          + statement {
              + rate_based_statement {
                  + aggregate_key_type = "IP"
                  + limit              = 2000
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "BlanketRequestLimit"
              + sampled_requests_enabled   = true
            }
        }
      + rule {
          + name     = "PostRequestLimit"
          + priority = 2

          + action {
              + block {
                }
            }

          + statement {
              + rate_based_statement {
                  + aggregate_key_type = "IP"
                  + limit              = 100

                  + scope_down_statement {
                      + byte_match_statement {
                          + positional_constraint = "EXACTLY"
                          + search_string         = "post"

                          + field_to_match {
                              + method {}
                            }

                          + text_transformation {
                              + priority = 1
                              + type     = "LOWERCASE"
                            }
                        }
                    }
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "PostRequestRateLimit"
              + sampled_requests_enabled   = true
            }
        }

      + visibility_config {
          + cloudwatch_metrics_enabled = true
          + metric_name                = "RateLimitersGroup"
          + sampled_requests_enabled   = false
        }
    }

  # aws_wafv2_web_acl.forms_acl will be updated in-place
  ~ resource "aws_wafv2_web_acl" "forms_acl" {
        id            = "88f61111-f91e-442b-9a19-c57c4f43ef7a"
        name          = "GCForms"
        tags          = {}
        # (6 unchanged attributes hidden)

      - rule {
          - name     = "PostRequestLimit" -> null
          - priority = 2 -> null

          - action {
              - block {
                }
            }

          - statement {
              - rate_based_statement {
                  - aggregate_key_type = "IP" -> null
                  - limit              = 100 -> null

                  - scope_down_statement {
                      - byte_match_statement {
                          - positional_constraint = "EXACTLY" -> null
                          - search_string         = "post" -> null

                          - field_to_match {
                              - method {}
                            }

                          - text_transformation {
                              - priority = 1 -> null
                              - type     = "LOWERCASE" -> null
                            }
                        }
                    }
                }
            }

          - visibility_config {
              - cloudwatch_metrics_enabled = true -> null
              - metric_name                = "PostRequestRateLimit" -> null
              - sampled_requests_enabled   = true -> null
            }
        }
      - rule {
          - name     = "AWSManagedRulesAmazonIpReputationList" -> null
          - priority = 1 -> null

          - override_action {
              - none {}
            }

          - statement {
              - managed_rule_group_statement {
                  - name        = "AWSManagedRulesAmazonIpReputationList" -> null
                  - vendor_name = "AWS" -> null
                }
            }

          - visibility_config {
              - cloudwatch_metrics_enabled = true -> null
              - metric_name                = "AWSManagedRulesAmazonIpReputationList" -> null
              - sampled_requests_enabled   = true -> null
            }
        }
      - rule {
          - name     = "AWSManagedRulesKnownBadInputsRuleSet" -> null
          - priority = 6 -> null

          - override_action {
              - none {}
            }

          - statement {
              - managed_rule_group_statement {
                  - name        = "AWSManagedRulesKnownBadInputsRuleSet" -> null
                  - vendor_name = "AWS" -> null
                }
            }

          - visibility_config {
              - cloudwatch_metrics_enabled = true -> null
              - metric_name                = "AWSManagedRulesKnownBadInputsRuleSet" -> null
              - sampled_requests_enabled   = true -> null
            }
        }
      - rule {
          - name     = "AWSManagedRulesLinuxRuleSet" -> null
          - priority = 7 -> null

          - override_action {
              - none {}
            }

          - statement {
              - managed_rule_group_statement {
                  - name        = "AWSManagedRulesLinuxRuleSet" -> null
                  - vendor_name = "AWS" -> null
                }
            }

          - visibility_config {
              - cloudwatch_metrics_enabled = true -> null
              - metric_name                = "AWSManagedRulesLinuxRuleSet" -> null
              - sampled_requests_enabled   = true -> null
            }
        }
      + rule {
          + name     = "AWSManagedRulesAmazonIpReputationList"
          + priority = 1

          + override_action {
              + none {}
            }

          + statement {
              + managed_rule_group_statement {
                  + name        = "AWSManagedRulesAmazonIpReputationList"
                  + vendor_name = "AWS"
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "AWSManagedRulesAmazonIpReputationList"
              + sampled_requests_enabled   = true
            }
        }
      + rule {
          + name     = "AWSManagedRulesKnownBadInputsRuleSet"
          + priority = 6

          + override_action {
              + none {}
            }

          + statement {
              + managed_rule_group_statement {
                  + name        = "AWSManagedRulesKnownBadInputsRuleSet"
                  + vendor_name = "AWS"
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "AWSManagedRulesKnownBadInputsRuleSet"
              + sampled_requests_enabled   = true
            }
        }
      + rule {
          + name     = "AWSManagedRulesLinuxRuleSet"
          + priority = 7

          + override_action {
              + none {}
            }

          + statement {
              + managed_rule_group_statement {
                  + name        = "AWSManagedRulesLinuxRuleSet"
                  + vendor_name = "AWS"
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "AWSManagedRulesLinuxRuleSet"
              + sampled_requests_enabled   = true
            }
        }
      + rule {
          + name     = "RateLimitersRuleGroup"
          + priority = 2

          + override_action {
              + none {}
            }

          + statement {
              + rule_group_reference_statement {
                  + arn = (known after apply)
                }
            }

          + visibility_config {
              + cloudwatch_metrics_enabled = true
              + metric_name                = "rate_limiters_rule_group"
              + sampled_requests_enabled   = false
            }
        }

        # (6 unchanged blocks hidden)
    }

Plan: 1 to add, 5 to change, 0 to destroy.

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_acm_certificate.form_viewer"]
WARN - plan.json - main - Missing Common Tags: ["aws_acm_certificate.form_viewer_maintenance_mode"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudfront_distribution.maintenance_mode"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.firehose_waf_logs"]
WARN - plan.json - main - Missing Common Tags: ["aws_kinesis_firehose_delivery_stream.firehose_waf_logs"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb.form_viewer"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb_listener.form_viewer_http"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb_listener.form_viewer_https"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb_target_group.form_viewer_1"]
WARN - plan.json - main - Missing Common Tags: ["aws_lb_target_group.form_viewer_2"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_bucket.maintenance_mode"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_css_files[\"style.css\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_html_files[\"index-fr.html\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_html_files[\"index.html\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_ico_files[\"favicon.ico\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.maintenance_static_page_svg_files[\"site-unavailable.svg\"]"]
WARN - plan.json - main - Missing Common Tags: ["aws_shield_protection.alb"]
WARN - plan.json - main - Missing Common Tags: ["aws_shield_protection.route53_hosted_zone[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_wafv2_regex_pattern_set.cognito_login_paths"]
WARN - plan.json - main - Missing Common Tags: ["aws_wafv2_regex_pattern_set.forms_base_url"]
WARN - plan.json - main - Missing Common Tags:...

Copy link

Production: app

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

⚠️   Warning: resources will be destroyed by this change!

Plan: 1 to add, 0 to change, 1 to destroy
Show summary
CHANGE NAME
recreate aws_ecs_task_definition.form_viewer
Show plan
Resource actions are indicated with the following symbols:
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_ecs_task_definition.form_viewer must be replaced
-/+ resource "aws_ecs_task_definition" "form_viewer" {
      ~ arn                      = "arn:aws:ecs:ca-central-1:957818836222:task-definition/form-viewer:65" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:ca-central-1:957818836222:task-definition/form-viewer" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  - cpu              = 0
                  - essential        = true
                  ~ linuxParameters  = {
                      ~ capabilities = {
                          - add  = []
                            # (1 unchanged attribute hidden)
                        }
                    }
                  - mountPoints      = []
                    name             = "form_viewer"
                  ~ portMappings     = [
                      ~ {
                          - hostPort      = 3000
                          - protocol      = "tcp"
                            # (1 unchanged attribute hidden)
                        },
                    ]
                  - systemControls   = []
                  - volumesFrom      = []
                    # (4 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "form-viewer" -> (known after apply)
      ~ revision                 = 65 -> (known after apply)
      - tags                     = {} -> null
        # (9 unchanged attributes hidden)
    }

Plan: 1 to add, 0 to change, 1 to destroy.

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_appautoscaling_target.forms[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_codedeploy_app.app"]
WARN - plan.json - main - Missing Common Tags: ["aws_codedeploy_deployment_group.app"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecs_cluster.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecs_service.form_viewer"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecs_task_definition.form_viewer"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.cognito"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_dynamodb"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_kms"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_s3"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_secrets_manager"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_sqs"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.codedeploy"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.forms"]

34 tests, 19 passed, 15 warnings, 0 failures, 0 exceptions

Copy link

Production: lambdas

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

⚠️   Warning: resources will be destroyed by this change!

Plan: 14 to add, 10 to change, 26 to destroy
Show summary
CHANGE NAME
recreate aws_lambda_function.audit_logs
aws_lambda_function.audit_logs_archiver
aws_lambda_function.form_archiver
aws_lambda_function.nagware
aws_lambda_function.reliability
aws_lambda_function.reliability_dlq_consumer
aws_lambda_function.response_archiver
aws_lambda_function.submission
aws_lambda_function.vault_integrity
aws_lambda_permission.allow_cloudwatch_to_run_archive_form_responses_lambda
aws_lambda_permission.allow_cloudwatch_to_run_dead_letter_queue_consumer_lambda
aws_lambda_permission.allow_cloudwatch_to_run_form_archiver_lambda
aws_lambda_permission.allow_cloudwatch_to_run_nagware_lambda
aws_lambda_permission.audit_logs_archiver
delete aws_lambda_code_signing_config.lambda_code_signing_config[0]
aws_s3_object.audit_logs_archiver_code
aws_s3_object.audit_logs_code
aws_s3_object.form_archiver_code
aws_s3_object.nagware_code
aws_s3_object.reliability_code
aws_s3_object.reliability_dlq_consumer_code
aws_s3_object.response_archiver_code
aws_s3_object.submission_code
aws_s3_object.vault_integrity_code
aws_signer_signing_job.vault_integrity[0]
aws_signer_signing_profile.lambda_signing_profile[0]
update aws_cloudwatch_event_target.audit_logs_archiver_lambda_trigger
aws_cloudwatch_event_target.form_archiver_lambda_trigger
aws_cloudwatch_event_target.nagware_lambda_trigger
aws_cloudwatch_event_target.reliability_dlq_lambda_trigger
aws_cloudwatch_event_target.response_archiver_lambda_trigger
aws_iam_policy.lambda_s3
aws_lambda_event_source_mapping.audit_logs
aws_lambda_event_source_mapping.reliability
aws_lambda_event_source_mapping.reprocess_submission
aws_lambda_event_source_mapping.vault_updated_item_stream

✂   Warning: plan has been truncated! See the full plan in the logs.

Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place
  - destroy
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_cloudwatch_event_target.audit_logs_archiver_lambda_trigger will be updated in-place
  ~ resource "aws_cloudwatch_event_target" "audit_logs_archiver_lambda_trigger" {
      ~ arn            = "arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs_Archiver" -> (known after apply)
        id             = "audit-logs-archiver-lambda-trigger-terraform-20240227164709957300000001"
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_event_target.form_archiver_lambda_trigger will be updated in-place
  ~ resource "aws_cloudwatch_event_target" "form_archiver_lambda_trigger" {
      ~ arn            = "arn:aws:lambda:ca-central-1:957818836222:function:Archive_Form_Templates" -> (known after apply)
        id             = "form-archiver-lambda-trigger-terraform-20240213151144091000000003"
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_event_target.nagware_lambda_trigger will be updated in-place
  ~ resource "aws_cloudwatch_event_target" "nagware_lambda_trigger" {
      ~ arn            = "arn:aws:lambda:ca-central-1:957818836222:function:Nagware" -> (known after apply)
        id             = "nagware-lambda-trigger-terraform-20240213151155623500000004"
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_event_target.reliability_dlq_lambda_trigger will be updated in-place
  ~ resource "aws_cloudwatch_event_target" "reliability_dlq_lambda_trigger" {
      ~ arn            = "arn:aws:lambda:ca-central-1:957818836222:function:Reliability_DLQ_Consumer" -> (known after apply)
        id             = "reliability-dlq-lambda-trigger-terraform-20240213151144080500000001"
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_event_target.response_archiver_lambda_trigger will be updated in-place
  ~ resource "aws_cloudwatch_event_target" "response_archiver_lambda_trigger" {
      ~ arn            = "arn:aws:lambda:ca-central-1:957818836222:function:Response_Archiver" -> (known after apply)
        id             = "response-archiver-lambda-trigger-terraform-20240213151144087800000002"
        # (3 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_s3 will be updated in-place
  ~ resource "aws_iam_policy" "lambda_s3" {
        id          = "arn:aws:iam::957818836222:policy/lambda_s3"
        name        = "lambda_s3"
      ~ policy      = jsonencode(
          ~ {
              ~ Statement = [
                  ~ {
                      ~ Resource = [
                            # (3 unchanged elements hidden)
                            "arn:aws:s3:::forms-production-reliability-file-storage",
                          - "arn:aws:s3:::forms-production-lambda-code/*",
                          - "arn:aws:s3:::forms-production-lambda-code",
                            "arn:aws:s3:::forms-production-audit-logs-archive-storage/*",
                            # (3 unchanged elements hidden)
                        ]
                        # (2 unchanged attributes hidden)
                    },
                ]
                # (1 unchanged attribute hidden)
            }
        )
        tags        = {}
        # (5 unchanged attributes hidden)
    }

  # aws_lambda_code_signing_config.lambda_code_signing_config[0] will be destroyed
  # (because aws_lambda_code_signing_config.lambda_code_signing_config is not in configuration)
  - resource "aws_lambda_code_signing_config" "lambda_code_signing_config" {
      - arn           = "arn:aws:lambda:ca-central-1:957818836222:code-signing-config:csc-0ea61cbb9c887afee" -> null
      - config_id     = "csc-0ea61cbb9c887afee" -> null
      - id            = "arn:aws:lambda:ca-central-1:957818836222:code-signing-config:csc-0ea61cbb9c887afee" -> null
      - last_modified = "2024-01-25T16:10:17.108835Z" -> null

      - allowed_publishers {
          - signing_profile_version_arns = [
              - "arn:aws:signer:ca-central-1:957818836222:/signing-profiles/lambda_signing_profile_20240125160945309900000001/qlihrOkB2U",
            ] -> null
        }

      - policies {
          - untrusted_artifact_on_deployment = "Enforce" -> null
        }
    }

  # aws_lambda_event_source_mapping.audit_logs will be updated in-place
  ~ resource "aws_lambda_event_source_mapping" "audit_logs" {
      ~ function_name                      = "arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs" -> (known after apply)
        id                                 = "46934244-6fab-43a6-9280-8c8309c0d6b8"
        # (17 unchanged attributes hidden)
    }

  # aws_lambda_event_source_mapping.reliability will be updated in-place
  ~ resource "aws_lambda_event_source_mapping" "reliability" {
      ~ function_name                      = "arn:aws:lambda:ca-central-1:957818836222:function:Reliability" -> (known after apply)
        id                                 = "2f994c5c-aeea-4d98-a56a-cd857e06ac89"
        # (17 unchanged attributes hidden)
    }

  # aws_lambda_event_source_mapping.reprocess_submission will be updated in-place
  ~ resource "aws_lambda_event_source_mapping" "reprocess_submission" {
      ~ function_name                      = "arn:aws:lambda:ca-central-1:957818836222:function:Reliability" -> (known after apply)
        id                                 = "da835a8c-6843-42f8-8509-6955dab673f1"
        # (17 unchanged attributes hidden)
    }

  # aws_lambda_event_source_mapping.vault_updated_item_stream will be updated in-place
  ~ resource "aws_lambda_event_source_mapping" "vault_updated_item_stream" {
      ~ function_name                      = "arn:aws:lambda:ca-central-1:957818836222:function:Vault_Data_Integrity_Check" -> (known after apply)
        id                                 = "8ea9dcb0-b362-47a1-8174-88f364ff034a"
        # (19 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

  # aws_lambda_function.audit_logs must be replaced
-/+ resource "aws_lambda_function" "audit_logs" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs" -> (known after apply)
      ~ function_name                  = "Audit_Logs" -> "audit-logs" # forces replacement
      - handler                        = "audit_logs.handler" -> null
      ~ id                             = "Audit_Logs" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs/invocations" -> (known after apply)
      ~ last_modified                  = "2024-03-19T14:40:47.000+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "audit_logs_code" -> null
      - s3_object_version              = "f_BzlZGp3EIHK9A_wAhInHPwzcXp2YLb" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "8XJrXQPGK78QNXqkYizyGlH5uM+xYA/x57QzSc/sbKw=" -> (known after apply)
      ~ source_code_size               = 4114773 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.audit_logs_archiver must be replaced
-/+ resource "aws_lambda_function" "audit_logs_archiver" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs_Archiver" -> (known after apply)
      ~ function_name                  = "Audit_Logs_Archiver" -> "audit-logs-archiver" # forces replacement
      - handler                        = "audit_logs_archiver.handler" -> null
      ~ id                             = "Audit_Logs_Archiver" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs_Archiver/invocations" -> (known after apply)
      ~ last_modified                  = "2024-02-27T16:47:10.032+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs_Archiver:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Audit_Logs_Archiver:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "audit_logs_archiver_code" -> null
      - s3_object_version              = "DhF3gQ_URRoNmSMI2xUH2ZMEKTiFYs8d" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "j21QkAUTlKxkmkad5xW89Zgl6fwIQ54MWvLhLAnhwdI=" -> (known after apply)
      ~ source_code_size               = 4774980 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.form_archiver must be replaced
-/+ resource "aws_lambda_function" "form_archiver" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Archive_Form_Templates" -> (known after apply)
      ~ function_name                  = "Archive_Form_Templates" -> "form-archiver" # forces replacement
      - handler                        = "form_archiver.handler" -> null
      ~ id                             = "Archive_Form_Templates" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Archive_Form_Templates/invocations" -> (known after apply)
      ~ last_modified                  = "2024-04-16T14:11:54.000+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Archive_Form_Templates:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Archive_Form_Templates:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "form_archiver_code" -> null
      - s3_object_version              = "OXu4Z6SwziptV7LIM00eSMf_PIkNEqik" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "tZom8NvYkLTCiFBHAx0p97qloJ1ZcMMumoKxxhc4SWc=" -> (known after apply)
      ~ source_code_size               = 4485536 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.nagware must be replaced
-/+ resource "aws_lambda_function" "nagware" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Nagware" -> (known after apply)
      ~ function_name                  = "Nagware" -> "nagware" # forces replacement
      - handler                        = "nagware.handler" -> null
      ~ id                             = "Nagware" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Nagware/invocations" -> (known after apply)
      ~ last_modified                  = "2024-04-16T14:11:49.000+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Nagware:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Nagware:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "nagware_code" -> null
      - s3_object_version              = "8IGUIN3KdmHILOgdapJHBBoyjC6WHrhZ" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "ewsERJHdgUqXPuAunXW9Djvue3VCJbRmdbJySbEUXMY=" -> (known after apply)
      ~ source_code_size               = 10578943 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.reliability must be replaced
-/+ resource "aws_lambda_function" "reliability" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Reliability" -> (known after apply)
      ~ function_name                  = "Reliability" -> "reliability" # forces replacement
      - handler                        = "reliability.handler" -> null
      ~ id                             = "Reliability" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Reliability/invocations" -> (known after apply)
      ~ last_modified                  = "2024-04-23T14:47:55.000+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Reliability:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Reliability:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "reliability_code" -> null
      - s3_object_version              = "z3oy_T8ai487X.40NWODpN1ewcjAymmN" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "gyCSkTbBtROZbqEOQMsEWTd3X+JXF91xF4ufJrDBrys=" -> (known after apply)
      ~ source_code_size               = 11933697 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.reliability_dlq_consumer must be replaced
-/+ resource "aws_lambda_function" "reliability_dlq_consumer" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Reliability_DLQ_Consumer" -> (known after apply)
      ~ function_name                  = "Reliability_DLQ_Consumer" -> "reliability-dlq-consumer" # forces replacement
      - handler                        = "dead_letter_queue_consumer.handler" -> null
      ~ id                             = "Reliability_DLQ_Consumer" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Reliability_DLQ_Consumer/invocations" -> (known after apply)
      ~ last_modified                  = "2024-02-13T15:11:44.105+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Reliability_DLQ_Consumer:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Reliability_DLQ_Consumer:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "reliability_dlq_consumer_code" -> null
      - s3_object_version              = "2eQTRAlARSviv5DKxSJvaPNpvg0ZmKwm" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "F7WbeUnrxxXYZkj7tkJyJcFV6inBl3QWsV9AzLcvfB4=" -> (known after apply)
      ~ source_code_size               = 4641394 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.response_archiver must be replaced
-/+ resource "aws_lambda_function" "response_archiver" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Response_Archiver" -> (known after apply)
      ~ function_name                  = "Response_Archiver" -> "response-archiver" # forces replacement
      - handler                        = "response_archiver.handler" -> null
      ~ id                             = "Response_Archiver" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Response_Archiver/invocations" -> (known after apply)
      ~ last_modified                  = "2024-02-13T15:11:44.124+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Response_Archiver:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Response_Archiver:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "response_archiver_code" -> null
      - s3_object_version              = "Qo0cmKhunoREYbSMy1NrRUGXqm20PLeB" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "iCOPYEkuyPrXdcFRLr6qL6swUo/kXiUZTdHb0tWWuOE=" -> (known after apply)
      ~ source_code_size               = 5847434 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.submission must be replaced
-/+ resource "aws_lambda_function" "submission" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Submission" -> (known after apply)
      - handler                        = "submission.handler" -> null
      ~ id                             = "Submission" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Submission/invocations" -> (known after apply)
      ~ last_modified                  = "2024-03-19T14:40:49.000+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Submission:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Submission:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "submission_code" -> null
      - s3_object_version              = "Ki9.vSqhDu3OCBabYVJPzhbPTfYOlE1T" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "DJVk2STondW1jm6Vj61kIHKK8sQw/oCC/75SlBdG3b8=" -> (known after apply)
      ~ source_code_size               = 5435903 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (8 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.vault_integrity must be replaced
-/+ resource "aws_lambda_function" "vault_integrity" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:Vault_Data_Integrity_Check" -> (known after apply)
      - code_signing_config_arn        = "arn:aws:lambda:ca-central-1:957818836222:code-signing-config:csc-0ea61cbb9c887afee" -> null
      ~ function_name                  = "Vault_Data_Integrity_Check" -> "vault-integrity" # forces replacement
      - handler                        = "vault_data_integrity_check.handler" -> null
      ~ id                             = "Vault_Data_Integrity_Check" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Vault_Data_Integrity_Check/invocations" -> (known after apply)
      ~ last_modified                  = "2024-04-30T18:40:25.000+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:Vault_Data_Integrity_Check:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:Vault_Data_Integrity_Check:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "signed/9379790a-421e-415a-9c93-647db5900668" -> null
      ~ signing_job_arn                = "arn:aws:signer:ca-central-1:957818836222:/signing-jobs/9379790a-421e-415a-9c93-647db5900668" -> (known after apply)
      ~ signing_profile_version_arn    = "arn:aws:signer:ca-central-1:957818836222:/signing-profiles/lambda_signing_profile_20240125160945309900000001/qlihrOkB2U" -> (known after apply)
      ~ source_code_hash               = "9lDCUtEgnDGaN0b7aU2yhDlM0DDumsUYZhbUsYDuAF4=" -> (known after apply)
      ~ source_code_size               = 8238441 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - environment {
          - variables = {
              - "LOCALSTACK" = "false"
            } -> null
        }

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (2 unchanged blocks hidden)
    }

  # aws_lambda_permission.allow_cloudwatch_to_run_archive_form_responses_lambda must be replaced
-/+ resource "aws_lambda_permission" "allow_cloudwatch_to_run_archive_form_responses_lambda" {
      ~ function_name       = "Response_Archiver" -> "response-archiver" # forces replacement
      ~ id                  = "AllowExecutionFromCloudWatch" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_lambda_permission.allow_cloudwatch_to_run_dead_letter_queue_consumer_lambda must be replaced
-/+ resource "aws_lambda_permission" "allow_cloudwatch_to_run_dead_letter_queue_consumer_lambda" {
      ~ function_name       = "Reliability_DLQ_Consumer" -> "reliability-dlq-consumer" # forces replacement
      ~ id                  = "AllowExecutionFromCloudWatch" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_lambda_permission.allow_cloudwatch_to_run_form_archiver_lambda must be replaced
-/+ resource "aws_lambda_permission" "allow_cloudwatch_to_run_form_archiver_lambda" {
      ~ function_name       = "Archive_Form_Templates" -> "form-archiver" # forces replacement
      ~ id                  = "AllowExecutionFromCloudWatch" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_lambda_permission.allow_cloudwatch_to_run_nagware_lambda must be replaced
-/+ resource "aws_lambda_permission" "allow_cloudwatch_to_run_nagware_lambda" {
      ~ function_name       = "Nagware" -> "nagware" # forces replacement
      ~ id                  = "AllowExecutionFromCloudWatch" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_lambda_permission.audit_logs_archiver must be replaced
-/+ resource "aws_lambda_permission" "audit_logs_archiver" {
      ~ function_name       = "Audit_Logs_Archiver" -> "audit-logs-archiver" # forces replacement
      ~ id                  = "AllowExecutionFromCloudWatch" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_s3_object.audit_logs_archiver_code will be destroyed
  # (because aws_s3_object.audit_logs_archiver_code is not in configuration)
  - resource "aws_s3_object" "audit_logs_archiver_code" {
      - bucket                 = "forms-production-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "application/octet-stream" -> null
      - etag               ...
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.audit_logs_archiver_lambda_trigger"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.form_archiver_lambda_trigger"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.nagware_lambda_trigger"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.reliability_dlq_lambda_trigger"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.response_archiver_lambda_trigger"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.archive_form_templates"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.audit_logs"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.audit_logs_archiver"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.dead_letter_queue_consumer"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.nagware"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.reliability"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.response_archiver"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.submission"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.vault_integrity"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.lambda_dynamodb"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.lambda_kms"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.lambda_logging"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.lambda_rds"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.lambda_s3"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.lambda_secrets"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.lambda_sns"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.lambda_sqs"]
WARN -...

Copy link

Production: alarms

✅   Terraform Init: success
✅   Terraform Validate: success
✅   Terraform Format: success
✅   Terraform Plan: success
✅   Conftest: success

⚠️   Warning: resources will be destroyed by this change!

Plan: 32 to add, 1 to change, 33 to destroy
Show summary
CHANGE NAME
recreate aws_cloudwatch_log_subscription_filter.forms_app_log_stream
aws_cloudwatch_log_subscription_filter.forms_unhandled_error_steam
aws_cloudwatch_log_subscription_filter.lambda_error_detection["audit_logs_archiver"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["nagware"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["reliability"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["response_archiver"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["submission"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["audit_logs_archiver"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["nagware"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["reliability"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["response_archiver"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["submission"]
aws_lambda_function.notify_slack
aws_lambda_permission.allow_cloudwatch_to_run_lambda
aws_lambda_permission.notify_slack_critical
aws_lambda_permission.notify_slack_ok
aws_lambda_permission.notify_slack_ok_us_east
aws_lambda_permission.notify_slack_warning
aws_lambda_permission.notify_slack_warning_us_east
aws_sns_topic_subscription.topic_critical
aws_sns_topic_subscription.topic_ok
aws_sns_topic_subscription.topic_ok_us_east
aws_sns_topic_subscription.topic_warning
aws_sns_topic_subscription.topic_warning_us_east
add aws_cloudwatch_log_subscription_filter.lambda_error_detection["audit_logs"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["form_archiver"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["reliability_dlq_consumer"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["vault_integrity"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["audit_logs"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["form_archiver"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["reliability_dlq_consumer"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["vault_integrity"]
delete aws_cloudwatch_log_subscription_filter.lambda_error_detection["audit_log"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["dlq_consumer"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["template_archiver"]
aws_cloudwatch_log_subscription_filter.lambda_error_detection["vault_data_integrity_check"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["audit_log"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["dlq_consumer"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["template_archiver"]
aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["vault_data_integrity_check"]
aws_s3_object.notify_slack_code
update aws_cloudwatch_metric_alarm.vault_data_integrity_check_lambda_iterator_age
Show plan
Resource actions are indicated with the following symbols:
  + create
  ~ update in-place
  - destroy
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_cloudwatch_log_subscription_filter.forms_app_log_stream must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "forms_app_log_stream" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-3008753258" -> (known after apply)
        name            = "forms_app_log_stream"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.forms_unhandled_error_steam must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "forms_unhandled_error_steam" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-3008753258" -> (known after apply)
        name            = "forms_unhandled_error_stream"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["audit_log"] will be destroyed
  # (because key ["audit_log"] is not in for_each map)
  - resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      - destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" -> null
      - distribution    = "ByLogStream" -> null
      - filter_pattern  = "{($.level = \"warn\") || ($.level = \"error\")}" -> null
      - id              = "cwlsf-821307863" -> null
      - log_group_name  = "/aws/lambda/Audit_Logs" -> null
      - name            = "error_detection_in_audit_log_lambda_logs" -> null
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["audit_logs"] will be created
  + resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      + destination_arn = (known after apply)
      + distribution    = "ByLogStream"
      + filter_pattern  = "{($.level = \"warn\") || ($.level = \"error\")}"
      + id              = (known after apply)
      + log_group_name  = "/aws/lambda/Audit_Logs"
      + name            = "error_detection_in_audit_logs_lambda_logs"
      + role_arn        = (known after apply)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["audit_logs_archiver"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-2742612913" -> (known after apply)
        name            = "error_detection_in_audit_logs_archiver_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["dlq_consumer"] will be destroyed
  # (because key ["dlq_consumer"] is not in for_each map)
  - resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      - destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" -> null
      - distribution    = "ByLogStream" -> null
      - filter_pattern  = "{($.level = \"warn\") || ($.level = \"error\")}" -> null
      - id              = "cwlsf-125968559" -> null
      - log_group_name  = "/aws/lambda/Reliability_DLQ_Consumer" -> null
      - name            = "error_detection_in_dlq_consumer_lambda_logs" -> null
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["form_archiver"] will be created
  + resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      + destination_arn = (known after apply)
      + distribution    = "ByLogStream"
      + filter_pattern  = "{($.level = \"warn\") || ($.level = \"error\")}"
      + id              = (known after apply)
      + log_group_name  = "/aws/lambda/Archive_Form_Templates"
      + name            = "error_detection_in_form_archiver_lambda_logs"
      + role_arn        = (known after apply)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["nagware"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-2378547274" -> (known after apply)
        name            = "error_detection_in_nagware_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["reliability"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-2677299195" -> (known after apply)
        name            = "error_detection_in_reliability_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["reliability_dlq_consumer"] will be created
  + resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      + destination_arn = (known after apply)
      + distribution    = "ByLogStream"
      + filter_pattern  = "{($.level = \"warn\") || ($.level = \"error\")}"
      + id              = (known after apply)
      + log_group_name  = "/aws/lambda/Reliability_DLQ_Consumer"
      + name            = "error_detection_in_reliability_dlq_consumer_lambda_logs"
      + role_arn        = (known after apply)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["response_archiver"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-1985583210" -> (known after apply)
        name            = "error_detection_in_response_archiver_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["submission"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-2956744385" -> (known after apply)
        name            = "error_detection_in_submission_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["template_archiver"] will be destroyed
  # (because key ["template_archiver"] is not in for_each map)
  - resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      - destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" -> null
      - distribution    = "ByLogStream" -> null
      - filter_pattern  = "{($.level = \"warn\") || ($.level = \"error\")}" -> null
      - id              = "cwlsf-4036201582" -> null
      - log_group_name  = "/aws/lambda/Archive_Form_Templates" -> null
      - name            = "error_detection_in_template_archiver_lambda_logs" -> null
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["vault_data_integrity_check"] will be destroyed
  # (because key ["vault_data_integrity_check"] is not in for_each map)
  - resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      - destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" -> null
      - distribution    = "ByLogStream" -> null
      - filter_pattern  = "{($.level = \"warn\") || ($.level = \"error\")}" -> null
      - id              = "cwlsf-125604783" -> null
      - log_group_name  = "/aws/lambda/Vault_Data_Integrity_Check" -> null
      - name            = "error_detection_in_vault_data_integrity_check_lambda_logs" -> null
    }

  # aws_cloudwatch_log_subscription_filter.lambda_error_detection["vault_integrity"] will be created
  + resource "aws_cloudwatch_log_subscription_filter" "lambda_error_detection" {
      + destination_arn = (known after apply)
      + distribution    = "ByLogStream"
      + filter_pattern  = "{($.level = \"warn\") || ($.level = \"error\")}"
      + id              = (known after apply)
      + log_group_name  = "/aws/lambda/Vault_Data_Integrity_Check"
      + name            = "error_detection_in_vault_integrity_lambda_logs"
      + role_arn        = (known after apply)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["audit_log"] will be destroyed
  # (because key ["audit_log"] is not in for_each map)
  - resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      - destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" -> null
      - distribution    = "ByLogStream" -> null
      - filter_pattern  = "Task timed out" -> null
      - id              = "cwlsf-821307863" -> null
      - log_group_name  = "/aws/lambda/Audit_Logs" -> null
      - name            = "timeout_detection_in_audit_log_lambda_logs" -> null
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["audit_logs"] will be created
  + resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      + destination_arn = (known after apply)
      + distribution    = "ByLogStream"
      + filter_pattern  = "Task timed out"
      + id              = (known after apply)
      + log_group_name  = "/aws/lambda/Audit_Logs"
      + name            = "timeout_detection_in_audit_logs_lambda_logs"
      + role_arn        = (known after apply)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["audit_logs_archiver"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-2742612913" -> (known after apply)
        name            = "timeout_detection_in_audit_logs_archiver_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["dlq_consumer"] will be destroyed
  # (because key ["dlq_consumer"] is not in for_each map)
  - resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      - destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" -> null
      - distribution    = "ByLogStream" -> null
      - filter_pattern  = "Task timed out" -> null
      - id              = "cwlsf-125968559" -> null
      - log_group_name  = "/aws/lambda/Reliability_DLQ_Consumer" -> null
      - name            = "timeout_detection_in_dlq_consumer_lambda_logs" -> null
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["form_archiver"] will be created
  + resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      + destination_arn = (known after apply)
      + distribution    = "ByLogStream"
      + filter_pattern  = "Task timed out"
      + id              = (known after apply)
      + log_group_name  = "/aws/lambda/Archive_Form_Templates"
      + name            = "timeout_detection_in_form_archiver_lambda_logs"
      + role_arn        = (known after apply)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["nagware"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-2378547274" -> (known after apply)
        name            = "timeout_detection_in_nagware_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["reliability"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-2677299195" -> (known after apply)
        name            = "timeout_detection_in_reliability_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["reliability_dlq_consumer"] will be created
  + resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      + destination_arn = (known after apply)
      + distribution    = "ByLogStream"
      + filter_pattern  = "Task timed out"
      + id              = (known after apply)
      + log_group_name  = "/aws/lambda/Reliability_DLQ_Consumer"
      + name            = "timeout_detection_in_reliability_dlq_consumer_lambda_logs"
      + role_arn        = (known after apply)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["response_archiver"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-1985583210" -> (known after apply)
        name            = "timeout_detection_in_response_archiver_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["submission"] must be replaced
-/+ resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      ~ destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      ~ id              = "cwlsf-2956744385" -> (known after apply)
        name            = "timeout_detection_in_submission_lambda_logs"
      + role_arn        = (known after apply)
        # (3 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["template_archiver"] will be destroyed
  # (because key ["template_archiver"] is not in for_each map)
  - resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      - destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" -> null
      - distribution    = "ByLogStream" -> null
      - filter_pattern  = "Task timed out" -> null
      - id              = "cwlsf-4036201582" -> null
      - log_group_name  = "/aws/lambda/Archive_Form_Templates" -> null
      - name            = "timeout_detection_in_template_archiver_lambda_logs" -> null
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["vault_data_integrity_check"] will be destroyed
  # (because key ["vault_data_integrity_check"] is not in for_each map)
  - resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      - destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" -> null
      - distribution    = "ByLogStream" -> null
      - filter_pattern  = "Task timed out" -> null
      - id              = "cwlsf-125604783" -> null
      - log_group_name  = "/aws/lambda/Vault_Data_Integrity_Check" -> null
      - name            = "timeout_detection_in_vault_data_integrity_check_lambda_logs" -> null
    }

  # aws_cloudwatch_log_subscription_filter.lambda_timeout_detection["vault_integrity"] will be created
  + resource "aws_cloudwatch_log_subscription_filter" "lambda_timeout_detection" {
      + destination_arn = (known after apply)
      + distribution    = "ByLogStream"
      + filter_pattern  = "Task timed out"
      + id              = (known after apply)
      + log_group_name  = "/aws/lambda/Vault_Data_Integrity_Check"
      + name            = "timeout_detection_in_vault_integrity_lambda_logs"
      + role_arn        = (known after apply)
    }

  # aws_cloudwatch_metric_alarm.vault_data_integrity_check_lambda_iterator_age will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "vault_data_integrity_check_lambda_iterator_age" {
      ~ dimensions                = {
          ~ "FunctionName" = "Vault_Data_Integrity_Check" -> "vault-integrity"
          ~ "Resource"     = "Vault_Data_Integrity_Check" -> "vault-integrity"
        }
        id                        = "Vault data integrity check lambda iterator age"
        tags                      = {}
        # (17 unchanged attributes hidden)
    }

  # aws_lambda_function.notify_slack must be replaced
-/+ resource "aws_lambda_function" "notify_slack" {
      ~ architectures                  = [
          - "x86_64",
        ] -> (known after apply)
      ~ arn                            = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" -> (known after apply)
      ~ function_name                  = "NotifySlack" -> "notify-slack" # forces replacement
      - handler                        = "notify_slack.handler" -> null
      ~ id                             = "NotifySlack" -> (known after apply)
      + image_uri                      = ":latest"
      ~ invoke_arn                     = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack/invocations" -> (known after apply)
      ~ last_modified                  = "2024-04-16T14:14:06.000+0000" -> (known after apply)
      - layers                         = [] -> null
      ~ package_type                   = "Zip" -> "Image" # forces replacement
      ~ qualified_arn                  = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack:$LATEST" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:ca-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack:$LATEST/invocations" -> (known after apply)
      - runtime                        = "nodejs18.x" -> null
      - s3_bucket                      = "forms-production-lambda-code" -> null
      - s3_key                         = "notify_slack_code" -> null
      - s3_object_version              = "8oRf2BN4TYTL69XM0qOu2Dhp8BAz5aYR" -> null
      + signing_job_arn                = (known after apply)
      + signing_profile_version_arn    = (known after apply)
      ~ source_code_hash               = "kbHJgDNOQodqCMI271CAcgHrZGTvsoUmV5UoyA6F7k8=" -> (known after apply)
      ~ source_code_size               = 26171 -> (known after apply)
      - tags                           = {} -> null
      ~ version                        = "$LATEST" -> (known after apply)
        # (7 unchanged attributes hidden)

      - ephemeral_storage {
          - size = 512 -> null
        }

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_permission.allow_cloudwatch_to_run_lambda must be replaced
-/+ resource "aws_lambda_permission" "allow_cloudwatch_to_run_lambda" {
      ~ function_name       = "NotifySlack" -> "notify-slack" # forces replacement
      ~ id                  = "AllowExecutionFromCloudWatch" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_lambda_permission.notify_slack_critical must be replaced
-/+ resource "aws_lambda_permission" "notify_slack_critical" {
      ~ function_name       = "NotifySlack" -> "notify-slack" # forces replacement
      ~ id                  = "AllowExecutionFromSNSCriticalAlert" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_lambda_permission.notify_slack_ok must be replaced
-/+ resource "aws_lambda_permission" "notify_slack_ok" {
      ~ function_name       = "NotifySlack" -> "notify-slack" # forces replacement
      ~ id                  = "AllowExecutionFromSNSOkAlert" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_lambda_permission.notify_slack_ok_us_east must be replaced
-/+ resource "aws_lambda_permission" "notify_slack_ok_us_east" {
      ~ function_name       = "NotifySlack" -> "notify-slack" # forces replacement
      ~ id                  = "AllowExecutionFromSNSOkAlertUSEast" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_lambda_permission.notify_slack_warning must be replaced
-/+ resource "aws_lambda_permission" "notify_slack_warning" {
      ~ function_name       = "NotifySlack" -> "notify-slack" # forces replacement
      ~ id                  = "AllowExecutionFromSNSWarningAlert" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_lambda_permission.notify_slack_warning_us_east must be replaced
-/+ resource "aws_lambda_permission" "notify_slack_warning_us_east" {
      ~ function_name       = "NotifySlack" -> "notify-slack" # forces replacement
      ~ id                  = "AllowExecutionFromSNSWarningAlertUSEast" -> (known after apply)
      + statement_id_prefix = (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_s3_object.notify_slack_code will be destroyed
  # (because aws_s3_object.notify_slack_code is not in configuration)
  - resource "aws_s3_object" "notify_slack_code" {
      - bucket                 = "forms-production-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "application/octet-stream" -> null
      - etag                   = "212705c038f15626255809231f4906e7" -> null
      - force_destroy          = false -> null
      - id                     = "notify_slack_code" -> null
      - key                    = "notify_slack_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/notify_slack_code.zip" -> null
      - source_hash            = "kbHJgDNOQodqCMI271CAcgHrZGTvsoUmV5UoyA6F7k8=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {
          - "CostCentre" = "forms-platform-production"
          - "Terraform"  = "true"
        } -> null
      - version_id             = "8oRf2BN4TYTL69XM0qOu2Dhp8BAz5aYR" -> null
    }

  # aws_sns_topic_subscription.topic_critical must be replaced
-/+ resource "aws_sns_topic_subscription" "topic_critical" {
      ~ arn                             = "arn:aws:sns:ca-central-1:957818836222:alert-critical:94fb04b9-3391-4941-90d4-15b39abb25bd" -> (known after apply)
      ~ confirmation_was_authenticated  = true -> (known after apply)
      ~ endpoint                        = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      + filter_policy_scope             = (known after apply)
      ~ id                              = "arn:aws:sns:ca-central-1:957818836222:alert-critical:94fb04b9-3391-4941-90d4-15b39abb25bd" -> (known after apply)
      ~ owner_id                        = "957818836222" -> (known after apply)
      ~ pending_confirmation            = false -> (known after apply)
        # (5 unchanged attributes hidden)
    }

  # aws_sns_topic_subscription.topic_ok must be replaced
-/+ resource "aws_sns_topic_subscription" "topic_ok" {
      ~ arn                             = "arn:aws:sns:ca-central-1:957818836222:alert-ok:ee918b25-14ac-45de-af1a-7316725ab8fe" -> (known after apply)
      ~ confirmation_was_authenticated  = true -> (known after apply)
      ~ endpoint                        = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      + filter_policy_scope             = (known after apply)
      ~ id                              = "arn:aws:sns:ca-central-1:957818836222:alert-ok:ee918b25-14ac-45de-af1a-7316725ab8fe" -> (known after apply)
      ~ owner_id                        = "957818836222" -> (known after apply)
      ~ pending_confirmation            = false -> (known after apply)
        # (5 unchanged attributes hidden)
    }

  # aws_sns_topic_subscription.topic_ok_us_east must be replaced
-/+ resource "aws_sns_topic_subscription" "topic_ok_us_east" {
      ~ arn                             = "arn:aws:sns:us-east-1:957818836222:alert-ok:ca8689d1-31b5-4754-bab6-62b19e7ee40e" -> (known after apply)
      ~ confirmation_was_authenticated  = true -> (known after apply)
      ~ endpoint                        = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      + filter_policy_scope             = (known after apply)
      ~ id                              = "arn:aws:sns:us-east-1:957818836222:alert-ok:ca8689d1-31b5-4754-bab6-62b19e7ee40e" -> (known after apply)
      ~ owner_id                        = "957818836222" -> (known after apply)
      ~ pending_confirmation            = false -> (known after apply)
        # (5 unchanged attributes hidden)
    }

  # aws_sns_topic_subscription.topic_warning must be replaced
-/+ resource "aws_sns_topic_subscription" "topic_warning" {
      ~ arn                             = "arn:aws:sns:ca-central-1:957818836222:alert-warning:b6c7ad37-8662-4dee-9f83-a8802e87dc42" -> (known after apply)
      ~ confirmation_was_authenticated  = true -> (known after apply)
      ~ endpoint                        = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      + filter_policy_scope             = (known after apply)
      ~ id                              = "arn:aws:sns:ca-central-1:957818836222:alert-warning:b6c7ad37-8662-4dee-9f83-a8802e87dc42" -> (known after apply)
      ~ owner_id                        = "957818836222" -> (known after apply)
      ~ pending_confirmation            = false -> (known after apply)
        # (5 unchanged attributes hidden)
    }

  # aws_sns_topic_subscription.topic_warning_us_east must be replaced
-/+ resource "aws_sns_topic_subscription" "topic_warning_us_east" {
      ~ arn                             = "arn:aws:sns:us-east-1:957818836222:alert-warning:dcd0dd15-ba3d-4258-9744-b6307bd8ebc8" -> (known after apply)
      ~ confirmation_was_authenticated  = true -> (known after apply)
      ~ endpoint                        = "arn:aws:lambda:ca-central-1:957818836222:function:NotifySlack" # forces replacement -> (known after apply) # forces replacement
      + filter_policy_scope             = (known after apply)
      ~ id                              = "arn:aws:sns:us-east-1:957818836222:alert-warning:dcd0dd15-ba3d-4258-9744-b6307bd8ebc8" -> (known after apply)
      ~ owner_id                        = "957818836222" -> (known after apply)
      ~ pending_confirmation            = false -> (known after apply)
        # (5 unchanged attributes hidden)
    }

Plan: 32 to add, 1 to change, 33 to destroy.

Warning: Argument is deprecated

  with module.athena_bucket.aws_s3_bucket.this,
  on .terraform/modules/athena_bucket/S3/main.tf line 8, in resource "aws_s3_bucket" "this":
   8: resource "aws_s3_bucket" "this" {

Use the aws_s3_bucket_server_side_encryption_configuration resource instead

(and 3 more similar warnings elsewhere)

─────────────────────────────────────────────────────────────────────────────

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.codedeploy_sns"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.notify_slack"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ELB_5xx_error_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.UnHealthyHostCount-TargetGroup1"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.UnHealthyHostCount-TargetGroup2"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.alb_ddos"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.audit_log_dead_letter_queue_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.cognito_login_outside_canada_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.cognito_signin_exceeded"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ddos_detected_forms_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ddos_detected_route53_warn[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.forms_cpu_utilization_high_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.forms_memory_utilization_high_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.reliability_dead_letter_queue_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.response_time_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.route53_ddos[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.twoFa_verification_exceeded"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.vault_data_integrity_check_lambda_iterator_age"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.notify_slack_lambda"]
WARN - plan.json -...

@patheard patheard merged commit 033709a into develop May 30, 2024
7 of 8 checks passed
@patheard patheard deleted the release-please--branches--develop branch May 30, 2024 11:59
@sre-read-write
Copy link
Contributor Author

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants