Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

chore: AWS Provider upgrade #556

Merged
merged 74 commits into from
Jan 10, 2024
Merged

Conversation

bryan-robitaille
Copy link
Contributor

Summary | Résumé

Upgrades AWS Provider

@bryan-robitaille bryan-robitaille force-pushed the chore/aws_provider_upgrade branch from 6dbf741 to d695f8e Compare December 19, 2023 20:10
Co-authored-by: Clément JANIN <clement.janin@cds-snc.ca>
@craigzour craigzour self-requested a review January 9, 2024 14:46
craigzour
craigzour previously approved these changes Jan 9, 2024
Copy link

⚠ Terrform update available

Terragrunt: 0.54.12 (using 0.54.8)

Copy link

Staging: ecr

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

Plan: 0 to add, 2 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_ecr_repository.load_test_repository[0]
aws_ecr_repository.viewer_repository
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_ecr_repository.load_test_repository[0] will be updated in-place
  ~ resource "aws_ecr_repository" "load_test_repository" {
        id                   = "load_test"
        name                 = "load_test"
      ~ tags                 = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

  # aws_ecr_repository.viewer_repository will be updated in-place
  ~ resource "aws_ecr_repository" "viewer_repository" {
        id                   = "form_viewer_staging"
        name                 = "form_viewer_staging"
      ~ tags                 = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

Plan: 0 to add, 2 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_ecr_repository.load_test_repository[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_ecr_repository.viewer_repository"]

21 tests, 19 passed, 2 warnings, 0 failures, 0 exceptions

Copy link

Staging: hosted_zone

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

Plan: 0 to add, 1 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_route53_zone.form_viewer[0]
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_route53_zone.form_viewer[0] will be updated in-place
  ~ resource "aws_route53_zone" "form_viewer" {
        id                  = "Z05990652HOQ0SGHD81ZC"
        name                = "forms-staging.cdssandbox.xyz"
      ~ tags                = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (7 unchanged attributes hidden)
    }

Plan: 0 to add, 1 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_route53_zone.form_viewer[0]"]

20 tests, 19 passed, 1 warning, 0 failures, 0 exceptions

Copy link

Staging: kms

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

Plan: 0 to add, 3 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_kms_key.cloudwatch
aws_kms_key.cloudwatch_us_east
aws_kms_key.dynamo_db
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_kms_key.cloudwatch will be updated in-place
  ~ resource "aws_kms_key" "cloudwatch" {
        id                                 = "c5c2a1c2-c092-4fa1-8daf-3414f3511b1d"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)
    }

  # aws_kms_key.cloudwatch_us_east will be updated in-place
  ~ resource "aws_kms_key" "cloudwatch_us_east" {
        id                                 = "6396cc01-7a02-47de-9bc1-4f810573812b"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)
    }

  # aws_kms_key.dynamo_db will be updated in-place
  ~ resource "aws_kms_key" "dynamo_db" {
        id                                 = "1f3edb85-9eac-4da9-8c7c-43a68e339ede"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)
    }

Plan: 0 to add, 3 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_kms_key.cloudwatch"]
WARN - plan.json - main - Missing Common Tags: ["aws_kms_key.cloudwatch_us_east"]
WARN - plan.json - main - Missing Common Tags: ["aws_kms_key.dynamo_db"]

22 tests, 19 passed, 3 warnings, 0 failures, 0 exceptions

@craigzour craigzour self-requested a review January 10, 2024 19:26
Copy link

Staging: sqs

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

Plan: 0 to add, 5 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_sqs_queue.audit_log_deadletter_queue
aws_sqs_queue.audit_log_queue
aws_sqs_queue.reliability_deadletter_queue
aws_sqs_queue.reliability_queue
aws_sqs_queue.reprocess_submission_queue
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_sqs_queue.audit_log_deadletter_queue will be updated in-place
  ~ resource "aws_sqs_queue" "audit_log_deadletter_queue" {
        id                                = "https://sqs.ca-central-1.amazonaws.com/687401027353/audit_log_deadletter_queue"
        name                              = "audit_log_deadletter_queue"
      ~ tags                              = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (13 unchanged attributes hidden)
    }

  # aws_sqs_queue.audit_log_queue will be updated in-place
  ~ resource "aws_sqs_queue" "audit_log_queue" {
        id                                = "https://sqs.ca-central-1.amazonaws.com/687401027353/audit_log_queue"
        name                              = "audit_log_queue"
      ~ tags                              = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (15 unchanged attributes hidden)
    }

  # aws_sqs_queue.reliability_deadletter_queue will be updated in-place
  ~ resource "aws_sqs_queue" "reliability_deadletter_queue" {
        id                                = "https://sqs.ca-central-1.amazonaws.com/687401027353/reliability_deadletter_queue.fifo"
        name                              = "reliability_deadletter_queue.fifo"
      ~ tags                              = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (15 unchanged attributes hidden)
    }

  # aws_sqs_queue.reliability_queue will be updated in-place
  ~ resource "aws_sqs_queue" "reliability_queue" {
        id                                = "https://sqs.ca-central-1.amazonaws.com/687401027353/submission_processing.fifo"
        name                              = "submission_processing.fifo"
      ~ tags                              = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)
    }

  # aws_sqs_queue.reprocess_submission_queue will be updated in-place
  ~ resource "aws_sqs_queue" "reprocess_submission_queue" {
        id                                = "https://sqs.ca-central-1.amazonaws.com/687401027353/reprocess_submission_queue.fifo"
        name                              = "reprocess_submission_queue.fifo"
      ~ tags                              = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)
    }

Plan: 0 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_sqs_queue.audit_log_deadletter_queue"]
WARN - plan.json - main - Missing Common Tags: ["aws_sqs_queue.audit_log_queue"]
WARN - plan.json - main - Missing Common Tags: ["aws_sqs_queue.reliability_deadletter_queue"]
WARN - plan.json - main - Missing Common Tags: ["aws_sqs_queue.reliability_queue"]
WARN - plan.json - main - Missing Common Tags: ["aws_sqs_queue.reprocess_submission_queue"]

24 tests, 19 passed, 5 warnings, 0 failures, 0 exceptions

Copy link

Staging: secrets

✅   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, 5 to change, 1 to destroy
Show summary
CHANGE NAME
update aws_secretsmanager_secret.freshdesk_api_key
aws_secretsmanager_secret.notify_api_key
aws_secretsmanager_secret.notify_callback_bearer_token
aws_secretsmanager_secret.recaptcha_secret
aws_secretsmanager_secret.token_secret
recreate aws_secretsmanager_secret_version.notify_callback_bearer_token
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_secretsmanager_secret.freshdesk_api_key will be updated in-place
  ~ resource "aws_secretsmanager_secret" "freshdesk_api_key" {
        id                             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:freshdesk_api_key-JVyxop"
        name                           = "freshdesk_api_key"
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (4 unchanged attributes hidden)
    }

  # aws_secretsmanager_secret.notify_api_key will be updated in-place
  ~ resource "aws_secretsmanager_secret" "notify_api_key" {
        id                             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:notify_api_key-eR3nNp"
        name                           = "notify_api_key"
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (4 unchanged attributes hidden)
    }

  # aws_secretsmanager_secret.notify_callback_bearer_token will be updated in-place
  ~ resource "aws_secretsmanager_secret" "notify_callback_bearer_token" {
        id                             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:notify_callback_bearer_token-aXJPLs"
        name                           = "notify_callback_bearer_token"
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (4 unchanged attributes hidden)
    }

  # aws_secretsmanager_secret.recaptcha_secret will be updated in-place
  ~ resource "aws_secretsmanager_secret" "recaptcha_secret" {
        id                             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:recaptcha_secret-tTjsBo"
        name                           = "recaptcha_secret"
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (4 unchanged attributes hidden)
    }

  # aws_secretsmanager_secret.token_secret will be updated in-place
  ~ resource "aws_secretsmanager_secret" "token_secret" {
        id                             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:token_secret-n5Doyu"
        name                           = "token_secret"
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (4 unchanged attributes hidden)
    }

  # aws_secretsmanager_secret_version.notify_callback_bearer_token must be replaced
-/+ resource "aws_secretsmanager_secret_version" "notify_callback_bearer_token" {
      ~ arn            = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:notify_callback_bearer_token-aXJPLs" -> (known after apply)
      ~ id             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:notify_callback_bearer_token-aXJPLs|4A43D97C-2937-4E91-A924-ADF60955E459" -> (known after apply)
      ~ secret_string  = (sensitive value) # forces replacement
      ~ version_id     = "4A43D97C-2937-4E91-A924-ADF60955E459" -> (known after apply)
      ~ version_stages = [
          - "AWSPREVIOUS",
        ] -> (known after apply)
        # (1 unchanged attribute hidden)
    }

Plan: 1 to add, 5 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_secretsmanager_secret.freshdesk_api_key"]
WARN - plan.json - main - Missing Common Tags: ["aws_secretsmanager_secret.notify_api_key"]
WARN - plan.json - main - Missing Common Tags: ["aws_secretsmanager_secret.notify_callback_bearer_token"]
WARN - plan.json - main - Missing Common Tags: ["aws_secretsmanager_secret.recaptcha_secret"]
WARN - plan.json - main - Missing Common Tags: ["aws_secretsmanager_secret.token_secret"]

24 tests, 19 passed, 5 warnings, 0 failures, 0 exceptions

Copy link

Staging: s3

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

Plan: 15 to add, 4 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_s3_bucket_acl.archive_storage
aws_s3_bucket_acl.lambda_code
aws_s3_bucket_acl.reliability_file_storage
aws_s3_bucket_acl.vault_file_storage
aws_s3_bucket_lifecycle_configuration.archive_storage
aws_s3_bucket_lifecycle_configuration.reliability_file_storage
aws_s3_bucket_ownership_controls.archive_storage
aws_s3_bucket_ownership_controls.lambda_code
aws_s3_bucket_ownership_controls.reliability_file_storage
aws_s3_bucket_ownership_controls.vault_file_storage
aws_s3_bucket_server_side_encryption_configuration.archive_storage
aws_s3_bucket_server_side_encryption_configuration.lambda_code
aws_s3_bucket_server_side_encryption_configuration.reliability_file_storage
aws_s3_bucket_server_side_encryption_configuration.vault_file_storage
aws_s3_bucket_versioning.lambda_code
update aws_s3_bucket.archive_storage
aws_s3_bucket.lambda_code
aws_s3_bucket.reliability_file_storage
aws_s3_bucket.vault_file_storage
Show plan
Resource actions are indicated with the following symbols:
  + create
  ~ update in-place

Terraform will perform the following actions:

  # aws_s3_bucket.archive_storage will be updated in-place
  ~ resource "aws_s3_bucket" "archive_storage" {
        id                          = "forms-staging-archive-storage"
      ~ tags                        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

  # aws_s3_bucket.lambda_code will be updated in-place
  ~ resource "aws_s3_bucket" "lambda_code" {
        id                          = "forms-staging-lambda-code"
      ~ tags                        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_s3_bucket.reliability_file_storage will be updated in-place
  ~ resource "aws_s3_bucket" "reliability_file_storage" {
        id                          = "forms-staging-reliability-file-storage"
      ~ tags                        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

  # aws_s3_bucket.vault_file_storage will be updated in-place
  ~ resource "aws_s3_bucket" "vault_file_storage" {
        id                          = "forms-staging-vault-file-storage"
      ~ tags                        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_s3_bucket_acl.archive_storage will be created
  + resource "aws_s3_bucket_acl" "archive_storage" {
      + acl    = "private"
      + bucket = "forms-staging-archive-storage"
      + id     = (known after apply)
    }

  # aws_s3_bucket_acl.lambda_code will be created
  + resource "aws_s3_bucket_acl" "lambda_code" {
      + acl    = "private"
      + bucket = "forms-staging-lambda-code"
      + id     = (known after apply)
    }

  # aws_s3_bucket_acl.reliability_file_storage will be created
  + resource "aws_s3_bucket_acl" "reliability_file_storage" {
      + acl    = "private"
      + bucket = "forms-staging-reliability-file-storage"
      + id     = (known after apply)
    }

  # aws_s3_bucket_acl.vault_file_storage will be created
  + resource "aws_s3_bucket_acl" "vault_file_storage" {
      + acl    = "private"
      + bucket = "forms-staging-vault-file-storage"
      + id     = (known after apply)
    }

  # aws_s3_bucket_lifecycle_configuration.archive_storage will be created
  + resource "aws_s3_bucket_lifecycle_configuration" "archive_storage" {
      + bucket = "forms-staging-archive-storage"
      + id     = (known after apply)

      + rule {
          + id     = "Clear Archive Storage after 30 days"
          + status = "Enabled"

          + expiration {
              + days                         = 30
              + expired_object_delete_marker = (known after apply)
            }
        }
    }

  # aws_s3_bucket_lifecycle_configuration.reliability_file_storage will be created
  + resource "aws_s3_bucket_lifecycle_configuration" "reliability_file_storage" {
      + bucket = "forms-staging-reliability-file-storage"
      + id     = (known after apply)

      + rule {
          + id     = "Clear Reliability Queue after 30 days"
          + status = "Enabled"

          + expiration {
              + days                         = 30
              + expired_object_delete_marker = (known after apply)
            }
        }
    }

  # aws_s3_bucket_ownership_controls.archive_storage will be created
  + resource "aws_s3_bucket_ownership_controls" "archive_storage" {
      + bucket = "forms-staging-archive-storage"
      + id     = (known after apply)

      + rule {
          + object_ownership = "BucketOwnerEnforced"
        }
    }

  # aws_s3_bucket_ownership_controls.lambda_code will be created
  + resource "aws_s3_bucket_ownership_controls" "lambda_code" {
      + bucket = "forms-staging-lambda-code"
      + id     = (known after apply)

      + rule {
          + object_ownership = "BucketOwnerEnforced"
        }
    }

  # aws_s3_bucket_ownership_controls.reliability_file_storage will be created
  + resource "aws_s3_bucket_ownership_controls" "reliability_file_storage" {
      + bucket = "forms-staging-reliability-file-storage"
      + id     = (known after apply)

      + rule {
          + object_ownership = "BucketOwnerEnforced"
        }
    }

  # aws_s3_bucket_ownership_controls.vault_file_storage will be created
  + resource "aws_s3_bucket_ownership_controls" "vault_file_storage" {
      + bucket = "forms-staging-vault-file-storage"
      + id     = (known after apply)

      + rule {
          + object_ownership = "BucketOwnerEnforced"
        }
    }

  # aws_s3_bucket_server_side_encryption_configuration.archive_storage will be created
  + resource "aws_s3_bucket_server_side_encryption_configuration" "archive_storage" {
      + bucket = "forms-staging-archive-storage"
      + id     = (known after apply)

      + rule {
          + apply_server_side_encryption_by_default {
              + sse_algorithm = "AES256"
            }
        }
    }

  # aws_s3_bucket_server_side_encryption_configuration.lambda_code will be created
  + resource "aws_s3_bucket_server_side_encryption_configuration" "lambda_code" {
      + bucket = "forms-staging-lambda-code"
      + id     = (known after apply)

      + rule {
          + apply_server_side_encryption_by_default {
              + sse_algorithm = "AES256"
            }
        }
    }

  # aws_s3_bucket_server_side_encryption_configuration.reliability_file_storage will be created
  + resource "aws_s3_bucket_server_side_encryption_configuration" "reliability_file_storage" {
      + bucket = "forms-staging-reliability-file-storage"
      + id     = (known after apply)

      + rule {
          + apply_server_side_encryption_by_default {
              + sse_algorithm = "AES256"
            }
        }
    }

  # aws_s3_bucket_server_side_encryption_configuration.vault_file_storage will be created
  + resource "aws_s3_bucket_server_side_encryption_configuration" "vault_file_storage" {
      + bucket = "forms-staging-vault-file-storage"
      + id     = (known after apply)

      + rule {
          + apply_server_side_encryption_by_default {
              + sse_algorithm = "AES256"
            }
        }
    }

  # aws_s3_bucket_versioning.lambda_code will be created
  + resource "aws_s3_bucket_versioning" "lambda_code" {
      + bucket = "forms-staging-lambda-code"
      + id     = (known after apply)

      + versioning_configuration {
          + mfa_delete = (known after apply)
          + status     = "Enabled"
        }
    }

Plan: 15 to add, 4 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_s3_bucket.archive_storage"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_bucket.lambda_code"]
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

Staging: sns

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

Plan: 0 to add, 5 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_sns_topic.alert_critical
aws_sns_topic.alert_ok
aws_sns_topic.alert_ok_us_east
aws_sns_topic.alert_warning
aws_sns_topic.alert_warning_us_east
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_sns_topic.alert_critical will be updated in-place
  ~ resource "aws_sns_topic" "alert_critical" {
        id                                       = "arn:aws:sns:ca-central-1:687401027353:alert-critical"
        name                                     = "alert-critical"
      ~ tags                                     = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (13 unchanged attributes hidden)
    }

  # aws_sns_topic.alert_ok will be updated in-place
  ~ resource "aws_sns_topic" "alert_ok" {
        id                                       = "arn:aws:sns:ca-central-1:687401027353:alert-ok"
        name                                     = "alert-ok"
      ~ tags                                     = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (13 unchanged attributes hidden)
    }

  # aws_sns_topic.alert_ok_us_east will be updated in-place
  ~ resource "aws_sns_topic" "alert_ok_us_east" {
        id                                       = "arn:aws:sns:us-east-1:687401027353:alert-ok"
        name                                     = "alert-ok"
      ~ tags                                     = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (13 unchanged attributes hidden)
    }

  # aws_sns_topic.alert_warning will be updated in-place
  ~ resource "aws_sns_topic" "alert_warning" {
        id                                       = "arn:aws:sns:ca-central-1:687401027353:alert-warning"
        name                                     = "alert-warning"
      ~ tags                                     = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (13 unchanged attributes hidden)
    }

  # aws_sns_topic.alert_warning_us_east will be updated in-place
  ~ resource "aws_sns_topic" "alert_warning_us_east" {
        id                                       = "arn:aws:sns:us-east-1:687401027353:alert-warning"
        name                                     = "alert-warning"
      ~ tags                                     = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (13 unchanged attributes hidden)
    }

Plan: 0 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_sns_topic.alert_critical"]
WARN - plan.json - main - Missing Common Tags: ["aws_sns_topic.alert_ok"]
WARN - plan.json - main - Missing Common Tags: ["aws_sns_topic.alert_ok_us_east"]
WARN - plan.json - main - Missing Common Tags: ["aws_sns_topic.alert_warning"]
WARN - plan.json - main - Missing Common Tags: ["aws_sns_topic.alert_warning_us_east"]

24 tests, 19 passed, 5 warnings, 0 failures, 0 exceptions

Copy link

Staging: cognito

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

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

Plan: 2 to add, 12 to change, 3 to destroy
Show summary
CHANGE NAME
add aws_iam_policy.lambda_s3
aws_s3_object.cognito_email_sender_code
delete aws_lambda_layer_version.cognito_email_sender_nodejs
aws_secretsmanager_secret.cognito_notify_api_key
aws_secretsmanager_secret_version.cognito_notify_api_key
update aws_cloudwatch_log_group.cognito_email_sender
aws_cloudwatch_log_group.cognito_pre_sign_up
aws_cognito_user_pool.forms
aws_iam_policy.cognito_lambda_kms
aws_iam_policy.cognito_lambda_logging
aws_iam_policy.cognito_lambda_secrets
aws_iam_policy.cognito_userpool_import_logging
aws_iam_role.cognito_lambda
aws_iam_role.cognito_userpool_import
aws_kms_key.cognito_encryption
aws_lambda_function.cognito_email_sender
aws_lambda_function.cognito_pre_sign_up
Show plan
Resource actions are indicated with the following symbols:
  + create
  ~ update in-place
  - destroy
 <= read (data resources)

Terraform will perform the following actions:

  # data.aws_iam_policy_document.cognito_lambda_kms will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "aws_iam_policy_document" "cognito_lambda_kms" {
      + id   = (known after apply)
      + json = (known after apply)

      + statement {
          + actions   = [
              + "kms:Decrypt",
              + "kms:Encrypt",
              + "kms:GenerateDataKey",
            ]
          + effect    = "Allow"
          + resources = [
              + "arn:aws:kms:ca-central-1:687401027353:key/976bc5ab-8b78-4ee2-9b86-5fc56942233e",
            ]
        }
    }

  # aws_cloudwatch_log_group.cognito_email_sender will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "cognito_email_sender" {
        id                = "/aws/lambda/Cognito_Email_Sender"
        name              = "/aws/lambda/Cognito_Email_Sender"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.cognito_pre_sign_up will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "cognito_pre_sign_up" {
        id                = "/aws/lambda/Cognito_Pre_Sign_Up"
        name              = "/aws/lambda/Cognito_Pre_Sign_Up"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cognito_user_pool.forms will be updated in-place
  ~ resource "aws_cognito_user_pool" "forms" {
        id                         = "ca-central-1_Cguq9JNQ1"
        name                       = "forms_user_pool"
        tags                       = {}
      ~ tags_all                   = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (12 unchanged attributes hidden)

        # (6 unchanged blocks hidden)
    }

  # aws_iam_policy.cognito_lambda_kms will be updated in-place
  ~ resource "aws_iam_policy" "cognito_lambda_kms" {
        id          = "arn:aws:iam::687401027353:policy/cognito_lambda_kms"
        name        = "cognito_lambda_kms"
      ~ policy      = jsonencode(
            {
              - Statement = [
                  - {
                      - Action   = [
                          - "kms:GenerateDataKey",
                          - "kms:Encrypt",
                          - "kms:Decrypt",
                        ]
                      - Effect   = "Allow"
                      - Resource = "arn:aws:kms:ca-central-1:687401027353:key/976bc5ab-8b78-4ee2-9b86-5fc56942233e"
                      - Sid      = ""
                    },
                ]
              - Version   = "2012-10-17"
            }
        ) -> (known after apply)
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)
    }

  # aws_iam_policy.cognito_lambda_logging will be updated in-place
  ~ resource "aws_iam_policy" "cognito_lambda_logging" {
        id          = "arn:aws:iam::687401027353:policy/cognito_lambda_logging"
        name        = "cognito_lambda_logging"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.cognito_lambda_secrets will be updated in-place
  ~ resource "aws_iam_policy" "cognito_lambda_secrets" {
        id          = "arn:aws:iam::687401027353:policy/cognito_lambda_secrets"
        name        = "cognito_lambda_secrets"
      ~ policy      = jsonencode(
          ~ {
              ~ Statement = [
                  ~ {
                      ~ Resource = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:cognito_notify_api_key-RFNlh9" -> "arn:aws:secretsmanager:ca-central-1:687401027353:secret:notify_api_key-eR3nNp"
                      - Sid      = ""
                        # (2 unchanged attributes hidden)
                    },
                ]
                # (1 unchanged attribute hidden)
            }
        )
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)
    }

  # aws_iam_policy.cognito_userpool_import_logging will be updated in-place
  ~ resource "aws_iam_policy" "cognito_userpool_import_logging" {
        id          = "arn:aws:iam::687401027353:policy/cognito_userpool_import_logging"
        name        = "cognito_userpool_import_logging"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_s3 will be created
  + resource "aws_iam_policy" "lambda_s3" {
      + arn         = (known after apply)
      + description = "IAM policy for storing files in S3"
      + id          = (known after apply)
      + name        = "lambda_s3"
      + name_prefix = (known after apply)
      + path        = "/"
      + policy      = jsonencode(
            {
              + Statement = [
                  + {
                      + Action   = [
                          + "s3:PutObject",
                          + "s3:ListBucket",
                          + "s3:GetObject",
                          + "s3:DeleteObject",
                        ]
                      + Effect   = "Allow"
                      + Resource = [
                          + "arn:aws:s3:::forms-staging-lambda-code/*",
                          + "arn:aws:s3:::forms-staging-lambda-code",
                        ]
                    },
                ]
              + Version   = "2012-10-17"
            }
        )
      + policy_id   = (known after apply)
      + tags_all    = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
    }

  # aws_iam_role.cognito_lambda will be updated in-place
  ~ resource "aws_iam_role" "cognito_lambda" {
        id                    = "iam_for_cognito_lambda"
        name                  = "iam_for_cognito_lambda"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_iam_role.cognito_userpool_import will be updated in-place
  ~ resource "aws_iam_role" "cognito_userpool_import" {
        id                    = "role_for_cognito_user_pool_import"
        name                  = "role_for_cognito_user_pool_import"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_kms_key.cognito_encryption will be updated in-place
  ~ resource "aws_kms_key" "cognito_encryption" {
        id                                 = "976bc5ab-8b78-4ee2-9b86-5fc56942233e"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)
    }

  # aws_lambda_function.cognito_email_sender will be updated in-place
  ~ resource "aws_lambda_function" "cognito_email_sender" {
      - filename                       = "/tmp/cognito_email_sender_main.zip" -> null
        id                             = "Cognito_Email_Sender"
      ~ last_modified                  = "2023-12-07T21:21:59.000+0000" -> (known after apply)
      ~ layers                         = [
          - "arn:aws:lambda:ca-central-1:687401027353:layer:cognito_email_sender_node_packages:15",
        ]
      + s3_bucket                      = "forms-staging-lambda-code"
      + s3_key                         = "cognito_email_sender_code"
      + s3_object_version              = (known after apply)
      ~ source_code_hash               = "Au9QF/JOavDRQ5VevDLPhwxxPe8omiNw08gEHhHx55Q=" -> "41nQbe/QQlIpDMWFvFyyYdw6y3b+Zg/PLBtYnf4qSbg="
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (18 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "NOTIFY_API_KEY" = (sensitive value)
                # (3 unchanged elements hidden)
            }
        }

        # (2 unchanged blocks hidden)
    }

  # aws_lambda_function.cognito_pre_sign_up will be updated in-place
  ~ resource "aws_lambda_function" "cognito_pre_sign_up" {
        id                             = "Cognito_Pre_Sign_Up"
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (22 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

  # aws_lambda_layer_version.cognito_email_sender_nodejs will be destroyed
  # (because aws_lambda_layer_version.cognito_email_sender_nodejs is not in configuration)
  - resource "aws_lambda_layer_version" "cognito_email_sender_nodejs" {
      - arn                      = "arn:aws:lambda:ca-central-1:687401027353:layer:cognito_email_sender_node_packages:15" -> null
      - compatible_architectures = [] -> null
      - compatible_runtimes      = [
          - "nodejs18.x",
        ] -> null
      - created_date             = "2023-12-07T21:21:58.576+0000" -> null
      - filename                 = "/tmp/cognito_email_sender_nodejs.zip" -> null
      - id                       = "arn:aws:lambda:ca-central-1:687401027353:layer:cognito_email_sender_node_packages:15" -> null
      - layer_arn                = "arn:aws:lambda:ca-central-1:687401027353:layer:cognito_email_sender_node_packages" -> null
      - layer_name               = "cognito_email_sender_node_packages" -> null
      - skip_destroy             = false -> null
      - source_code_hash         = "ds9qa4ZKrb4ykZpLYXSUy9muksxn2P5zC1R84FonZQE=" -> null
      - source_code_size         = 4952580 -> null
      - version                  = "15" -> null
    }

  # aws_s3_object.cognito_email_sender_code will be created
  + resource "aws_s3_object" "cognito_email_sender_code" {
      + acl                    = (known after apply)
      + bucket                 = "forms-staging-lambda-code"
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      + content_type           = (known after apply)
      + etag                   = (known after apply)
      + force_destroy          = false
      + id                     = (known after apply)
      + key                    = "cognito_email_sender_code"
      + kms_key_id             = (known after apply)
      + server_side_encryption = (known after apply)
      + source                 = "/tmp/cognito_email_sender.zip"
      + source_hash            = "41nQbe/QQlIpDMWFvFyyYdw6y3b+Zg/PLBtYnf4qSbg="
      + storage_class          = (known after apply)
      + tags_all               = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + version_id             = (known after apply)
    }

  # aws_secretsmanager_secret.cognito_notify_api_key will be destroyed
  # (because aws_secretsmanager_secret.cognito_notify_api_key is not in configuration)
  - resource "aws_secretsmanager_secret" "cognito_notify_api_key" {
      - arn                            = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:cognito_notify_api_key-RFNlh9" -> null
      - force_overwrite_replica_secret = false -> null
      - id                             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:cognito_notify_api_key-RFNlh9" -> null
      - name                           = "cognito_notify_api_key" -> null
      - recovery_window_in_days        = 0 -> null
      - tags                           = {
          - "CostCentre" = "forms-platform-staging"
          - "Terraform"  = "true"
        } -> null
      - tags_all                       = {
          - "CostCentre" = "forms-platform-staging"
          - "Terraform"  = "true"
        } -> null
    }

  # aws_secretsmanager_secret_version.cognito_notify_api_key will be destroyed
  # (because aws_secretsmanager_secret_version.cognito_notify_api_key is not in configuration)
  - resource "aws_secretsmanager_secret_version" "cognito_notify_api_key" {
      - arn            = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:cognito_notify_api_key-RFNlh9" -> null
      - id             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:cognito_notify_api_key-RFNlh9|23C81AA7-F8FF-49CC-9C61-7EE78C295BF3" -> null
      - secret_id      = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:cognito_notify_api_key-RFNlh9" -> null
      - secret_string  = (sensitive value) -> null
      - version_id     = "23C81AA7-F8FF-49CC-9C61-7EE78C295BF3" -> null
      - version_stages = [
          - "AWSCURRENT",
        ] -> null
    }

Plan: 2 to add, 12 to change, 3 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_policy.lambda_s3"]
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"]
WARN - plan.json - main - Missing Common Tags: ["aws_s3_object.cognito_email_sender_code"]

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

Copy link

Staging: network

✅   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, 38 to change, 1 to destroy
Show summary
CHANGE NAME
update aws_default_network_acl.forms
aws_default_security_group.default
aws_eip.forms_natgw[0]
aws_eip.forms_natgw[1]
aws_eip.forms_natgw[2]
aws_flow_log.vpc_flow_logs
aws_internet_gateway.forms
aws_nat_gateway.forms[0]
aws_nat_gateway.forms[1]
aws_nat_gateway.forms[2]
aws_route_table.forms_private_subnet[0]
aws_route_table.forms_private_subnet[1]
aws_route_table.forms_private_subnet[2]
aws_route_table.forms_public_subnet
aws_security_group.forms
aws_security_group.forms_database
aws_security_group.forms_egress
aws_security_group.forms_load_balancer
aws_security_group.forms_redis
aws_security_group.privatelink
aws_subnet.forms_private[0]
aws_subnet.forms_private[1]
aws_subnet.forms_private[2]
aws_subnet.forms_public[0]
aws_subnet.forms_public[1]
aws_subnet.forms_public[2]
aws_vpc.forms
aws_vpc_endpoint.dynamodb
aws_vpc_endpoint.ecr-api
aws_vpc_endpoint.ecr-dkr
aws_vpc_endpoint.kms
aws_vpc_endpoint.lambda
aws_vpc_endpoint.logs
aws_vpc_endpoint.monitoring
aws_vpc_endpoint.rds
aws_vpc_endpoint.s3
aws_vpc_endpoint.secretsmanager
aws_vpc_endpoint.sqs
delete aws_cloudwatch_log_group.vpc_flow_logs
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place
  - destroy
 <= read (data resources)

Terraform will perform the following actions:

  # data.aws_subnets.ecr_endpoint_available will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "aws_subnets" "ecr_endpoint_available" {
      + id   = (known after apply)
      + ids  = (known after apply)
      + tags = (known after apply)

      + filter {
          + name   = "availability-zone"
          + values = [
              + "ca-central-1a",
              + "ca-central-1b",
            ]
        }
      + filter {
          + name   = "tag:Access"
          + values = [
              + "private",
            ]
        }
      + filter {
          + name   = "vpc-id"
          + values = [
              + "vpc-0ad5b3739860129d0",
            ]
        }
    }

  # data.aws_subnets.lambda_endpoint_available will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "aws_subnets" "lambda_endpoint_available" {
      + id   = (known after apply)
      + ids  = (known after apply)
      + tags = (known after apply)

      + filter {
          + name   = "availability-zone"
          + values = [
              + "ca-central-1a",
              + "ca-central-1b",
            ]
        }
      + filter {
          + name   = "tag:Access"
          + values = [
              + "private",
            ]
        }
      + filter {
          + name   = "vpc-id"
          + values = [
              + "vpc-0ad5b3739860129d0",
            ]
        }
    }

  # aws_cloudwatch_log_group.vpc_flow_logs will be destroyed
  # (because aws_cloudwatch_log_group.vpc_flow_logs is not in configuration)
  - resource "aws_cloudwatch_log_group" "vpc_flow_logs" {
      - arn               = "arn:aws:logs:ca-central-1:687401027353:log-group:vpc_flow_logs" -> null
      - id                = "vpc_flow_logs" -> null
      - kms_key_id        = "arn:aws:kms:ca-central-1:687401027353:key/c5c2a1c2-c092-4fa1-8daf-3414f3511b1d" -> null
      - log_group_class   = "STANDARD" -> null
      - name              = "vpc_flow_logs" -> null
      - retention_in_days = 30 -> null
      - skip_destroy      = false -> null
      - tags              = {
          - "CostCentre" = "forms-platform-staging"
          - "Terraform"  = "true"
        } -> null
      - tags_all          = {
          - "CostCentre" = "forms-platform-staging"
          - "Terraform"  = "true"
        } -> null
    }

  # aws_default_network_acl.forms will be updated in-place
  ~ resource "aws_default_network_acl" "forms" {
        id                     = "acl-004451ef1c6e2e7b3"
      ~ tags                   = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

  # aws_default_security_group.default will be updated in-place
  ~ resource "aws_default_security_group" "default" {
        id                     = "sg-06ad51c0e76cddc4a"
        name                   = "default"
      ~ tags                   = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (8 unchanged attributes hidden)
    }

  # aws_eip.forms_natgw[0] will be updated in-place
  ~ resource "aws_eip" "forms_natgw" {
        id                   = "eipalloc-0ce0201971427c2e6"
      ~ tags                 = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "forms NAT GW 0"
          - "Terraform"  = "true" -> null
        }
        # (12 unchanged attributes hidden)
    }

  # aws_eip.forms_natgw[1] will be updated in-place
  ~ resource "aws_eip" "forms_natgw" {
        id                   = "eipalloc-0143a0c87b6433c89"
      ~ tags                 = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "forms NAT GW 1"
          - "Terraform"  = "true" -> null
        }
        # (12 unchanged attributes hidden)
    }

  # aws_eip.forms_natgw[2] will be updated in-place
  ~ resource "aws_eip" "forms_natgw" {
        id                   = "eipalloc-0e8b0be9185744553"
      ~ tags                 = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "forms NAT GW 2"
          - "Terraform"  = "true" -> null
        }
        # (12 unchanged attributes hidden)
    }

  # aws_flow_log.vpc_flow_logs will be updated in-place
  ~ resource "aws_flow_log" "vpc_flow_logs" {
        id                       = "fl-0f9a5d10bc36116b4"
      ~ tags                     = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (8 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_internet_gateway.forms will be updated in-place
  ~ resource "aws_internet_gateway" "forms" {
        id       = "igw-0aca6f076a25af86f"
      ~ tags     = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "forms"
          - "Terraform"  = "true" -> null
        }
        # (4 unchanged attributes hidden)
    }

  # aws_nat_gateway.forms[0] will be updated in-place
  ~ resource "aws_nat_gateway" "forms" {
        id                                 = "nat-0bc32e0a102af6307"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "forms NAT GW"
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)
    }

  # aws_nat_gateway.forms[1] will be updated in-place
  ~ resource "aws_nat_gateway" "forms" {
        id                                 = "nat-0e15bed048be78449"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "forms NAT GW"
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)
    }

  # aws_nat_gateway.forms[2] will be updated in-place
  ~ resource "aws_nat_gateway" "forms" {
        id                                 = "nat-0baf8923e7bdf4142"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "forms NAT GW"
          - "Terraform"  = "true" -> null
        }
        # (11 unchanged attributes hidden)
    }

  # aws_route_table.forms_private_subnet[0] will be updated in-place
  ~ resource "aws_route_table" "forms_private_subnet" {
        id               = "rtb-0d0dcc10e0337defc"
      ~ tags             = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Private Subnet Route Table 0"
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_route_table.forms_private_subnet[1] will be updated in-place
  ~ resource "aws_route_table" "forms_private_subnet" {
        id               = "rtb-01369399800d358a6"
      ~ tags             = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Private Subnet Route Table 1"
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_route_table.forms_private_subnet[2] will be updated in-place
  ~ resource "aws_route_table" "forms_private_subnet" {
        id               = "rtb-04b278f0a8c5085e2"
      ~ tags             = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Private Subnet Route Table 2"
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_route_table.forms_public_subnet will be updated in-place
  ~ resource "aws_route_table" "forms_public_subnet" {
        id               = "rtb-03b4c5e3b272ae847"
      ~ tags             = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Public Subnet Route Table"
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_security_group.forms will be updated in-place
  ~ resource "aws_security_group" "forms" {
        id                     = "sg-0328cae235e1dce04"
        name                   = "forms"
      ~ tags                   = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (8 unchanged attributes hidden)
    }

  # aws_security_group.forms_database will be updated in-place
  ~ resource "aws_security_group" "forms_database" {
        id                     = "sg-0b80bb714d886b8ff"
        name                   = "forms-database"
      ~ tags                   = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (8 unchanged attributes hidden)
    }

  # aws_security_group.forms_egress will be updated in-place
  ~ resource "aws_security_group" "forms_egress" {
        id                     = "sg-06faff681ed323d48"
        name                   = "egress-anywhere"
      ~ tags                   = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (8 unchanged attributes hidden)
    }

  # aws_security_group.forms_load_balancer will be updated in-place
  ~ resource "aws_security_group" "forms_load_balancer" {
        id                     = "sg-0c736123950cab80f"
        name                   = "forms-load-balancer"
      ~ tags                   = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (8 unchanged attributes hidden)
    }

  # aws_security_group.forms_redis will be updated in-place
  ~ resource "aws_security_group" "forms_redis" {
        id                     = "sg-092fddfbbac0e15aa"
        name                   = "forms-redis"
      ~ tags                   = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (8 unchanged attributes hidden)
    }

  # aws_security_group.privatelink will be updated in-place
  ~ resource "aws_security_group" "privatelink" {
        id                     = "sg-089a83b7d81dff031"
        name                   = "privatelink"
      ~ tags                   = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (8 unchanged attributes hidden)
    }

  # aws_subnet.forms_private[0] will be updated in-place
  ~ resource "aws_subnet" "forms_private" {
        id                                             = "subnet-0af8e6e3cf80f582d"
      ~ tags                                           = {
            "Access"     = "private"
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Private Subnet 01"
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)
    }

  # aws_subnet.forms_private[1] will be updated in-place
  ~ resource "aws_subnet" "forms_private" {
        id                                             = "subnet-07f9debd31e48ce64"
      ~ tags                                           = {
            "Access"     = "private"
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Private Subnet 02"
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)
    }

  # aws_subnet.forms_private[2] will be updated in-place
  ~ resource "aws_subnet" "forms_private" {
        id                                             = "subnet-07e38df0760d389d1"
      ~ tags                                           = {
            "Access"     = "private"
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Private Subnet 03"
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)
    }

  # aws_subnet.forms_public[0] will be updated in-place
  ~ resource "aws_subnet" "forms_public" {
        id                                             = "subnet-04d5fe34c570252ad"
      ~ tags                                           = {
            "Access"     = "public"
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Public Subnet 01"
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)
    }

  # aws_subnet.forms_public[1] will be updated in-place
  ~ resource "aws_subnet" "forms_public" {
        id                                             = "subnet-02f5e1518cb9b8687"
      ~ tags                                           = {
            "Access"     = "public"
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Public Subnet 02"
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)
    }

  # aws_subnet.forms_public[2] will be updated in-place
  ~ resource "aws_subnet" "forms_public" {
        id                                             = "subnet-0db171c9d80cdcc04"
      ~ tags                                           = {
            "Access"     = "public"
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "Public Subnet 03"
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)
    }

  # aws_vpc.forms will be updated in-place
  ~ resource "aws_vpc" "forms" {
        id                                   = "vpc-0ad5b3739860129d0"
      ~ tags                                 = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "forms"
          - "Terraform"  = "true" -> null
        }
        # (15 unchanged attributes hidden)
    }

  # aws_vpc_endpoint.dynamodb will be updated in-place
  ~ resource "aws_vpc_endpoint" "dynamodb" {
        id                    = "vpce-0e90d00c8982f3214"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)
    }

  # aws_vpc_endpoint.ecr-api will be updated in-place
  ~ resource "aws_vpc_endpoint" "ecr-api" {
        id                    = "vpce-0f8b77a6125301728"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_vpc_endpoint.ecr-dkr will be updated in-place
  ~ resource "aws_vpc_endpoint" "ecr-dkr" {
        id                    = "vpce-0fbeebefef817d1a0"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_vpc_endpoint.kms will be updated in-place
  ~ resource "aws_vpc_endpoint" "kms" {
        id                    = "vpce-0a56c61b83367ea1b"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_vpc_endpoint.lambda will be updated in-place
  ~ resource "aws_vpc_endpoint" "lambda" {
        id                    = "vpce-0212293ce2297685e"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_vpc_endpoint.logs will be updated in-place
  ~ resource "aws_vpc_endpoint" "logs" {
        id                    = "vpce-0fa2ded3f95d2f4f3"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_vpc_endpoint.monitoring will be updated in-place
  ~ resource "aws_vpc_endpoint" "monitoring" {
        id                    = "vpce-094a12a5fda8108b7"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_vpc_endpoint.rds will be updated in-place
  ~ resource "aws_vpc_endpoint" "rds" {
        id                    = "vpce-088d1dcbaa25a6ae9"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_vpc_endpoint.s3 will be updated in-place
  ~ resource "aws_vpc_endpoint" "s3" {
        id                    = "vpce-09c5d010a62ee38bc"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)
    }

  # aws_vpc_endpoint.secretsmanager will be updated in-place
  ~ resource "aws_vpc_endpoint" "secretsmanager" {
        id                    = "vpce-0c55ab19810ed3c1b"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_vpc_endpoint.sqs will be updated in-place
  ~ resource "aws_vpc_endpoint" "sqs" {
        id                    = "vpce-087b7c5387d508856"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (17 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

Plan: 0 to add, 38 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_default_network_acl.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_default_security_group.default"]
WARN - plan.json - main - Missing Common Tags: ["aws_eip.forms_natgw[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_eip.forms_natgw[1]"]
WARN - plan.json - main - Missing Common Tags: ["aws_eip.forms_natgw[2]"]
WARN - plan.json - main - Missing Common Tags: ["aws_flow_log.vpc_flow_logs"]
WARN - plan.json - main - Missing Common Tags: ["aws_internet_gateway.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_nat_gateway.forms[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_nat_gateway.forms[1]"]
WARN - plan.json - main - Missing Common Tags: ["aws_nat_gateway.forms[2]"]
WARN - plan.json - main - Missing Common Tags: ["aws_route_table.forms_private_subnet[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_route_table.forms_private_subnet[1]"]
WARN - plan.json - main - Missing Common Tags: ["aws_route_table.forms_private_subnet[2]"]
WARN - plan.json - main - Missing Common Tags: ["aws_route_table.forms_public_subnet"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms_database"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms_egress"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms_load_balancer"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms_redis"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.privatelink"]
WARN - plan.json - main - Missing Common Tags: ["aws_subnet.forms_private[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_subnet.forms_private[1]"]
WARN - plan.json - main - Missing Common Tags: ["aws_subnet.forms_private[2]"]
WARN - plan.json - main - Missing Common Tags: ["aws_subnet.forms_public[0]"]
WARN - plan.json - main - Missing Common Tags:...

Copy link

Staging: dynamodb

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

Plan: 0 to add, 3 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_dynamodb_table.audit_logs
aws_dynamodb_table.reliability_queue
aws_dynamodb_table.vault
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_dynamodb_table.audit_logs will be updated in-place
  ~ resource "aws_dynamodb_table" "audit_logs" {
        id                          = "AuditLogs"
        name                        = "AuditLogs"
      ~ tags                        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (13 unchanged attributes hidden)

        # (7 unchanged blocks hidden)
    }

  # aws_dynamodb_table.reliability_queue will be updated in-place
  ~ resource "aws_dynamodb_table" "reliability_queue" {
        id                          = "ReliabilityQueue"
        name                        = "ReliabilityQueue"
      ~ tags                        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

  # aws_dynamodb_table.vault will be updated in-place
  ~ resource "aws_dynamodb_table" "vault" {
        id                          = "Vault"
        name                        = "Vault"
      ~ tags                        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (13 unchanged attributes hidden)

        # (11 unchanged blocks hidden)
    }

Plan: 0 to add, 3 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_dynamodb_table.audit_logs"]
WARN - plan.json - main - Missing Common Tags: ["aws_dynamodb_table.reliability_queue"]
WARN - plan.json - main - Missing Common Tags: ["aws_dynamodb_table.vault"]

22 tests, 19 passed, 3 warnings, 0 failures, 0 exceptions

Copy link

Staging: load_balancer

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

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

Plan: 12 to add, 18 to change, 13 to destroy
Show summary
CHANGE NAME
add aws_s3_bucket_ownership_controls.maintenance_mode
aws_s3_object.maintenance_static_page_css_files[&quot;style.css&quot;]
aws_s3_object.maintenance_static_page_html_files[&quot;index-fr.html&quot;]
aws_s3_object.maintenance_static_page_html_files[&quot;index.html&quot;]
aws_s3_object.maintenance_static_page_ico_files[&quot;favicon.ico&quot;]
aws_s3_object.maintenance_static_page_svg_files[&quot;site-unavailable.svg&quot;]
delete aws_s3_bucket.firehose_waf_logs
aws_s3_bucket_object.maintenance_static_page_css_files[&quot;style.css&quot;]
aws_s3_bucket_object.maintenance_static_page_html_files[&quot;index-fr.html&quot;]
aws_s3_bucket_object.maintenance_static_page_html_files[&quot;index.html&quot;]
aws_s3_bucket_object.maintenance_static_page_ico_files[&quot;favicon.ico&quot;]
aws_s3_bucket_object.maintenance_static_page_svg_files[&quot;site-unavailable.svg&quot;]
aws_s3_bucket_public_access_block.firehose_waf_logs
update aws_acm_certificate.form_viewer
aws_acm_certificate.form_viewer_maintenance_mode
aws_cloudfront_distribution.maintenance_mode
aws_iam_role.firehose_waf_logs
aws_kinesis_firehose_delivery_stream.firehose_waf_logs
aws_lb.form_viewer
aws_lb_listener.form_viewer_http
aws_lb_listener.form_viewer_https
aws_lb_target_group.form_viewer_1
aws_lb_target_group.form_viewer_2
aws_shield_protection.alb
aws_shield_protection.route53_hosted_zone[0]
aws_wafv2_regex_pattern_set.cognito_login_paths
aws_wafv2_regex_pattern_set.forms_base_url
aws_wafv2_regex_pattern_set.valid_app_uri_paths
aws_wafv2_regex_pattern_set.valid_maintenance_mode_uri_paths
aws_wafv2_web_acl.forms_acl
aws_wafv2_web_acl.forms_maintenance_mode_acl
recreate aws_s3_bucket.maintenance_mode
aws_s3_bucket_acl.maintenance_mode
aws_s3_bucket_policy.allow_cloudfront_to_access_static_website_in_s3
aws_s3_bucket_public_access_block.maintenance_mode
aws_s3_bucket_server_side_encryption_configuration.maintenance_mode
aws_s3_bucket_website_configuration.maintenance_mode

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

Show plan
Resource actions are indicated with the following symbols:
  + create
  ~ update in-place
  - destroy
-/+ destroy and then create replacement
 <= read (data resources)

Terraform will perform the following actions:

  # data.aws_iam_policy_document.allow_cloudfront_to_access_static_website_in_s3 will be read during apply
  # (config refers to values not yet known)
 <= data "aws_iam_policy_document" "allow_cloudfront_to_access_static_website_in_s3" {
      + id   = (known after apply)
      + json = (known after apply)

      + statement {
          + actions   = [
              + "s3:GetObject",
            ]
          + effect    = "Allow"
          + resources = [
              + (known after apply),
            ]

          + principals {
              + identifiers = [
                  + "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E2PGE1KRH6OS33",
                ]
              + type        = "AWS"
            }
        }
    }

  # aws_acm_certificate.form_viewer will be updated in-place
  ~ resource "aws_acm_certificate" "form_viewer" {
        id                        = "arn:aws:acm:ca-central-1:687401027353:certificate/e0d9fd55-738a-4ab6-bfda-1ecacec99b06"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (15 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_acm_certificate.form_viewer_maintenance_mode will be updated in-place
  ~ resource "aws_acm_certificate" "form_viewer_maintenance_mode" {
        id                        = "arn:aws:acm:us-east-1:687401027353:certificate/477e3f0d-675e-4c4b-822e-866d482d4928"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (15 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_cloudfront_distribution.maintenance_mode will be updated in-place
  ~ resource "aws_cloudfront_distribution" "maintenance_mode" {
        id                             = "E2NX6QAIR13JTM"
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (21 unchanged attributes hidden)

      - origin {
          - connection_attempts = 3 -> null
          - connection_timeout  = 10 -> null
          - domain_name         = "gc-forms-application-maintenance-page.s3.ca-central-1.amazonaws.com" -> null
          - origin_id           = "MaintenanceMode" -> null

          - s3_origin_config {
              - origin_access_identity = "origin-access-identity/cloudfront/E2PGE1KRH6OS33" -> null
            }
        }
      + origin {
          + connection_attempts = 3
          + connection_timeout  = 10
          + domain_name         = (known after apply)
          + origin_id           = "MaintenanceMode"

          + s3_origin_config {
              + origin_access_identity = "origin-access-identity/cloudfront/E2PGE1KRH6OS33"
            }
        }

        # (3 unchanged blocks hidden)
    }

  # aws_iam_role.firehose_waf_logs will be updated in-place
  ~ resource "aws_iam_role" "firehose_waf_logs" {
        id                    = "firehose_waf_logs"
        name                  = "firehose_waf_logs"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_kinesis_firehose_delivery_stream.firehose_waf_logs will be updated in-place
  ~ resource "aws_kinesis_firehose_delivery_stream" "firehose_waf_logs" {
        id             = "arn:aws:firehose:ca-central-1:687401027353:deliverystream/aws-waf-logs-forms"
        name           = "aws-waf-logs-forms"
      ~ tags           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

  # aws_lb.form_viewer will be updated in-place
  ~ resource "aws_lb" "form_viewer" {
        id                                          = "arn:aws:elasticloadbalancing:ca-central-1:687401027353:loadbalancer/app/form-viewer/5e6bc2d9ab810b68"
        name                                        = "form-viewer"
      ~ tags                                        = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "form_viewer"
          - "Terraform"  = "true" -> null
        }
        # (22 unchanged attributes hidden)

        # (5 unchanged blocks hidden)
    }

  # aws_lb_listener.form_viewer_http will be updated in-place
  ~ resource "aws_lb_listener" "form_viewer_http" {
        id                = "arn:aws:elasticloadbalancing:ca-central-1:687401027353:listener/app/form-viewer/5e6bc2d9ab810b68/d6a2d118e3e0e216"
      ~ tags              = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_lb_listener.form_viewer_https will be updated in-place
  ~ resource "aws_lb_listener" "form_viewer_https" {
        id                = "arn:aws:elasticloadbalancing:ca-central-1:687401027353:listener/app/form-viewer/5e6bc2d9ab810b68/028e8eeeed9c3a34"
      ~ tags              = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (7 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

  # 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:687401027353:targetgroup/form-viewer/decb39cad732d3d4"
        name                               = "form-viewer"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "form_viewer_1"
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)

        # (4 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:687401027353:targetgroup/form-viewer-2/9cd62fabd5d34460"
        name                               = "form-viewer-2"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "form_viewer_2"
          - "Terraform"  = "true" -> null
        }
        # (16 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

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

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

      - lifecycle_rule {
          - abort_incomplete_multipart_upload_days = 0 -> null
          - enabled                                = true -> null
          - id                                     = "tf-s3-lifecycle-20211112190024126200000001" -> null
          - tags                                   = {} -> null

          - expiration {
              - days                         = 90 -> null
              - expired_object_delete_marker = false -> null
            }
        }

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

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

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

  # aws_s3_bucket.maintenance_mode must be replaced
-/+ resource "aws_s3_bucket" "maintenance_mode" {
      + acceleration_status         = (known after apply)
      ~ acl                         = "private" -> (known after apply)
      ~ arn                         = "arn:aws:s3:::gc-forms-application-maintenance-page" -> (known after apply)
      ~ bucket                      = "gc-forms-application-maintenance-page" -> "gc-forms-staging-application-maintenance-page" # forces replacement
      ~ bucket_domain_name          = "gc-forms-application-maintenance-page.s3.amazonaws.com" -> (known after apply)
      + bucket_prefix               = (known after apply)
      ~ bucket_regional_domain_name = "gc-forms-application-maintenance-page.s3.ca-central-1.amazonaws.com" -> (known after apply)
      ~ hosted_zone_id              = "Z1QDHH18159H29" -> (known after apply)
      ~ id                          = "gc-forms-application-maintenance-page" -> (known after apply)
      ~ object_lock_enabled         = false -> (known after apply)
      ~ policy                      = jsonencode(
            {
              - Statement = [
                  - {
                      - Action    = "s3:GetObject"
                      - Effect    = "Allow"
                      - Principal = {
                          - AWS = "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E2PGE1KRH6OS33"
                        }
                      - Resource  = "arn:aws:s3:::gc-forms-application-maintenance-page/*"
                      - Sid       = ""
                    },
                ]
              - Version   = "2012-10-17"
            }
        ) -> (known after apply)
      ~ region                      = "ca-central-1" -> (known after apply)
      ~ request_payer               = "BucketOwner" -> (known after apply)
      - tags                        = {
          - "CostCentre" = "forms-platform-staging"
          - "Terraform"  = "true"
        } -> null
      ~ website_domain              = "s3-website.ca-central-1.amazonaws.com" -> (known after apply)
      ~ website_endpoint            = "gc-forms-application-maintenance-page.s3-website.ca-central-1.amazonaws.com" -> (known after apply)
        # (2 unchanged attributes hidden)

      - grant {
          - id          = "8ee828b5522b38b6797b8f886ed0b30f039d4eaa7ea331fa60669a6e0352d7e5" -> 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    = false -> null
          - mfa_delete = false -> null
        }

      - website {
          - index_document = "index.html" -> null
        }
    }

  # aws_s3_bucket_acl.maintenance_mode must be replaced
-/+ resource "aws_s3_bucket_acl" "maintenance_mode" {
      ~ bucket = "gc-forms-application-maintenance-page" # forces replacement -> (known after apply) # forces replacement
      ~ id     = "gc-forms-application-maintenance-page,private" -> (known after apply)
        # (1 unchanged attribute hidden)

      - access_control_policy {
          - grant {
              - permission = "FULL_CONTROL" -> null

              - grantee {
                  - id   = "8ee828b5522b38b6797b8f886ed0b30f039d4eaa7ea331fa60669a6e0352d7e5" -> null
                  - type = "CanonicalUser" -> null
                }
            }
          - owner {
              - id = "8ee828b5522b38b6797b8f886ed0b30f039d4eaa7ea331fa60669a6e0352d7e5" -> null
            }
        }
    }

  # aws_s3_bucket_object.maintenance_static_page_css_files["style.css"] will be destroyed
  # (because aws_s3_bucket_object.maintenance_static_page_css_files is not in configuration)
  - resource "aws_s3_bucket_object" "maintenance_static_page_css_files" {
      - acl                    = "private" -> null
      - bucket                 = "gc-forms-application-maintenance-page" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "text/css" -> null
      - etag                   = "92fa1c75f720e83330756f94b06aa8bf" -> null
      - force_destroy          = false -> null
      - id                     = "style.css" -> null
      - key                    = "style.css" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "./static_website/style.css" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
    }

  # aws_s3_bucket_object.maintenance_static_page_html_files["index-fr.html"] will be destroyed
  # (because aws_s3_bucket_object.maintenance_static_page_html_files is not in configuration)
  - resource "aws_s3_bucket_object" "maintenance_static_page_html_files" {
      - acl                    = "private" -> null
      - bucket                 = "gc-forms-application-maintenance-page" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "text/html" -> null
      - etag                   = "5c195ef016b9e898437a543aba2301ac" -> null
      - force_destroy          = false -> null
      - id                     = "index-fr.html" -> null
      - key                    = "index-fr.html" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "./static_website/index-fr.html" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
    }

  # aws_s3_bucket_object.maintenance_static_page_html_files["index.html"] will be destroyed
  # (because aws_s3_bucket_object.maintenance_static_page_html_files is not in configuration)
  - resource "aws_s3_bucket_object" "maintenance_static_page_html_files" {
      - acl                    = "private" -> null
      - bucket                 = "gc-forms-application-maintenance-page" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "text/html" -> null
      - etag                   = "f15e6aa2fd75c9b6b97d93d2b1fedfbd" -> null
      - force_destroy          = false -> null
      - id                     = "index.html" -> null
      - key                    = "index.html" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "./static_website/index.html" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
    }

  # aws_s3_bucket_object.maintenance_static_page_ico_files["favicon.ico"] will be destroyed
  # (because aws_s3_bucket_object.maintenance_static_page_ico_files is not in configuration)
  - resource "aws_s3_bucket_object" "maintenance_static_page_ico_files" {
      - acl                    = "private" -> null
      - bucket                 = "gc-forms-application-maintenance-page" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "image/png" -> null
      - etag                   = "58bd7822fbbd5642104beae2b25a1b5b" -> null
      - force_destroy          = false -> null
      - id                     = "favicon.ico" -> null
      - key                    = "favicon.ico" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "./static_website/favicon.ico" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
    }

  # aws_s3_bucket_object.maintenance_static_page_svg_files["site-unavailable.svg"] will be destroyed
  # (because aws_s3_bucket_object.maintenance_static_page_svg_files is not in configuration)
  - resource "aws_s3_bucket_object" "maintenance_static_page_svg_files" {
      - acl                    = "private" -> null
      - bucket                 = "gc-forms-application-maintenance-page" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "image/svg+xml" -> null
      - etag                   = "1d263a8e324e88ea09c9b630de277c45" -> null
      - force_destroy          = false -> null
      - id                     = "site-unavailable.svg" -> null
      - key                    = "site-unavailable.svg" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "./static_website/site-unavailable.svg" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
    }

  # aws_s3_bucket_ownership_controls.maintenance_mode will be created
  + resource "aws_s3_bucket_ownership_controls" "maintenance_mode" {
      + bucket = (known after apply)
      + id     = (known after apply)

      + rule {
          + object_ownership = "BucketOwnerEnforced"
        }
    }

  # aws_s3_bucket_policy.allow_cloudfront_to_access_static_website_in_s3 must be replaced
-/+ resource "aws_s3_bucket_policy" "allow_cloudfront_to_access_static_website_in_s3" {
      ~ bucket = "gc-forms-application-maintenance-page" # forces replacement -> (known after apply) # forces replacement
      ~ id     = "gc-forms-application-maintenance-page" -> (known after apply)
      ~ policy = jsonencode(
            {
              - Statement = [
                  - {
                      - Action    = "s3:GetObject"
                      - Effect    = "Allow"
                      - Principal = {
                          - AWS = "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E2PGE1KRH6OS33"
                        }
                      - Resource  = "arn:aws:s3:::gc-forms-application-maintenance-page/*"
                      - Sid       = ""
                    },
                ]
              - Version   = "2012-10-17"
            }
        ) -> (known after apply)
    }

  # aws_s3_bucket_public_access_block.firehose_waf_logs will be destroyed
  # (because aws_s3_bucket_public_access_block.firehose_waf_logs is not in configuration)
  - resource "aws_s3_bucket_public_access_block" "firehose_waf_logs" {
      - block_public_acls       = true -> null
      - block_public_policy     = true -> null
      - bucket                  = "forms-staging-terraform-waf-logs" -> null
      - id                      = "forms-staging-terraform-waf-logs" -> null
      - ignore_public_acls      = true -> null
      - restrict_public_buckets = true -> null
    }

  # aws_s3_bucket_public_access_block.maintenance_mode must be replaced
-/+ resource "aws_s3_bucket_public_access_block" "maintenance_mode" {
      ~ bucket                  = "gc-forms-application-maintenance-page" # forces replacement -> (known after apply) # forces replacement
      ~ id                      = "gc-forms-application-maintenance-page" -> (known after apply)
        # (4 unchanged attributes hidden)
    }

  # aws_s3_bucket_server_side_encryption_configuration.maintenance_mode must be replaced
-/+ resource "aws_s3_bucket_server_side_encryption_configuration" "maintenance_mode" {
      ~ bucket = "gc-forms-application-maintenance-page" # forces replacement -> (known after apply) # forces replacement
      ~ id     = "gc-forms-application-maintenance-page" -> (known after apply)

      - rule {
          - bucket_key_enabled = false -> null

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

  # aws_s3_bucket_website_configuration.maintenance_mode must be replaced
-/+ resource "aws_s3_bucket_website_configuration" "maintenance_mode" {
      ~ bucket           = "gc-forms-application-maintenance-page" # forces replacement -> (known after apply) # forces replacement
      ~ id               = "gc-forms-application-maintenance-page" -> (known after apply)
      + routing_rules    = (known after apply)
      ~ website_domain   = "s3-website.ca-central-1.amazonaws.com" -> (known after apply)
      ~ website_endpoint = "gc-forms-application-maintenance-page.s3-website.ca-central-1.amazonaws.com" -> (known after apply)

        # (1 unchanged block hidden)
    }

  # aws_s3_object.maintenance_static_page_css_files["style.css"] will be created
  + resource "aws_s3_object" "maintenance_static_page_css_files" {
      + acl                    = (known after apply)
      + bucket                 = (known after apply)
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      + content_type           = "text/css"
      + etag                   = "92fa1c75f720e83330756f94b06aa8bf"
      + force_destroy          = false
      + id                     = (known after apply)
      + key                    = "style.css"
      + kms_key_id             = (known after apply)
      + server_side_encryption = (known after apply)
      + source                 = "./static_website/style.css"
      + storage_class          = (known after apply)
      + tags_all               = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + version_id             = (known after apply)
    }

  # aws_s3_object.maintenance_static_page_html_files["index-fr.html"] will be created
  + resource "aws_s3_object" "maintenance_static_page_html_files" {
      + acl                    = (known after apply)
      + bucket                 = (known after apply)
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      + content_type           = "text/html"
      + etag                   = "5c195ef016b9e898437a543aba2301ac"
      + force_destroy          = false
      + id                     = (known after apply)
      + key                    = "index-fr.html"
      + kms_key_id             = (known after apply)
      + server_side_encryption = (known after apply)
      + source                 = "./static_website/index-fr.html"
      + storage_class          = (known after apply)
      + tags_all               = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + version_id             = (known after apply)
    }

  # aws_s3_object.maintenance_static_page_html_files["index.html"] will be created
  + resource "aws_s3_object" "maintenance_static_page_html_files" {
      + acl                    = (known after apply)
      + bucket                 = (known after apply)
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      + content_type           = "text/html"
      + etag                   = "f15e6aa2fd75c9b6b97d93d2b1fedfbd"
      + force_destroy          = false
      + id                     = (known after apply)
      + key                    = "index.html"
      + kms_key_id             = (known after apply)
      + server_side_encryption = (known after apply)
      + source                 = "./static_website/index.html"
      + storage_class          = (known after apply)
      + tags_all               = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + version_id             = (known after apply)
    }

  # aws_s3_object.maintenance_static_page_ico_files["favicon.ico"] will be created
  + resource "aws_s3_object" "maintenance_static_page_ico_files" {
      + acl                    = (known after apply)
      + bucket                 = (known after apply)
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      + content_type           = "image/png"
      + etag                   = "58bd7822fbbd5642104beae2b25a1b5b"
      + force_destroy          = false
      + id                     = (known after apply)
      + key                    = "favicon.ico"
      + kms_key_id             = (known after apply)
      + server_side_encryption = (known after apply)
      + source                 = "./static_website/favicon.ico"
      + storage_class          = (known after apply)
      + tags_all               = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + version_id             = (known after apply)
    }

  # aws_s3_object.maintenance_static_page_svg_files["site-unavailable.svg"] will be created
  + resource "aws_s3_object" "maintenance_static_page_svg_files" {
      + acl                    = (known after apply)
      + bucket                 = (known after apply)
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      + content_type           = "image/svg+xml"
      + etag                   = "1d263a8e324e88ea09c9b630de277c45"
      + force_destroy          = false
      + id                     = (known after apply)
      + key                    = "site-unavailable.svg"
      + kms_key_id             = (known after apply)
      + server_side_encryption = (known after apply)
      + source                 = "./static_website/site-unavailable.svg"
      + storage_class          = (known after apply)
      + tags_all               = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + version_id             = (known after apply)
    }

  # aws_shield_protection.alb will be updated in-place
  ~ resource "aws_shield_protection" "alb" {
        id           = "0cca3ef1-8edc-4180-8740-febba699a5b2"
        name         = "LoadBalancer"
      ~ tags         = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (3 unchanged attributes hidden)
    }

  # aws_shield_protection.route53_hosted_zone[0] will be updated in-place
  ~ resource "aws_shield_protection" "route53_hosted_zone" {
        id           = "84aef9e9-74ea-4dfc-bc40-ff3f3ca3700c"
        name         = "Route53HostedZone"
      ~ tags         = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (3 unchanged attributes hidden)
    }

  # aws_wafv2_regex_pattern_set.cognito_login_paths will be updated in-place
  ~ resource "aws_wafv2_regex_pattern_set" "cognito_login_paths" {
        id          = "06fb5625-dab4-4133-ab2d-2e618dd01c47"
        name        = "cognito_login_paths"
        tags        = {}
      ~ tags_all    = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_wafv2_regex_pattern_set.forms_base_url will be updated in-place
  ~ resource "aws_wafv2_regex_pattern_set" "forms_base_url" {
        id          = "92da9411-8b49-4c9e-b80f-ac7ea482f3d1"
        name        = "forms_base_url"
        tags        = {}
      ~ tags_all    = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_wafv2_regex_pattern_set.valid_app_uri_paths will be updated in-place
  ~ resource "aws_wafv2_regex_pattern_set"...
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

Staging: redis

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

Plan: 0 to add, 2 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_elasticache_replication_group.redis
aws_elasticache_subnet_group.redis
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_elasticache_replication_group.redis will be updated in-place
  ~ resource "aws_elasticache_replication_group" "redis" {
        id                         = "gcforms-redis-rep-group"
      ~ tags                       = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (33 unchanged attributes hidden)
    }

  # aws_elasticache_subnet_group.redis will be updated in-place
  ~ resource "aws_elasticache_subnet_group" "redis" {
        id          = "redis-subnet-group"
        name        = "redis-subnet-group"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (4 unchanged attributes hidden)
    }

Plan: 0 to add, 2 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_elasticache_replication_group.redis"]
WARN - plan.json - main - Missing Common Tags: ["aws_elasticache_subnet_group.redis"]

21 tests, 19 passed, 2 warnings, 0 failures, 0 exceptions

Copy link

Staging: rds

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

Plan: 0 to add, 3 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_rds_cluster.forms
aws_secretsmanager_secret.database_secret
aws_secretsmanager_secret.database_url
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_rds_cluster.forms will be updated in-place
  ~ resource "aws_rds_cluster" "forms" {
      ~ copy_tags_to_snapshot               = false -> true
        id                                  = "forms-staging-db-cluster"
      ~ tags                                = {
          - "CostCentre" = "forms-platform-staging" -> null
            "Name"       = "forms-staging-db-cluster"
          - "Terraform"  = "true" -> null
        }
        # (39 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_secretsmanager_secret.database_secret will be updated in-place
  ~ resource "aws_secretsmanager_secret" "database_secret" {
      + force_overwrite_replica_secret = false
        id                             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:database-secret-vHJuTe"
        name                           = "database-secret"
        tags                           = {}
      ~ tags_all                       = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (2 unchanged attributes hidden)
    }

  # aws_secretsmanager_secret.database_url will be updated in-place
  ~ resource "aws_secretsmanager_secret" "database_url" {
      + force_overwrite_replica_secret = false
        id                             = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:server-database-url-0PSpE3"
        name                           = "server-database-url"
        tags                           = {}
      ~ tags_all                       = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (2 unchanged attributes hidden)
    }

Plan: 0 to add, 3 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_rds_cluster.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_secretsmanager_secret.database_secret"]
WARN - plan.json - main - Missing Common Tags: ["aws_secretsmanager_secret.database_url"]

22 tests, 19 passed, 3 warnings, 0 failures, 0 exceptions

Copy link

Staging: app

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

Plan: 1 to add, 14 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_ecs_task_definition.form_viewer
update aws_appautoscaling_target.forms[0]
aws_cloudwatch_log_group.forms
aws_codedeploy_app.app
aws_codedeploy_deployment_group.app
aws_ecs_cluster.forms
aws_ecs_service.form_viewer
aws_iam_policy.cognito
aws_iam_policy.forms_dynamodb
aws_iam_policy.forms_kms
aws_iam_policy.forms_s3
aws_iam_policy.forms_secrets_manager
aws_iam_policy.forms_sqs
aws_iam_role.codedeploy
aws_iam_role.forms
Show plan
Resource actions are indicated with the following symbols:
  + create
  ~ update in-place
 <= read (data resources)

Terraform will perform the following actions:

  # data.template_file.form_viewer_task will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "template_file" "form_viewer_task" {
      + id       = (known after apply)
      + rendered = (known after apply)
      + template = jsonencode(
            [
              + {
                  + environment      = [
                      + {
                          + name  = "METRIC_PROVIDER"
                          + value = "${metric_provider}"
                        },
                      + {
                          + name  = "TRACER_PROVIDER"
                          + value = "${tracer_provider}"
                        },
                      + {
                          + name  = "NEXTAUTH_URL"
                          + value = "${nextauth_url}"
                        },
                      + {
                          + name  = "REDIS_URL"
                          + value = "${redis_url}"
                        },
                      + {
                          + name  = "RELIABILITY_FILE_STORAGE"
                          + value = "${reliability_file_storage}"
                        },
                      + {
                          + name  = "RECAPTCHA_V3_SITE_KEY"
                          + value = "${recaptcha_public}"
                        },
                      + {
                          + name  = "TEMPORARY_TOKEN_TEMPLATE_ID"
                          + value = "${gc_temp_token_template_id}"
                        },
                      + {
                          + name  = "TEMPLATE_ID"
                          + value = "${gc_template_id}"
                        },
                      + {
                          + name  = "VAULT_FILE_STORAGE"
                          + value = "${vault_file_storage}"
                        },
                      + {
                          + name  = "COGNITO_ENDPOINT_URL"
                          + value = "${cognito_endpoint_url}"
                        },
                      + {
                          + name  = "COGNITO_CLIENT_ID"
                          + value = "${cognito_client_id}"
                        },
                      + {
                          + name  = "EMAIL_ADDRESS_CONTACT_US"
                          + value = "${email_address_contact_us}"
                        },
                      + {
                          + name  = "EMAIL_ADDRESS_SUPPORT"
                          + value = "${email_address_support}"
                        },
                      + {
                          + name  = "REPROCESS_SUBMISSION_QUEUE_URL"
                          + value = "${reprocess_submission_queue}"
                        },
                      + {
                          + name  = "AUDIT_LOG_QUEUE_URL"
                          + value = "${audit_log_queue_url}"
                        },
                    ]
                  + image            = "${image}"
                  + linuxParameters  = {
                      + capabilities = {
                          + drop = [
                              + "ALL",
                            ]
                        }
                    }
                  + logConfiguration = {
                      + logDriver = "awslogs"
                      + options   = {
                          + awslogs-group         = "${awslogs-group}"
                          + awslogs-region        = "${awslogs-region}"
                          + awslogs-stream-prefix = "${awslogs-stream-prefix}"
                        }
                    }
                  + name             = "form_viewer"
                  + portMappings     = [
                      + {
                          + containerPort = 3000
                        },
                    ]
                  + secrets          = [
                      + {
                          + name      = "NOTIFY_API_KEY"
                          + valueFrom = "${notify_api_key}"
                        },
                      + {
                          + name      = "RECAPTCHA_V3_SECRET_KEY"
                          + valueFrom = "${recaptcha_secret}"
                        },
                      + {
                          + name      = "DATABASE_URL"
                          + valueFrom = "${database_url}"
                        },
                      + {
                          + name      = "TOKEN_SECRET"
                          + valueFrom = "${token_secret}"
                        },
                      + {
                          + name      = "GC_NOTIFY_CALLBACK_BEARER_TOKEN"
                          + valueFrom = "${gc_notify_callback_bearer_token}"
                        },
                      + {
                          + name      = "FRESHDESK_API_KEY"
                          + valueFrom = "${freshdesk_api_key}"
                        },
                    ]
                },
            ]
        )
      + vars     = {
          + "audit_log_queue_url"             = "https://sqs.ca-central-1.amazonaws.com/687401027353/audit_log_queue"
          + "awslogs-group"                   = "Forms"
          + "awslogs-region"                  = "ca-central-1"
          + "awslogs-stream-prefix"           = "ecs-form-viewer"
          + "cognito_client_id"               = "17bsg3b2b7q5snon007rru264u"
          + "cognito_endpoint_url"            = "cognito-idp.ca-central-1.amazonaws.com/ca-central-1_Cguq9JNQ1"
          + "database_url"                    = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:server-database-url-0PSpE3"
          + "email_address_contact_us"        = "assistance+forms-formulaires@cds-snc.ca"
          + "email_address_support"           = "assistance+forms-formulaires@cds-snc.ca"
          + "freshdesk_api_key"               = (sensitive value)
          + "gc_notify_callback_bearer_token" = (sensitive value)
          + "gc_temp_token_template_id"       = "b6885d06-d10a-422a-973f-05e274d9aa86"
          + "gc_template_id"                  = "8d597a1b-a1d6-4e3c-8421-042a2b4158b7"
          + "image"                           = "687401027353.dkr.ecr.ca-central-1.amazonaws.com/form_viewer_staging"
          + "metric_provider"                 = "stdout"
          + "nextauth_url"                    = "https://forms-staging.cdssandbox.xyz"
          + "notify_api_key"                  = (sensitive value)
          + "recaptcha_public"                = "6LfJDN4eAAAAAGvdRF7ZnQ7ciqdo1RQnQDFmh0VY"
          + "recaptcha_secret"                = (sensitive value)
          + "redis_url"                       = "gcforms-redis-rep-group.uwpetx.ng.0001.cac1.cache.amazonaws.com"
          + "reliability_file_storage"        = "forms-staging-reliability-file-storage"
          + "reprocess_submission_queue"      = "https://sqs.ca-central-1.amazonaws.com/687401027353/reprocess_submission_queue.fifo"
          + "token_secret"                    = (sensitive value)
          + "tracer_provider"                 = "stdout"
          + "vault_file_storage"              = "forms-staging-vault-file-storage"
        }
    }

  # aws_appautoscaling_target.forms[0] will be updated in-place
  ~ resource "aws_appautoscaling_target" "forms" {
        id                 = "service/arn:aws:ecs:ca-central-1:687401027353:cluster/Forms/form-viewer"
        tags               = {}
      ~ tags_all           = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (6 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.forms will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "forms" {
        id                = "Forms"
        name              = "Forms"
      ~ retention_in_days = 90 -> 731
      ~ tags              = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)
    }

  # aws_codedeploy_app.app will be updated in-place
  ~ resource "aws_codedeploy_app" "app" {
        id               = "0f72daa1-71c1-447c-8688-f0bce16d40d5:AppECS-Forms-form-viewer"
        name             = "AppECS-Forms-form-viewer"
      ~ tags             = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)
    }

  # aws_codedeploy_deployment_group.app will be updated in-place
  ~ resource "aws_codedeploy_deployment_group" "app" {
        id                          = "65eae5e8-0f0d-46c8-8f2b-712fa56ecd0a"
      ~ tags                        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (10 unchanged attributes hidden)

        # (5 unchanged blocks hidden)
    }

  # aws_ecs_cluster.forms will be updated in-place
  ~ resource "aws_ecs_cluster" "forms" {
        id       = "arn:aws:ecs:ca-central-1:687401027353:cluster/Forms"
        name     = "Forms"
      ~ tags     = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (2 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_ecs_service.form_viewer will be updated in-place
  ~ resource "aws_ecs_service" "form_viewer" {
        id                                 = "arn:aws:ecs:ca-central-1:687401027353:service/Forms/form-viewer"
        name                               = "form-viewer"
      ~ platform_version                   = "1.4.0" -> "LATEST"
      ~ tags                               = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (15 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_ecs_task_definition.form_viewer will be created
  + resource "aws_ecs_task_definition" "form_viewer" {
      + arn                      = (known after apply)
      + arn_without_revision     = (known after apply)
      + container_definitions    = (known after apply)
      + cpu                      = "2048"
      + execution_role_arn       = "arn:aws:iam::687401027353:role/form-viewer"
      + family                   = "form-viewer"
      + id                       = (known after apply)
      + memory                   = "4096"
      + network_mode             = "awsvpc"
      + requires_compatibilities = [
          + "FARGATE",
        ]
      + revision                 = (known after apply)
      + skip_destroy             = false
      + tags_all                 = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + task_role_arn            = "arn:aws:iam::687401027353:role/form-viewer"
    }

  # aws_iam_policy.cognito will be updated in-place
  ~ resource "aws_iam_policy" "cognito" {
        id          = "arn:aws:iam::687401027353:policy/cognito"
        name        = "cognito"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.forms_dynamodb will be updated in-place
  ~ resource "aws_iam_policy" "forms_dynamodb" {
        id          = "arn:aws:iam::687401027353:policy/forms_dynamodb"
        name        = "forms_dynamodb"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.forms_kms will be updated in-place
  ~ resource "aws_iam_policy" "forms_kms" {
        id          = "arn:aws:iam::687401027353:policy/ecs_kms"
        name        = "ecs_kms"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.forms_s3 will be updated in-place
  ~ resource "aws_iam_policy" "forms_s3" {
        id        = "arn:aws:iam::687401027353:policy/formsS3Access"
        name      = "formsS3Access"
      ~ tags      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)
    }

  # aws_iam_policy.forms_secrets_manager will be updated in-place
  ~ resource "aws_iam_policy" "forms_secrets_manager" {
        id        = "arn:aws:iam::687401027353:policy/formsSecretsManagerKeyRetrieval"
        name      = "formsSecretsManagerKeyRetrieval"
      ~ tags      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)
    }

  # aws_iam_policy.forms_sqs will be updated in-place
  ~ resource "aws_iam_policy" "forms_sqs" {
        id          = "arn:aws:iam::687401027353:policy/forms_sqs"
        name        = "forms_sqs"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_role.codedeploy will be updated in-place
  ~ resource "aws_iam_role" "codedeploy" {
        id                    = "codedeploy"
        name                  = "codedeploy"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_iam_role.forms will be updated in-place
  ~ resource "aws_iam_role" "forms" {
        id                    = "form-viewer"
        name                  = "form-viewer"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

Plan: 1 to add, 14 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_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

Staging: lambdas

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

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

Plan: 9 to add, 30 to change, 9 to destroy
Show summary
CHANGE NAME
add 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
delete aws_s3_bucket_object.audit_logs_code
aws_s3_bucket_object.form_archiver_code
aws_s3_bucket_object.nagware_code
aws_s3_bucket_object.reliability_code
aws_s3_bucket_object.reliability_dlq_consumer_code
aws_s3_bucket_object.response_archiver_code
aws_s3_bucket_object.submission_code
aws_s3_bucket_object.vault_integrity_code
update aws_cloudwatch_event_rule.cron_2am_every_day
aws_cloudwatch_event_rule.cron_3am_every_day
aws_cloudwatch_event_rule.cron_4am_every_day
aws_cloudwatch_event_rule.cron_5am_every_business_day
aws_cloudwatch_log_group.archive_form_templates
aws_cloudwatch_log_group.audit_logs
aws_cloudwatch_log_group.dead_letter_queue_consumer
aws_cloudwatch_log_group.nagware
aws_cloudwatch_log_group.reliability
aws_cloudwatch_log_group.response_archiver
aws_cloudwatch_log_group.submission
aws_cloudwatch_log_group.vault_integrity
aws_iam_policy.lambda_dynamodb
aws_iam_policy.lambda_kms
aws_iam_policy.lambda_logging
aws_iam_policy.lambda_rds
aws_iam_policy.lambda_s3
aws_iam_policy.lambda_secrets
aws_iam_policy.lambda_sns
aws_iam_policy.lambda_sqs
aws_iam_role.lambda
aws_lambda_function.audit_logs
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_signer_signing_profile.lambda_signing_profile[0]
recreate aws_signer_signing_job.vault_integrity[0]

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

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_event_rule.cron_2am_every_day will be updated in-place
  ~ resource "aws_cloudwatch_event_rule" "cron_2am_every_day" {
        id                  = "every-day-at-2am"
        name                = "every-day-at-2am"
        tags                = {}
      ~ tags_all            = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (6 unchanged attributes hidden)
    }

  # aws_cloudwatch_event_rule.cron_3am_every_day will be updated in-place
  ~ resource "aws_cloudwatch_event_rule" "cron_3am_every_day" {
        id                  = "every-day-at-3am"
        name                = "every-day-at-3am"
        tags                = {}
      ~ tags_all            = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (6 unchanged attributes hidden)
    }

  # aws_cloudwatch_event_rule.cron_4am_every_day will be updated in-place
  ~ resource "aws_cloudwatch_event_rule" "cron_4am_every_day" {
        id                  = "every-day-at-4am"
        name                = "every-day-at-4am"
        tags                = {}
      ~ tags_all            = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (6 unchanged attributes hidden)
    }

  # aws_cloudwatch_event_rule.cron_5am_every_business_day will be updated in-place
  ~ resource "aws_cloudwatch_event_rule" "cron_5am_every_business_day" {
        id                  = "every-business-day-at-5am"
        name                = "every-business-day-at-5am"
        tags                = {}
      ~ tags_all            = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (6 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.archive_form_templates will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "archive_form_templates" {
        id                = "/aws/lambda/Archive_Form_Templates"
        name              = "/aws/lambda/Archive_Form_Templates"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.audit_logs will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "audit_logs" {
        id                = "/aws/lambda/Audit_Logs"
        name              = "/aws/lambda/Audit_Logs"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.dead_letter_queue_consumer will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "dead_letter_queue_consumer" {
        id                = "/aws/lambda/Reliability_DLQ_Consumer"
        name              = "/aws/lambda/Reliability_DLQ_Consumer"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.nagware will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "nagware" {
        id                = "/aws/lambda/Nagware"
        name              = "/aws/lambda/Nagware"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.reliability will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "reliability" {
        id                = "/aws/lambda/Reliability"
        name              = "/aws/lambda/Reliability"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.response_archiver will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "response_archiver" {
        id                = "/aws/lambda/Response_Archiver"
        name              = "/aws/lambda/Response_Archiver"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.submission will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "submission" {
        id                = "/aws/lambda/Submission"
        name              = "/aws/lambda/Submission"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.vault_integrity will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "vault_integrity" {
        id                = "/aws/lambda/Vault_Data_Integrity_Check"
        name              = "/aws/lambda/Vault_Data_Integrity_Check"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_dynamodb will be updated in-place
  ~ resource "aws_iam_policy" "lambda_dynamodb" {
        id          = "arn:aws:iam::687401027353:policy/lambda_dynamobdb"
        name        = "lambda_dynamobdb"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_kms will be updated in-place
  ~ resource "aws_iam_policy" "lambda_kms" {
        id          = "arn:aws:iam::687401027353:policy/lambda_kms"
        name        = "lambda_kms"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_logging will be updated in-place
  ~ resource "aws_iam_policy" "lambda_logging" {
        id          = "arn:aws:iam::687401027353:policy/lambda_logging"
        name        = "lambda_logging"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_rds will be updated in-place
  ~ resource "aws_iam_policy" "lambda_rds" {
        id          = "arn:aws:iam::687401027353:policy/lambda_rds"
        name        = "lambda_rds"
      ~ policy      = jsonencode(
          ~ {
              ~ Statement = [
                  ~ {
                      ~ Action   = [
                            "tag:GetResources",
                          - "secretsmanager:ListSecrets",
                          - "secretsmanager:GetRandomPassword",
                            "secretsmanager:CreateSecret",
                            # (15 unchanged elements hidden)
                        ]
                        # (3 unchanged attributes hidden)
                    },
                ]
                # (1 unchanged attribute hidden)
            }
        )
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_s3 will be updated in-place
  ~ resource "aws_iam_policy" "lambda_s3" {
        id          = "arn:aws:iam::687401027353:policy/lambda_s3"
        name        = "lambda_s3"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_secrets will be updated in-place
  ~ resource "aws_iam_policy" "lambda_secrets" {
        id          = "arn:aws:iam::687401027353:policy/lambda_secrets"
        name        = "lambda_secrets"
      ~ policy      = jsonencode(
          ~ {
              ~ Statement = [
                  ~ {
                      ~ Resource = "arn:aws:secretsmanager:ca-central-1:687401027353:secret:database-secret-vHJuTe" -> [
                          + "arn:aws:secretsmanager:ca-central-1:687401027353:secret:notify_api_key-eR3nNp",
                          + "arn:aws:secretsmanager:ca-central-1:687401027353:secret:database-secret-vHJuTe",
                        ]
                      - Sid      = ""
                        # (2 unchanged attributes hidden)
                    },
                ]
                # (1 unchanged attribute hidden)
            }
        )
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_sns will be updated in-place
  ~ resource "aws_iam_policy" "lambda_sns" {
        id          = "arn:aws:iam::687401027353:policy/lambda_sns"
        name        = "lambda_sns"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_policy.lambda_sqs will be updated in-place
  ~ resource "aws_iam_policy" "lambda_sqs" {
        id          = "arn:aws:iam::687401027353:policy/lambda_sqs"
        name        = "lambda_sqs"
      ~ tags        = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (6 unchanged attributes hidden)
    }

  # aws_iam_role.lambda will be updated in-place
  ~ resource "aws_iam_role" "lambda" {
        id                    = "iam_for_lambda"
        name                  = "iam_for_lambda"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_lambda_function.audit_logs will be updated in-place
  ~ resource "aws_lambda_function" "audit_logs" {
        id                             = "Audit_Logs"
      ~ last_modified                  = "2023-12-08T15:00:33.000+0000" -> (known after apply)
      ~ s3_object_version              = "iMfvFxLKoRigCnZVFaJuLTUsn_6RFOu5" -> (known after apply)
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (22 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.form_archiver will be updated in-place
  ~ resource "aws_lambda_function" "form_archiver" {
        id                             = "Archive_Form_Templates"
      ~ last_modified                  = "2023-12-08T15:00:33.000+0000" -> (known after apply)
      ~ s3_object_version              = "j94rcpwyFRwAA7JXRDCDafL85O6hDx2J" -> (known after apply)
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (22 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.nagware will be updated in-place
  ~ resource "aws_lambda_function" "nagware" {
        id                             = "Nagware"
      ~ last_modified                  = "2023-12-14T16:47:42.000+0000" -> (known after apply)
      ~ s3_object_version              = "TvJ2N1_.VVw5oGteCmT4AbDx3ioM1jrD" -> (known after apply)
      ~ source_code_hash               = "OcLo5We0JHv2naLzzmmeTs5+2hTEVT1bAlfB7LuxJFs=" -> "ha3DW+JncgRLWftdc/8u3wFhtA4VJoyDjmcvk7N5xxE="
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (21 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "NOTIFY_API_KEY"            = (sensitive value)
                # (10 unchanged elements hidden)
            }
        }

        # (2 unchanged blocks hidden)
    }

  # aws_lambda_function.reliability will be updated in-place
  ~ resource "aws_lambda_function" "reliability" {
        id                             = "Reliability"
      ~ last_modified                  = "2023-12-13T19:30:42.000+0000" -> (known after apply)
      ~ s3_object_version              = "4Om4TGyikL91F7nkKFedil3uV.tyzsU6" -> (known after apply)
      ~ source_code_hash               = "nf3YFotstkw84Smj5lGE5Dft0jWhLgYZGsp2crPVU6Q=" -> "5yVvgyeNDmi8msn9POHnQ6b5nDF62voAtX4qAtAeW9Y="
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (21 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "NOTIFY_API_KEY" = (sensitive value)
                # (7 unchanged elements hidden)
            }
        }

        # (2 unchanged blocks hidden)
    }

  # aws_lambda_function.reliability_dlq_consumer will be updated in-place
  ~ resource "aws_lambda_function" "reliability_dlq_consumer" {
        id                             = "Reliability_DLQ_Consumer"
      ~ last_modified                  = "2023-12-08T15:00:33.000+0000" -> (known after apply)
      ~ s3_object_version              = "cRf.Dj.LTDhuOUv.k5w6JGkAehmjZ9Ji" -> (known after apply)
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (22 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.response_archiver will be updated in-place
  ~ resource "aws_lambda_function" "response_archiver" {
        id                             = "Response_Archiver"
      ~ last_modified                  = "2024-01-09T15:57:14.000+0000" -> (known after apply)
      ~ s3_object_version              = "FlkRJWeQrrZC4lwjiEbKG4vPnw__MBWu" -> (known after apply)
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (22 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.submission will be updated in-place
  ~ resource "aws_lambda_function" "submission" {
        id                             = "Submission"
      ~ last_modified                  = "2023-12-08T15:00:34.000+0000" -> (known after apply)
      ~ s3_object_version              = "klyLdBblY5xlz0rQhwFtMCYOIZaIxbHS" -> (known after apply)
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (22 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_lambda_function.vault_integrity will be updated in-place
  ~ resource "aws_lambda_function" "vault_integrity" {
        id                             = "Vault_Data_Integrity_Check"
      ~ last_modified                  = "2023-12-27T15:41:05.000+0000" -> (known after apply)
      ~ s3_bucket                      = "forms-staging-lambda-code" -> (known after apply)
      ~ s3_key                         = "signed/5fb02f2a-e7d7-43c0-bb98-aeaf9f2a6f24" -> (known after apply)
      ~ source_code_hash               = "9opCvMNrZA+BCLvHUGkHDweCXfVwLgP5jcHfkTPLySc=" -> "TowbMcppnki+0a5fq50Oral3CqleiwGw7U1igvFz0Ws="
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (22 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_s3_bucket_object.audit_logs_code will be destroyed
  # (because aws_s3_bucket_object.audit_logs_code is not in configuration)
  - resource "aws_s3_bucket_object" "audit_logs_code" {
      - acl                    = "private" -> null
      - bucket                 = "forms-staging-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "binary/octet-stream" -> null
      - etag                   = "5449eb3d251eb9da4bed4cc4d9dbaefb" -> null
      - force_destroy          = false -> null
      - id                     = "audit_logs_code" -> null
      - key                    = "audit_logs_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/audit_logs_code.zip" -> null
      - source_hash            = "Buwqu7thcIBHaO7og80TTG/nf0wASM21hynA9WhHPz0=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
      - version_id             = "iMfvFxLKoRigCnZVFaJuLTUsn_6RFOu5" -> null
    }

  # aws_s3_bucket_object.form_archiver_code will be destroyed
  # (because aws_s3_bucket_object.form_archiver_code is not in configuration)
  - resource "aws_s3_bucket_object" "form_archiver_code" {
      - acl                    = "private" -> null
      - bucket                 = "forms-staging-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "binary/octet-stream" -> null
      - etag                   = "32a053b83abef39244ef777907685f12" -> null
      - force_destroy          = false -> null
      - id                     = "form_archiver_code" -> null
      - key                    = "form_archiver_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/form_archiver_code.zip" -> null
      - source_hash            = "Az0liG599yfRg7cqDAtpcwSYHtgtsQI2m7K2x/krsxY=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
      - version_id             = "j94rcpwyFRwAA7JXRDCDafL85O6hDx2J" -> null
    }

  # aws_s3_bucket_object.nagware_code will be destroyed
  # (because aws_s3_bucket_object.nagware_code is not in configuration)
  - resource "aws_s3_bucket_object" "nagware_code" {
      - acl                    = "private" -> null
      - bucket                 = "forms-staging-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "binary/octet-stream" -> null
      - etag                   = "0720e067d02d67a7316c76293828208e-2" -> null
      - force_destroy          = false -> null
      - id                     = "nagware_code" -> null
      - key                    = "nagware_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/nagware_code.zip" -> null
      - source_hash            = "OcLo5We0JHv2naLzzmmeTs5+2hTEVT1bAlfB7LuxJFs=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
      - version_id             = "TvJ2N1_.VVw5oGteCmT4AbDx3ioM1jrD" -> null
    }

  # aws_s3_bucket_object.reliability_code will be destroyed
  # (because aws_s3_bucket_object.reliability_code is not in configuration)
  - resource "aws_s3_bucket_object" "reliability_code" {
      - acl                    = "private" -> null
      - bucket                 = "forms-staging-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "binary/octet-stream" -> null
      - etag                   = "6eee2a95108e6849a4d8d54f7de2cce4-2" -> null
      - force_destroy          = false -> null
      - id                     = "reliability_code" -> null
      - key                    = "reliability_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/reliability_code.zip" -> null
      - source_hash            = "nf3YFotstkw84Smj5lGE5Dft0jWhLgYZGsp2crPVU6Q=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
      - version_id             = "4Om4TGyikL91F7nkKFedil3uV.tyzsU6" -> null
    }

  # aws_s3_bucket_object.reliability_dlq_consumer_code will be destroyed
  # (because aws_s3_bucket_object.reliability_dlq_consumer_code is not in configuration)
  - resource "aws_s3_bucket_object" "reliability_dlq_consumer_code" {
      - acl                    = "private" -> null
      - bucket                 = "forms-staging-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "binary/octet-stream" -> null
      - etag                   = "4505a631fc6a071f64f549b91eaf725a" -> null
      - force_destroy          = false -> null
      - id                     = "reliability_dlq_consumer_code" -> null
      - key                    = "reliability_dlq_consumer_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/reliability_dlq_consumer_code.zip" -> null
      - source_hash            = "F7WbeUnrxxXYZkj7tkJyJcFV6inBl3QWsV9AzLcvfB4=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
      - version_id             = "cRf.Dj.LTDhuOUv.k5w6JGkAehmjZ9Ji" -> null
    }

  # aws_s3_bucket_object.response_archiver_code will be destroyed
  # (because aws_s3_bucket_object.response_archiver_code is not in configuration)
  - resource "aws_s3_bucket_object" "response_archiver_code" {
      - acl                    = "private" -> null
      - bucket                 = "forms-staging-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "binary/octet-stream" -> null
      - etag                   = "f10c294a1ed067cf983e8c9cd497d37e-2" -> null
      - force_destroy          = false -> null
      - id                     = "response_archiver_code" -> null
      - key                    = "response_archiver_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/response_archiver_code.zip" -> null
      - source_hash            = "HlOcaGXKLFMSZO3DF101vb5Af5YWWPGBw6Z16Zu9hVI=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
      - version_id             = "FlkRJWeQrrZC4lwjiEbKG4vPnw__MBWu" -> null
    }

  # aws_s3_bucket_object.submission_code will be destroyed
  # (because aws_s3_bucket_object.submission_code is not in configuration)
  - resource "aws_s3_bucket_object" "submission_code" {
      - acl                    = "private" -> null
      - bucket                 = "forms-staging-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "binary/octet-stream" -> null
      - etag                   = "6f15df036a513bfaca7fcea4d4b1fb78-2" -> null
      - force_destroy          = false -> null
      - id                     = "submission_code" -> null
      - key                    = "submission_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/submission_code.zip" -> null
      - source_hash            = "upOHVsX4QZQdq2GJDkBlWCCQTia0Q0WdEVP2ZbhUGXk=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
      - version_id             = "klyLdBblY5xlz0rQhwFtMCYOIZaIxbHS" -> null
    }

  # aws_s3_bucket_object.vault_integrity_code will be destroyed
  # (because aws_s3_bucket_object.vault_integrity_code is not in configuration)
  - resource "aws_s3_bucket_object" "vault_integrity_code" {
      - acl                    = "private" -> null
      - bucket                 = "forms-staging-lambda-code" -> null
      - bucket_key_enabled     = false -> null
      - content_type           = "binary/octet-stream" -> null
      - etag                   = "71c195eb45edc2203396a57fd03b5884-2" -> null
      - force_destroy          = false -> null
      - id                     = "vault_integrity_code" -> null
      - key                    = "vault_integrity_code" -> null
      - metadata               = {} -> null
      - server_side_encryption = "AES256" -> null
      - source                 = "/tmp/vault_integrity_code.zip" -> null
      - source_hash            = "TowbMcppnki+0a5fq50Oral3CqleiwGw7U1igvFz0Ws=" -> null
      - storage_class          = "STANDARD" -> null
      - tags                   = {} -> null
      - tags_all               = {} -> null
      - version_id             = "sQTR1bM5TctBB1gnxGI5GNQx3fnc7zbN" -> null
    }

  # aws_s3_object.audit_logs_code will be created
  + resource "aws_s3_object" "audit_logs_code" {
      + acl                    = (known after apply)
      + bucket                 = "forms-staging-lambda-code"
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      + content_type           = (known after apply)
      + etag                   = (known after apply)
      + force_destroy          = false
      + id                     = (known after apply)
      + key                    = "audit_logs_code"
      + kms_key_id             = (known after apply)
      + server_side_encryption = (known after apply)
      + source                 = "/tmp/audit_logs_code.zip"
      + source_hash            = "Buwqu7thcIBHaO7og80TTG/nf0wASM21hynA9WhHPz0="
      + storage_class          = (known after apply)
      + tags_all               = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + version_id             = (known after apply)
    }

  # aws_s3_object.form_archiver_code will be created
  + resource "aws_s3_object" "form_archiver_code" {
      + acl                    = (known after apply)
      + bucket                 = "forms-staging-lambda-code"
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      + content_type           = (known after apply)
      + etag                   = (known after apply)
      + force_destroy          = false
      + id                     = (known after apply)
      + key                    = "form_archiver_code"
      + kms_key_id             = (known after apply)
      + server_side_encryption = (known after apply)
      + source                 = "/tmp/form_archiver_code.zip"
      + source_hash            = "Az0liG599yfRg7cqDAtpcwSYHtgtsQI2m7K2x/krsxY="
      + storage_class          = (known after apply)
      + tags_all               = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + version_id             = (known after apply)
    }

  # aws_s3_object.nagware_code will be created
  + resource "aws_s3_object" "nagware_code" {
      + acl                    = (known after apply)
      + bucket                 = "forms-staging-lambda-code"
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      + content_type           = (known after apply)
      + etag                   = (known after apply)
      + force_destroy          = false
      + id                     = (known after apply)
      + key                    = "nagware_code"
      + kms_key_id             = (known after apply)
      + server_side_encryption = (known after apply)
      + source                 = "/tmp/nagware_code.zip"
      + source_hash            = "ha3DW+JncgRLWftdc/8u3wFhtA4VJoyDjmcvk7N5xxE="
      + storage_class          = (known after apply)
      + tags_all               = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
      + version_id             = (known after apply)
    }

  # aws_s3_object.reliability_code will be created
  + resource "aws_s3_object" "reliability_code" {
      + acl                    = (known after apply)
      + bucket                 = "forms-staging-lambda-code"
      + bucket_key_enabled     = (known after apply)
      + checksum_crc32         = (known after apply)
      + checksum_crc32c        = (known after apply)
      + checksum_sha1          = (known after apply)
      + checksum_sha256        = (known after apply)
      +...
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.cron_2am_every_day"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.cron_3am_every_day"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.cron_4am_every_day"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.cron_5am_every_business_day"]
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.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 - plan.json - main - Missing Common Tags: ["aws_iam_role.lambda"]
WARN - plan.json - main - Missing Common Tags: ["aws_lambda_function.audit_logs"]
WARN - plan.json - main - Missing Common Tags: ["aws_lambda_function.form_archiver"]
WARN -...

Copy link

Staging: alarms

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

Plan: 0 to add, 19 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_cloudwatch_event_rule.codedeploy_sns
aws_cloudwatch_log_group.notify_slack
aws_cloudwatch_metric_alarm.ELB_5xx_error_warn
aws_cloudwatch_metric_alarm.alb_ddos
aws_cloudwatch_metric_alarm.audit_log_dead_letter_queue_warn
aws_cloudwatch_metric_alarm.cognito_login_outside_canada_warn
aws_cloudwatch_metric_alarm.cognito_signin_exceeded
aws_cloudwatch_metric_alarm.ddos_detected_forms_warn
aws_cloudwatch_metric_alarm.ddos_detected_route53_warn[0]
aws_cloudwatch_metric_alarm.forms_cpu_utilization_high_warn
aws_cloudwatch_metric_alarm.forms_memory_utilization_high_warn
aws_cloudwatch_metric_alarm.reliability_dead_letter_queue_warn
aws_cloudwatch_metric_alarm.response_time_warn
aws_cloudwatch_metric_alarm.route53_ddos[0]
aws_cloudwatch_metric_alarm.twoFa_verification_exceeded
aws_cloudwatch_metric_alarm.vault_data_integrity_check_lambda_iterator_age
aws_iam_role.notify_slack_lambda
aws_lambda_function.notify_slack
module.athena_bucket.aws_s3_bucket.this
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_cloudwatch_event_rule.codedeploy_sns will be updated in-place
  ~ resource "aws_cloudwatch_event_rule" "codedeploy_sns" {
        id             = "alert-on-codedeploy-status"
        name           = "alert-on-codedeploy-status"
      ~ tags           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (7 unchanged attributes hidden)
    }

  # aws_cloudwatch_log_group.notify_slack will be updated in-place
  ~ resource "aws_cloudwatch_log_group" "notify_slack" {
        id                = "/aws/lambda/NotifySlack"
        name              = "/aws/lambda/NotifySlack"
      ~ retention_in_days = 90 -> 731
        tags              = {}
      ~ tags_all          = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (4 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.ELB_5xx_error_warn will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "ELB_5xx_error_warn" {
        id                        = "HTTPCode_ELB_5XX_Count"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (18 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.alb_ddos will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "alb_ddos" {
        id                        = "ALBDDoS"
        tags                      = {}
      ~ tags_all                  = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (17 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.audit_log_dead_letter_queue_warn will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "audit_log_dead_letter_queue_warn" {
        id                        = "AuditLogDeadLetterQueueWarn"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (15 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_cloudwatch_metric_alarm.cognito_login_outside_canada_warn will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "cognito_login_outside_canada_warn" {
        id                        = "AWSCognitoLoginOutsideCanadaAlarm"
        tags                      = {}
      ~ tags_all                  = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (17 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.cognito_signin_exceeded will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "cognito_signin_exceeded" {
        id                        = "CognitoSigninExceeded"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (18 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.ddos_detected_forms_warn will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "ddos_detected_forms_warn" {
        id                        = "DDoSDetectedformsWarn"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (18 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.ddos_detected_route53_warn[0] will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "ddos_detected_route53_warn" {
        id                        = "DDoSDetectedRoute53Warn"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (18 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.forms_cpu_utilization_high_warn will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "forms_cpu_utilization_high_warn" {
        id                        = "CpuUtilizationWarn"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (18 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.forms_memory_utilization_high_warn will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "forms_memory_utilization_high_warn" {
        id                        = "MemoryUtilizationWarn"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (18 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.reliability_dead_letter_queue_warn will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "reliability_dead_letter_queue_warn" {
        id                        = "ReliabilityDeadLetterQueueWarn"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (15 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # aws_cloudwatch_metric_alarm.response_time_warn will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "response_time_warn" {
        id                        = "ResponseTimeWarn"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (15 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_cloudwatch_metric_alarm.route53_ddos[0] will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "route53_ddos" {
        id                        = "Route53DDoS"
        tags                      = {}
      ~ tags_all                  = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (17 unchanged attributes hidden)
    }

  # aws_cloudwatch_metric_alarm.twoFa_verification_exceeded will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "twoFa_verification_exceeded" {
        id                        = "2FAVerificationExceeded"
      ~ tags                      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (18 unchanged attributes hidden)
    }

  # 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" {
        id                        = "Vault data integrity check lambda iterator age"
        tags                      = {}
      ~ tags_all                  = {
          + "CostCentre" = "forms-platform-staging"
          + "Terraform"  = "true"
        }
        # (17 unchanged attributes hidden)
    }

  # aws_iam_role.notify_slack_lambda will be updated in-place
  ~ resource "aws_iam_role" "notify_slack_lambda" {
        id                    = "NotifySlackLambda"
        name                  = "NotifySlackLambda"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_lambda_function.notify_slack will be updated in-place
  ~ resource "aws_lambda_function" "notify_slack" {
        id                             = "NotifySlack"
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (22 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

  # module.athena_bucket.aws_s3_bucket.this will be updated in-place
  ~ resource "aws_s3_bucket" "this" {
        id                          = "forms-staging-athena-bucket"
      ~ tags                        = {
            "CostCentre" = "forms-platform-staging"
          + "Critical"   = "false"
            "Terraform"  = "true"
        }
      ~ tags_all                    = {
          + "Critical"   = "false"
            # (2 unchanged elements hidden)
        }
        # (10 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

Plan: 0 to add, 19 to change, 0 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.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 - main - Missing Common Tags: ["aws_lambda_function.notify_slack"]

37 tests, 19 passed, 18 warnings, 0 failures, 0 exceptions

Copy link

Staging: load_testing

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

Plan: 0 to add, 2 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_iam_role.load_test_lambda
aws_lambda_function.load_testing
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_iam_role.load_test_lambda will be updated in-place
  ~ resource "aws_iam_role" "load_test_lambda" {
        id                    = "LoadTestLambda"
        name                  = "LoadTestLambda"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_lambda_function.load_testing will be updated in-place
  ~ resource "aws_lambda_function" "load_testing" {
        id                             = "LoadTesting"
      ~ tags                           = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (21 unchanged attributes hidden)

        # (3 unchanged blocks hidden)
    }

Plan: 0 to add, 2 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_iam_role.load_test_lambda"]
WARN - plan.json - main - Missing Common Tags: ["aws_lambda_function.load_testing"]

21 tests, 19 passed, 2 warnings, 0 failures, 0 exceptions

Copy link

Staging: pr_review

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

Plan: 0 to add, 4 to change, 0 to destroy
Show summary
CHANGE NAME
update aws_ecr_repository.pr_review_repository[0]
aws_iam_policy.forms_lambda_parameter_store[0]
aws_iam_role.forms_lambda_client[0]
aws_security_group.lambda_client_pr_review[0]
Show plan
Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_ecr_repository.pr_review_repository[0] will be updated in-place
  ~ resource "aws_ecr_repository" "pr_review_repository" {
        id                   = "pr_review"
        name                 = "pr_review"
      ~ tags                 = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)

        # (2 unchanged blocks hidden)
    }

  # aws_iam_policy.forms_lambda_parameter_store[0] will be updated in-place
  ~ resource "aws_iam_policy" "forms_lambda_parameter_store" {
        id        = "arn:aws:iam::687401027353:policy/formsLambdaParameterStoreRetrieval"
        name      = "formsLambdaParameterStoreRetrieval"
      ~ tags      = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (5 unchanged attributes hidden)
    }

  # aws_iam_role.forms_lambda_client[0] will be updated in-place
  ~ resource "aws_iam_role" "forms_lambda_client" {
        id                    = "forms-lambda-client"
        name                  = "forms-lambda-client"
      ~ tags                  = {
          - "CostCentre" = "forms-platform-staging" -> null
          - "Terraform"  = "true" -> null
        }
        # (9 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # aws_security_group.lambda_client_pr_review[0] will be updated in-place
  ~ resource "aws_security_group" "lambda_client_pr_review" {
        id                     = "sg-0554e1d0a9da92168"
        name                   = "lambda-admin-pr-review"
      ~ tags                   = {
          - "CostCentre" = "forms-platform-staging" -> null
        }
      ~ tags_all               = {
          + "Terraform"  = "true"
            # (1 unchanged element hidden)
        }
        # (7 unchanged attributes hidden)
    }

Plan: 0 to add, 4 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_ecr_repository.pr_review_repository[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.forms_lambda_parameter_store[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_role.forms_lambda_client[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.lambda_client_pr_review[0]"]

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

@bryan-robitaille bryan-robitaille merged commit 1d6273c into develop Jan 10, 2024
4 checks passed
@bryan-robitaille bryan-robitaille deleted the chore/aws_provider_upgrade branch January 10, 2024 20:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants