feat(push-server): initial import of push server from 5c84bb95c121091981e3b44d0f61cf85e2b9d8a1

Goal
Move the pocket instant sync push server
https://mozilla-hub.atlassian.net/browse/POCKET-9451
Todos

[x] Import code
[x] refactor push code to our latest standards
[x] redo infra to match latest patterns (this is a background process and is safe to do so)

Plan Result (user-list-search-cdk)
CI link
Plan: 1 to add, 0 to change, 0 to destroy.

Create

local_file.appspec

Change Result (Click me)

  # local_file.appspec will be created
  + resource "local_file" "appspec" {
      + content              = jsonencode(
            {
              + Resources = [
                  + {
                      + TargetService = {
                          + Properties = {
                              + LoadBalancerInfo = {
                                  + ContainerName = "node"
                                  + ContainerPort = 4000
                                }
                              + TaskDefinition   = "arn:aws:ecs:us-east-1:996905175585:task-definition/UserListSearch-Prod-Apollo:318"
                            }
                          + Type       = "AWS::ECS::Service"
                        }
                    },
                ]
              + version   = 1
            }
        )
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

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

Plan Result (shared-snowplow-consumer-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 2 to add, 0 to change, 1 to destroy.

Create

local_file.shared-snowplow-consumer-app_application_ecs_service_appspec_7674CFF9

Replace

aws_ecs_task_definition.shared-snowplow-consumer-app_application_ecs_service_ecs-task_6958091B

Change Result (Click me)

  # aws_ecs_task_definition.shared-snowplow-consumer-app_application_ecs_service_ecs-task_6958091B must be replaced
-/+ resource "aws_ecs_task_definition" "shared-snowplow-consumer-app_application_ecs_service_ecs-task_6958091B" {
      ~ arn                      = "arn:aws:ecs:us-east-1:996905175585:task-definition/SharedSnowplowConsumer-Prod:113" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:996905175585:task-definition/SharedSnowplowConsumer-Prod" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "996905175585.dkr.ecr.us-east-1.amazonaws.com/sharedsnowplowconsumer-prod-app:feecb7d5169a1cbcb2e9811d077e9404729156d4" -> "996905175585.dkr.ecr.us-east-1.amazonaws.com/sharedsnowplowconsumer-prod-app:a7f0a8fb29d5effe0cc64d4b0194ef3307f87202"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name                   = "aws-otel-collector"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "SharedSnowplowConsumer-Prod" -> (known after apply)
      ~ revision                 = 113 -> (known after apply)
        tags                     = {
            "environment" = "Prod"
            "service"     = "SharedSnowplowConsumer"
        }
        # (9 unchanged attributes hidden)
    }

  # local_file.shared-snowplow-consumer-app_application_ecs_service_appspec_7674CFF9 will be created
  + resource "local_file" "shared-snowplow-consumer-app_application_ecs_service_appspec_7674CFF9" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

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

Plan Result (transactional-emails-cdk)
CI link
Plan: 0 to add, 1 to change, 0 to destroy.

Update

aws_lambda_function.events_sqs-event-consumer_lambda_3BE960B8

Change Result (Click me)

  # aws_lambda_function.events_sqs-event-consumer_lambda_3BE960B8 will be updated in-place
  ~ resource "aws_lambda_function" "events_sqs-event-consumer_lambda_3BE960B8" {
        id                             = "TransactionalEmails-Prod-Sqs-Event-Consumer-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:996905175585:function:TransactionalEmails-Prod-Sqs-Event-Consumer-Function:315" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:996905175585:function:TransactionalEmails-Prod-Sqs-Event-Consumer-Function:315/invocations" -> (known after apply)
        tags                           = {
            "environment" = "Prod"
            "service"     = "TransactionalEmails"
        }
      ~ version                        = "315" -> (known after apply)
        # (19 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "GIT_SHA"                            = (sensitive value)
                # (6 unchanged elements hidden)
            }
        }

        # (4 unchanged blocks hidden)
    }

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

Plan Result (account-data-deleter-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 2 to add, 2 to change, 1 to destroy.

Create

local_file.data-deleter-app_application_ecs_service_appspec_5FC42C09

Update

aws_lambda_function.batchdeletelambda_batch-delete-lambda_9A38729B
aws_lambda_function.event-consumer_sqs-event-consumer_lambda_2F35855C

Replace

aws_ecs_task_definition.data-deleter-app_application_ecs_service_ecs-task_243DED07

Change Result (Click me)

  # aws_ecs_task_definition.data-deleter-app_application_ecs_service_ecs-task_243DED07 must be replaced
-/+ resource "aws_ecs_task_definition" "data-deleter-app_application_ecs_service_ecs-task_243DED07" {
      ~ arn                      = "arn:aws:ecs:us-east-1:996905175585:task-definition/AccountDataDeleter-Prod:433" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:996905175585:task-definition/AccountDataDeleter-Prod" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "996905175585.dkr.ecr.us-east-1.amazonaws.com/accountdatadeleter-prod-app:feecb7d5169a1cbcb2e9811d077e9404729156d4" -> "996905175585.dkr.ecr.us-east-1.amazonaws.com/accountdatadeleter-prod-app:a7f0a8fb29d5effe0cc64d4b0194ef3307f87202"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "AccountDataDeleter-Prod" -> (known after apply)
      ~ revision                 = 433 -> (known after apply)
        tags                     = {
            "environment" = "Prod"
            "service"     = "AccountDataDeleter"
        }
        # (9 unchanged attributes hidden)
    }

  # aws_lambda_function.batchdeletelambda_batch-delete-lambda_9A38729B will be updated in-place
  ~ resource "aws_lambda_function" "batchdeletelambda_batch-delete-lambda_9A38729B" {
        id                             = "AccountDataDeleter-Prod-BatchDeleteLambda-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:996905175585:function:AccountDataDeleter-Prod-BatchDeleteLambda-Function:359" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:996905175585:function:AccountDataDeleter-Prod-BatchDeleteLambda-Function:359/invocations" -> (known after apply)
        tags                           = {
            "environment" = "Prod"
            "service"     = "AccountDataDeleter"
        }
      ~ version                        = "359" -> (known after apply)
        # (19 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "GIT_SHA"     = (sensitive value)
                # (4 unchanged elements hidden)
            }
        }

        # (4 unchanged blocks hidden)
    }

  # aws_lambda_function.event-consumer_sqs-event-consumer_lambda_2F35855C will be updated in-place
  ~ resource "aws_lambda_function" "event-consumer_sqs-event-consumer_lambda_2F35855C" {
        id                             = "AccountDataDeleter-Prod-Sqs-Event-Consumer-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:996905175585:function:AccountDataDeleter-Prod-Sqs-Event-Consumer-Function:592" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:996905175585:function:AccountDataDeleter-Prod-Sqs-Event-Consumer-Function:592/invocations" -> (known after apply)
        tags                           = {
            "environment" = "Prod"
            "service"     = "AccountDataDeleter"
        }
      ~ version                        = "592" -> (known after apply)
        # (19 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "GIT_SHA"                      = (sensitive value)
                # (4 unchanged elements hidden)
            }
        }

        # (4 unchanged blocks hidden)
    }

  # local_file.data-deleter-app_application_ecs_service_appspec_5FC42C09 will be created
  + resource "local_file" "data-deleter-app_application_ecs_service_appspec_5FC42C09" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

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

Plan Result (pocket-event-bridge-cdk)
CI link
Plan: 0 to add, 1 to change, 0 to destroy.

Update

aws_cloudwatch_metric_alarm.shareable-list-events_shareablelistevents-rule-dlq-alarm_FBCFA70C

Change Result (Click me)

  # aws_cloudwatch_metric_alarm.shareable-list-events_shareablelistevents-rule-dlq-alarm_FBCFA70C will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "shareable-list-events_shareablelistevents-rule-dlq-alarm_FBCFA70C" {
      ~ dimensions                = {
          ~ "QueueName" = "PocketEventBridge-Prod-SNS-ShareableListItemEvents-Topic-DLQ" -> "PocketEventBridge-Prod-SNS-ShareableListEvents-Topic-DLQ"
        }
        id                        = "PocketEventBridge-Prod-ShareableListEvents-Rule-dlq-alarm"
        tags                      = {}
        # (17 unchanged attributes hidden)
    }

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

Plan Result (parser-graphql-wrapper-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 2 to add, 0 to change, 1 to destroy.

Create

local_file.application_ecs_service_appspec_94386B9C

Replace

aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4

Change Result (Click me)

  # aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4 must be replaced
-/+ resource "aws_ecs_task_definition" "application_ecs_service_ecs-task_461CC9D4" {
      ~ arn                      = "arn:aws:ecs:us-east-1:996905175585:task-definition/ParserGraphQLWrapper-Prod:666" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:996905175585:task-definition/ParserGraphQLWrapper-Prod" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "996905175585.dkr.ecr.us-east-1.amazonaws.com/parsergraphqlwrapper-prod-app:feecb7d5169a1cbcb2e9811d077e9404729156d4" -> "996905175585.dkr.ecr.us-east-1.amazonaws.com/parsergraphqlwrapper-prod-app:a7f0a8fb29d5effe0cc64d4b0194ef3307f87202"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name                   = "aws-otel-collector"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "ParserGraphQLWrapper-Prod" -> (known after apply)
      ~ revision                 = 666 -> (known after apply)
        tags                     = {
            "environment" = "Prod"
            "service"     = "ParserGraphQLWrapper"
        }
        # (9 unchanged attributes hidden)
    }

  # local_file.application_ecs_service_appspec_94386B9C will be created
  + resource "local_file" "application_ecs_service_appspec_94386B9C" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

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

Plan Result (account-delete-monitor-cdk)
CI link
Plan: 0 to add, 1 to change, 0 to destroy.

Update

aws_lambda_function.eventtracker_lambda_2D56166D

Change Result (Click me)

  # aws_lambda_function.eventtracker_lambda_2D56166D will be updated in-place
  ~ resource "aws_lambda_function" "eventtracker_lambda_2D56166D" {
        id                             = "AccountDeleteMonitor-Prod-EventTracker-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:996905175585:function:AccountDeleteMonitor-Prod-EventTracker-Function:295" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:996905175585:function:AccountDeleteMonitor-Prod-EventTracker-Function:295/invocations" -> (known after apply)
        tags                           = {
            "environment" = "Prod"
            "service"     = "AccountDeleteMonitor"
        }
      ~ version                        = "295" -> (known after apply)
        # (19 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "GIT_SHA"              = (sensitive value)
                # (4 unchanged elements hidden)
            }
        }

        # (4 unchanged blocks hidden)
    }

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

Plan Result (shareable-lists-api-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 2 to add, 0 to change, 1 to destroy.

Create

local_file.application_ecs_service_appspec_94386B9C

Replace

aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4

Change Result (Click me)

  # aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4 must be replaced
-/+ resource "aws_ecs_task_definition" "application_ecs_service_ecs-task_461CC9D4" {
      ~ arn                      = "arn:aws:ecs:us-east-1:996905175585:task-definition/ShareableListsApi-Prod:332" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:996905175585:task-definition/ShareableListsApi-Prod" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "996905175585.dkr.ecr.us-east-1.amazonaws.com/shareablelistsapi-prod-app:feecb7d5169a1cbcb2e9811d077e9404729156d4" -> "996905175585.dkr.ecr.us-east-1.amazonaws.com/shareablelistsapi-prod-app:a7f0a8fb29d5effe0cc64d4b0194ef3307f87202"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "ShareableListsApi-Prod" -> (known after apply)
      ~ revision                 = 332 -> (known after apply)
        tags                     = {
            "environment" = "Prod"
            "service"     = "ShareableListsApi"
        }
        # (9 unchanged attributes hidden)
    }

  # local_file.application_ecs_service_appspec_94386B9C will be created
  + resource "local_file" "application_ecs_service_appspec_94386B9C" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

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

Plan Result (image-api-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 2 to add, 0 to change, 1 to destroy.

Create

local_file.application_ecs_service_appspec_94386B9C

Replace

aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4

Change Result (Click me)

  # aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4 must be replaced
-/+ resource "aws_ecs_task_definition" "application_ecs_service_ecs-task_461CC9D4" {
      ~ arn                      = "arn:aws:ecs:us-east-1:996905175585:task-definition/ImageAPI-Prod:155" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:996905175585:task-definition/ImageAPI-Prod" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "996905175585.dkr.ecr.us-east-1.amazonaws.com/imageapi-prod-app:feecb7d5169a1cbcb2e9811d077e9404729156d4" -> "996905175585.dkr.ecr.us-east-1.amazonaws.com/imageapi-prod-app:a7f0a8fb29d5effe0cc64d4b0194ef3307f87202"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name                   = "aws-otel-collector"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "ImageAPI-Prod" -> (known after apply)
      ~ revision                 = 155 -> (known after apply)
        tags                     = {
            "environment" = "Prod"
            "service"     = "ImageAPI"
        }
        # (9 unchanged attributes hidden)
    }

  # local_file.application_ecs_service_appspec_94386B9C will be created
  + resource "local_file" "application_ecs_service_appspec_94386B9C" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

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

Plan Result (user-api-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 2 to add, 0 to change, 1 to destroy.

Create

local_file.application_ecs_service_appspec_94386B9C

Replace

aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4

Change Result (Click me)

  # aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4 must be replaced
-/+ resource "aws_ecs_task_definition" "application_ecs_service_ecs-task_461CC9D4" {
      ~ arn                      = "arn:aws:ecs:us-east-1:996905175585:task-definition/UserAPI-Prod:292" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:996905175585:task-definition/UserAPI-Prod" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "996905175585.dkr.ecr.us-east-1.amazonaws.com/userapi-prod-app:feecb7d5169a1cbcb2e9811d077e9404729156d4" -> "996905175585.dkr.ecr.us-east-1.amazonaws.com/userapi-prod-app:a7f0a8fb29d5effe0cc64d4b0194ef3307f87202"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name                   = "aws-otel-collector"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "UserAPI-Prod" -> (known after apply)
      ~ revision                 = 292 -> (known after apply)
        tags                     = {
            "environment" = "Prod"
            "service"     = "UserAPI"
        }
        # (9 unchanged attributes hidden)
    }

  # local_file.application_ecs_service_appspec_94386B9C will be created
  + resource "local_file" "application_ecs_service_appspec_94386B9C" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

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

Plan Result (list-api-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 2 to add, 0 to change, 1 to destroy.

Create

local_file.application_ecs_service_appspec_94386B9C

Replace

aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4

Change Result (Click me)

  # aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4 must be replaced
-/+ resource "aws_ecs_task_definition" "application_ecs_service_ecs-task_461CC9D4" {
      ~ arn                      = "arn:aws:ecs:us-east-1:996905175585:task-definition/ListAPI-Prod:960" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:996905175585:task-definition/ListAPI-Prod" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "996905175585.dkr.ecr.us-east-1.amazonaws.com/listapi-prod-app:feecb7d5169a1cbcb2e9811d077e9404729156d4" -> "996905175585.dkr.ecr.us-east-1.amazonaws.com/listapi-prod-app:a7f0a8fb29d5effe0cc64d4b0194ef3307f87202"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name                   = "aws-otel-collector"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "ListAPI-Prod" -> (known after apply)
      ~ revision                 = 960 -> (known after apply)
        tags                     = {
            "environment" = "Prod"
            "service"     = "ListAPI"
        }
        # (9 unchanged attributes hidden)
    }

  # local_file.application_ecs_service_appspec_94386B9C will be created
  + resource "local_file" "application_ecs_service_appspec_94386B9C" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

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

Plan Result (fxa-webhook-proxy-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 1 to add, 3 to change, 1 to destroy.

Update

aws_api_gateway_stage.apigateway-lambda_api-gateway-stage_E95B0DF9
aws_lambda_function.apigateway-lambda_fxa-events-apigateway-lambda_events-lambda_06645171
aws_lambda_function.proxy-lambda_fxa-events-sqs-lambda_39345609

Replace

aws_api_gateway_deployment.apigateway-lambda_api-gateway-deployment_3AF9B512

Change Result (Click me)

  # aws_api_gateway_deployment.apigateway-lambda_api-gateway-deployment_3AF9B512 must be replaced
+/- resource "aws_api_gateway_deployment" "apigateway-lambda_api-gateway-deployment_3AF9B512" {
      ~ created_date  = "2024-02-07T15:00:42Z" -> (known after apply)
      ~ execution_arn = "arn:aws:execute-api:us-east-1:996905175585:b1aoz7w8yj/" -> (known after apply)
      ~ id            = "1cy5am" -> (known after apply)
      ~ invoke_url    = "https://b1aoz7w8yj.execute-api.us-east-1.amazonaws.com/" -> (known after apply)
      ~ triggers      = { # forces replacement
          ~ "deployedAt"   = "1707317997232" -> "1707346551373"
            # (1 unchanged element hidden)
        }
        # (1 unchanged attribute hidden)
    }

  # aws_api_gateway_stage.apigateway-lambda_api-gateway-stage_E95B0DF9 will be updated in-place
  ~ resource "aws_api_gateway_stage" "apigateway-lambda_api-gateway-stage_E95B0DF9" {
      ~ deployment_id         = "1cy5am" -> (known after apply)
        id                    = "ags-b1aoz7w8yj-prod"
        tags                  = {}
        # (9 unchanged attributes hidden)
    }

  # aws_lambda_function.apigateway-lambda_fxa-events-apigateway-lambda_events-lambda_06645171 will be updated in-place
  ~ resource "aws_lambda_function" "apigateway-lambda_fxa-events-apigateway-lambda_events-lambda_06645171" {
        id                             = "FxAWebhookProxy-Prod-ApiGateway-FxA-Events-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:996905175585:function:FxAWebhookProxy-Prod-ApiGateway-FxA-Events-Function:853" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:996905175585:function:FxAWebhookProxy-Prod-ApiGateway-FxA-Events-Function:853/invocations" -> (known after apply)
      ~ runtime                        = "nodejs18.x" -> "nodejs20.x"
        tags                           = {}
      ~ version                        = "853" -> (known after apply)
        # (18 unchanged attributes hidden)

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

        # (4 unchanged blocks hidden)
    }

  # aws_lambda_function.proxy-lambda_fxa-events-sqs-lambda_39345609 will be updated in-place
  ~ resource "aws_lambda_function" "proxy-lambda_fxa-events-sqs-lambda_39345609" {
        id                             = "FxAWebhookProxy-Prod-Sqs-FxA-Events-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:996905175585:function:FxAWebhookProxy-Prod-Sqs-FxA-Events-Function:886" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:996905175585:function:FxAWebhookProxy-Prod-Sqs-FxA-Events-Function:886/invocations" -> (known after apply)
      ~ runtime                        = "nodejs18.x" -> "nodejs20.x"
        tags                           = {
            "environment" = "Prod"
            "service"     = "FxAWebhookProxy"
        }
      ~ version                        = "886" -> (known after apply)
        # (18 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "GIT_SHA"     = (sensitive value)
                # (4 unchanged elements hidden)
            }
        }

        # (4 unchanged blocks hidden)
    }

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

Plan Result (annotations-api-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 2 to add, 2 to change, 1 to destroy.

Create

local_file.application_ecs_service_appspec_94386B9C

Update

aws_dynamodb_table.dynamodb_highlight-notes_dynamodb_table_8BD520BF
aws_iam_policy.application_ecs_service_ecs-iam_ecs-task-role-policy_6FC89FB6

Replace

aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4

Change Result (Click me)

  # data.aws_iam_policy_document.application_ecs_service_ecs-iam_data-ecs-task-role-policy_090CC3AD will be read during apply
  # (depends on a resource or a module with changes pending)
 <= data "aws_iam_policy_document" "application_ecs_service_ecs-iam_data-ecs-task-role-policy_090CC3AD" {
      + id      = (known after apply)
      + json    = (known after apply)
      + version = "2012-10-17"

      + statement {
          + actions   = [
              + "dynamodb:BatchGet*",
              + "dynamodb:BatchWrite*",
              + "dynamodb:Delete*",
              + "dynamodb:DescribeTable",
              + "dynamodb:Get*",
              + "dynamodb:PutItem",
              + "dynamodb:Query",
              + "dynamodb:Scan",
              + "dynamodb:UpdateItem",
            ]
          + effect    = "Allow"
          + resources = [
              + "arn:aws:dynamodb:us-east-1:996905175585:table/ANNOT-Prod-highlight-notes",
              + "arn:aws:dynamodb:us-east-1:996905175585:table/ANNOT-Prod-highlight-notes/*",
            ]
        }
      + statement {
          + actions   = [
              + "sqs:DeleteMessage",
              + "sqs:ReceiveMessage",
              + "sqs:SendMessage",
              + "sqs:SendMessageBatch",
            ]
          + effect    = "Allow"
          + resources = [
              + "arn:aws:sqs:us-east-1:996905175585:AnnotationsAPI-Prod-Batch-Delete-Consumer-Queue",
            ]
        }
    }

  # aws_dynamodb_table.dynamodb_highlight-notes_dynamodb_table_8BD520BF will be updated in-place
  ~ resource "aws_dynamodb_table" "dynamodb_highlight-notes_dynamodb_table_8BD520BF" {
        id                          = "ANNOT-Prod-highlight-notes"
        name                        = "ANNOT-Prod-highlight-notes"
        tags                        = {
            "environment" = "Prod"
            "service"     = "AnnotationsAPI"
        }
        # (9 unchanged attributes hidden)

      - global_secondary_index {
          - hash_key           = "userId" -> null
          - name               = "userId" -> null
          - non_key_attributes = [] -> null
          - projection_type    = "KEYS_ONLY" -> null
          - read_capacity      = 0 -> null
          - write_capacity     = 0 -> null
        }
      + global_secondary_index {
          + hash_key           = "userId"
          + name               = "userId"
          + non_key_attributes = []
          + projection_type    = "KEYS_ONLY"
          + read_capacity      = 5
          + write_capacity     = 5
        }

        # (4 unchanged blocks hidden)
    }

  # aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4 must be replaced
-/+ resource "aws_ecs_task_definition" "application_ecs_service_ecs-task_461CC9D4" {
      ~ arn                      = "arn:aws:ecs:us-east-1:996905175585:task-definition/AnnotationsAPI-Prod:653" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:996905175585:task-definition/AnnotationsAPI-Prod" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "996905175585.dkr.ecr.us-east-1.amazonaws.com/annotationsapi-prod-app:feecb7d5169a1cbcb2e9811d077e9404729156d4" -> "996905175585.dkr.ecr.us-east-1.amazonaws.com/annotationsapi-prod-app:a7f0a8fb29d5effe0cc64d4b0194ef3307f87202"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name                   = "aws-otel-collector"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "AnnotationsAPI-Prod" -> (known after apply)
      ~ revision                 = 653 -> (known after apply)
        tags                     = {
            "environment" = "Prod"
            "service"     = "AnnotationsAPI"
        }
        # (9 unchanged attributes hidden)
    }

  # aws_iam_policy.application_ecs_service_ecs-iam_ecs-task-role-policy_6FC89FB6 will be updated in-place
  ~ resource "aws_iam_policy" "application_ecs_service_ecs-iam_ecs-task-role-policy_6FC89FB6" {
        id        = "arn:aws:iam::996905175585:policy/AnnotationsAPI-Prod-TaskRolePolicy"
        name      = "AnnotationsAPI-Prod-TaskRolePolicy"
      ~ policy    = jsonencode(
            {
              - Statement = [
                  - {
                      - Action   = [
                          - "dynamodb:UpdateItem",
                          - "dynamodb:Scan",
                          - "dynamodb:Query",
                          - "dynamodb:PutItem",
                          - "dynamodb:Get*",
                          - "dynamodb:DescribeTable",
                          - "dynamodb:Delete*",
                          - "dynamodb:BatchWrite*",
                          - "dynamodb:BatchGet*",
                        ]
                      - Effect   = "Allow"
                      - Resource = [
                          - "arn:aws:dynamodb:us-east-1:996905175585:table/ANNOT-Prod-highlight-notes/*",
                          - "arn:aws:dynamodb:us-east-1:996905175585:table/ANNOT-Prod-highlight-notes",
                        ]
                      - Sid      = ""
                    },
                  - {
                      - Action   = [
                          - "sqs:SendMessageBatch",
                          - "sqs:SendMessage",
                          - "sqs:ReceiveMessage",
                          - "sqs:DeleteMessage",
                        ]
                      - Effect   = "Allow"
                      - Resource = "arn:aws:sqs:us-east-1:996905175585:AnnotationsAPI-Prod-Batch-Delete-Consumer-Queue"
                      - Sid      = ""
                    },
                ]
              - Version   = "2012-10-17"
            }
        ) -> (known after apply)
        tags      = {
            "environment" = "Prod"
            "service"     = "AnnotationsAPI"
        }
        # (4 unchanged attributes hidden)
    }

  # local_file.application_ecs_service_appspec_94386B9C will be created
  + resource "local_file" "application_ecs_service_appspec_94386B9C" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

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

Plan Result (push-server-cdk)
CI link
:warning: Resource Deletion will happen
This plan contains resource delete operation. Please check the plan result very carefully!
Plan: 31 to add, 0 to change, 22 to destroy.

Create

aws_appautoscaling_policy.application_autoscaling_scale_in_policy_BF273511
aws_appautoscaling_policy.application_autoscaling_scale_out_policy_D03900A2
aws_appautoscaling_target.application_autoscaling_autoscaling_target_42BF5C99
aws_cloudwatch_dashboard.application_cloudwatch-dashboard_1F3DC0ED
aws_cloudwatch_log_group.app-log-group
aws_cloudwatch_log_group.aws-otel-collector-log-group
aws_cloudwatch_metric_alarm.application_autoscaling_scale_in_alarm_850BE3A1
aws_cloudwatch_metric_alarm.application_autoscaling_scale_out_alarm_E40FCBA0
aws_ecr_lifecycle_policy.application_ecs_service_ecr-app_ecr-repo-lifecyclepolicy_CCDF75B7
aws_ecr_repository.application_ecs_service_ecr-app_ecr-repo_ABFE17F0
aws_ecs_cluster.application_ecs_cluster_4DC6EFB3
aws_ecs_service.application_ecs_service_ecs-service_A8BAB5F4
aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4
aws_iam_policy.application_ecs_service_ecs-iam_ecs-task-execution-role-policy_2D469A77
aws_iam_policy.application_ecs_service_ecs-iam_ecs-task-role-policy_6FC89FB6
aws_iam_role.application_ecs_service_ecs-iam_ecs-execution-role_FB754BAA
aws_iam_role.application_ecs_service_ecs-iam_ecs-task-role_A72990ED
aws_iam_role_policy_attachment.application_ecs_service_ecs-iam_ecs-task-custom-attachment_F8DDD355
aws_iam_role_policy_attachment.application_ecs_service_ecs-iam_ecs-task-execution-custom-attachment_046B7E2E
aws_iam_role_policy_attachment.application_ecs_service_ecs-iam_ecs-task-execution-default-attachment_99A621FF
aws_security_group.application_ecs_service_ecs_security_group_231C6B1E
aws_sns_topic.pagerduty_alarm-critical-topic_F1534579
aws_sns_topic.pagerduty_alarm-non-critical-topic_53C1A3B3
aws_sns_topic_subscription.pagerduty_alarm-critical-subscription_E2168B84
aws_sns_topic_subscription.pagerduty_alarm-non-critical-subscription_4702677B
pagerduty_service.pagerduty_pagerduty-critical_464EE7CD
pagerduty_service.pagerduty_pagerduty-non-critical_B4CB3938
pagerduty_service_integration.pagerduty_pagerduty_cloudwatch_7956692A-critical_546FC7B5
pagerduty_service_integration.pagerduty_pagerduty_cloudwatch_7956692A-non-critical_EFA67B2C
pagerduty_service_integration.pagerduty_pagerduty_sentry_FFB12B7C-critical_45BF6D23
pagerduty_service_integration.pagerduty_pagerduty_sentry_FFB12B7C-non-critical_B7B95197

Delete

aws_appautoscaling_policy.service_scale_in_policy
aws_appautoscaling_policy.service_scale_out_policy
aws_appautoscaling_target.service_autoscaling_target
aws_cloudwatch_log_group.config
aws_cloudwatch_log_group.push
aws_cloudwatch_metric_alarm.service_scale_in_alarm
aws_cloudwatch_metric_alarm.service_scale_out_alarm
aws_ecs_cluster.ecs-cluster
aws_ecs_service.push
aws_ecs_task_definition.push
aws_security_group.ecs_security_group
aws_sns_topic.alarm_critical
aws_sns_topic.alarm_non_critical
aws_sns_topic_subscription.infrastructure_alarm_critical
aws_sns_topic_subscription.infrastructure_alarm_non_critical
null_resource.update-service
pagerduty_service.critical
pagerduty_service.non_critical
pagerduty_service_integration.cloudwatch_critical
pagerduty_service_integration.cloudwatch_non_critical
pagerduty_service_integration.sentry
random_id.service_name

Change Result (Click me)

  # aws_appautoscaling_policy.application_autoscaling_scale_in_policy_BF273511 will be created
  + resource "aws_appautoscaling_policy" "application_autoscaling_scale_in_policy_BF273511" {
      + alarm_arns         = (known after apply)
      + arn                = (known after apply)
      + id                 = (known after apply)
      + name               = "Push-Prod-ScaleInPolicy"
      + policy_type        = "StepScaling"
      + resource_id        = "service/Push-Prod/Push-Prod"
      + scalable_dimension = "ecs:service:DesiredCount"
      + service_namespace  = "ecs"

      + step_scaling_policy_configuration {
          + adjustment_type         = "ChangeInCapacity"
          + cooldown                = 60
          + metric_aggregation_type = "Average"

          + step_adjustment {
              + metric_interval_upper_bound = "0"
              + scaling_adjustment          = -1
            }
        }
    }

  # aws_appautoscaling_policy.application_autoscaling_scale_out_policy_D03900A2 will be created
  + resource "aws_appautoscaling_policy" "application_autoscaling_scale_out_policy_D03900A2" {
      + alarm_arns         = (known after apply)
      + arn                = (known after apply)
      + id                 = (known after apply)
      + name               = "Push-Prod-ScaleOutPolicy"
      + policy_type        = "StepScaling"
      + resource_id        = "service/Push-Prod/Push-Prod"
      + scalable_dimension = "ecs:service:DesiredCount"
      + service_namespace  = "ecs"

      + step_scaling_policy_configuration {
          + adjustment_type         = "ChangeInCapacity"
          + cooldown                = 60
          + metric_aggregation_type = "Average"

          + step_adjustment {
              + metric_interval_lower_bound = "0"
              + scaling_adjustment          = 2
            }
        }
    }

  # aws_appautoscaling_policy.service_scale_in_policy will be destroyed
  # (because aws_appautoscaling_policy.service_scale_in_policy is not in configuration)
  - resource "aws_appautoscaling_policy" "service_scale_in_policy" {
      - alarm_arns         = [
          - "arn:aws:cloudwatch:us-east-1:996905175585:alarm:Push Service Queue Size Reduced",
        ] -> null
      - arn                = "arn:aws:autoscaling:us-east-1:996905175585:scalingPolicy:4a2191f2-6ef9-453f-b4fe-48ba8917abc7:resource/ecs/service/Push-Prod/PushNotifications6912ccdb32711a4b:policyName/ScaleInPolicy" -> null
      - id                 = "ScaleInPolicy" -> null
      - name               = "ScaleInPolicy" -> null
      - policy_type        = "StepScaling" -> null
      - resource_id        = "service/Push-Prod/PushNotifications6912ccdb32711a4b" -> null
      - scalable_dimension = "ecs:service:DesiredCount" -> null
      - service_namespace  = "ecs" -> null

      - step_scaling_policy_configuration {
          - adjustment_type          = "ChangeInCapacity" -> null
          - cooldown                 = 60 -> null
          - metric_aggregation_type  = "Average" -> null
          - min_adjustment_magnitude = 0 -> null

          - step_adjustment {
              - metric_interval_upper_bound = "0" -> null
              - scaling_adjustment          = -1 -> null
            }
        }
    }

  # aws_appautoscaling_policy.service_scale_out_policy will be destroyed
  # (because aws_appautoscaling_policy.service_scale_out_policy is not in configuration)
  - resource "aws_appautoscaling_policy" "service_scale_out_policy" {
      - alarm_arns         = [
          - "arn:aws:cloudwatch:us-east-1:996905175585:alarm:Push Service Queue Size Exceeded",
        ] -> null
      - arn                = "arn:aws:autoscaling:us-east-1:996905175585:scalingPolicy:4a2191f2-6ef9-453f-b4fe-48ba8917abc7:resource/ecs/service/Push-Prod/PushNotifications6912ccdb32711a4b:policyName/ScaleOutPolicy" -> null
      - id                 = "ScaleOutPolicy" -> null
      - name               = "ScaleOutPolicy" -> null
      - policy_type        = "StepScaling" -> null
      - resource_id        = "service/Push-Prod/PushNotifications6912ccdb32711a4b" -> null
      - scalable_dimension = "ecs:service:DesiredCount" -> null
      - service_namespace  = "ecs" -> null

      - step_scaling_policy_configuration {
          - adjustment_type          = "ChangeInCapacity" -> null
          - cooldown                 = 600 -> null
          - metric_aggregation_type  = "Average" -> null
          - min_adjustment_magnitude = 0 -> null

          - step_adjustment {
              - metric_interval_lower_bound = "0" -> null
              - scaling_adjustment          = 2 -> null
            }
        }
    }

  # aws_appautoscaling_target.application_autoscaling_autoscaling_target_42BF5C99 will be created
  + resource "aws_appautoscaling_target" "application_autoscaling_autoscaling_target_42BF5C99" {
      + arn                = (known after apply)
      + id                 = (known after apply)
      + max_capacity       = 10
      + min_capacity       = 2
      + resource_id        = "service/Push-Prod/Push-Prod"
      + role_arn           = (known after apply)
      + scalable_dimension = "ecs:service:DesiredCount"
      + service_namespace  = "ecs"
      + tags_all           = (known after apply)
    }

  # aws_appautoscaling_target.service_autoscaling_target will be destroyed
  # (because aws_appautoscaling_target.service_autoscaling_target is not in configuration)
  - resource "aws_appautoscaling_target" "service_autoscaling_target" {
      - arn                = "arn:aws:application-autoscaling:us-east-1:996905175585:scalable-target/0ec54a2191f26ef9453fb4fe48ba8917abc7" -> null
      - id                 = "service/Push-Prod/PushNotifications6912ccdb32711a4b" -> null
      - max_capacity       = 10 -> null
      - min_capacity       = 1 -> null
      - resource_id        = "service/Push-Prod/PushNotifications6912ccdb32711a4b" -> null
      - role_arn           = "arn:aws:iam::996905175585:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService" -> null
      - scalable_dimension = "ecs:service:DesiredCount" -> null
      - service_namespace  = "ecs" -> null
      - tags               = {} -> null
      - tags_all           = {} -> null
    }

  # aws_cloudwatch_dashboard.application_cloudwatch-dashboard_1F3DC0ED will be created
  + resource "aws_cloudwatch_dashboard" "application_cloudwatch-dashboard_1F3DC0ED" {
      + dashboard_arn  = (known after apply)
      + dashboard_body = jsonencode(
            {
              + widgets = [
                  + {
                      + height     = 6
                      + properties = {
                          + annotations = {
                              + horizontal = [
                                  + {
                                      + color = "#e377c2"
                                      + label = "CPU scale out"
                                      + value = 45
                                    },
                                  + {
                                      + color = "#c5b0d5"
                                      + label = "CPU scale in"
                                      + value = 30
                                    },
                                ]
                            }
                          + metrics     = [
                              + [
                                  + "ECS/ContainerInsights",
                                  + "RunningTaskCount",
                                  + "ServiceName",
                                  + "Push-Prod",
                                  + "ClusterName",
                                  + "Push-Prod",
                                  + {
                                      + color = "#c49c94"
                                      + yAxis = "right"
                                    },
                                ],
                              + [
                                  + "AWS/ECS",
                                  + "CPUUtilization",
                                  + ".",
                                  + ".",
                                  + ".",
                                  + ".",
                                  + {
                                      + color = "#f7b6d2"
                                    },
                                ],
                              + [
                                  + ".",
                                  + "MemoryUtilization",
                                  + ".",
                                  + ".",
                                  + ".",
                                  + ".",
                                  + {
                                      + color = "#c7c7c7"
                                    },
                                ],
                            ]
                          + period      = 60
                          + region      = "us-east-1"
                          + stacked     = false
                          + stat        = "Average"
                          + title       = "Service Load"
                          + view        = "timeSeries"
                        }
                      + type       = "metric"
                      + width      = 12
                      + x          = 0
                      + y          = 6
                    },
                ]
            }
        )
      + dashboard_name = "Push-Prod"
      + id             = (known after apply)
    }

  # aws_cloudwatch_log_group.app-log-group will be created
  + resource "aws_cloudwatch_log_group" "app-log-group" {
      + arn               = (known after apply)
      + id                = (known after apply)
      + log_group_class   = (known after apply)
      + name              = "/Backend/Push-Prod/ecs/app"
      + name_prefix       = (known after apply)
      + retention_in_days = 90
      + skip_destroy      = true
      + tags              = {
          + "environment" = "Prod"
          + "service"     = "Push"
        }
      + tags_all          = {
          + "environment" = "Prod"
          + "service"     = "Push"
        }
    }

  # aws_cloudwatch_log_group.aws-otel-collector-log-group will be created
  + resource "aws_cloudwatch_log_group" "aws-otel-collector-log-group" {
      + arn               = (known after apply)
      + id                = (known after apply)
      + log_group_class   = (known after apply)
      + name              = "/Backend/Push-Prod/ecs/aws-otel-collector"
      + name_prefix       = (known after apply)
      + retention_in_days = 90
      + skip_destroy      = true
      + tags              = {
          + "environment" = "Prod"
          + "service"     = "Push"
        }
      + tags_all          = {
          + "environment" = "Prod"
          + "service"     = "Push"
        }
    }

  # aws_cloudwatch_log_group.config will be destroyed
  # (because aws_cloudwatch_log_group.config is not in configuration)
  - resource "aws_cloudwatch_log_group" "config" {
      - arn               = "arn:aws:logs:us-east-1:996905175585:log-group:/ecs/Push/Prod/config" -> null
      - id                = "/ecs/Push/Prod/config" -> null
      - log_group_class   = "STANDARD" -> null
      - name              = "/ecs/Push/Prod/config" -> null
      - retention_in_days = 30 -> null
      - skip_destroy      = false -> null
      - tags              = {
          - "environment" = "Prod"
          - "service"     = "Push"
        } -> null
      - tags_all          = {
          - "environment" = "Prod"
          - "service"     = "Push"
        } -> null
    }

  # aws_cloudwatch_log_group.push will be destroyed
  # (because aws_cloudwatch_log_group.push is not in configuration)
  - resource "aws_cloudwatch_log_group" "push" {
      - arn               = "arn:aws:logs:us-east-1:996905175585:log-group:/ecs/Push/Prod/push" -> null
      - id                = "/ecs/Push/Prod/push" -> null
      - log_group_class   = "STANDARD" -> null
      - name              = "/ecs/Push/Prod/push" -> null
      - retention_in_days = 30 -> null
      - skip_destroy      = false -> null
      - tags              = {
          - "environment" = "Prod"
          - "service"     = "Push"
        } -> null
      - tags_all          = {
          - "environment" = "Prod"
          - "service"     = "Push"
        } -> null
    }

  # aws_cloudwatch_metric_alarm.application_autoscaling_scale_in_alarm_850BE3A1 will be created
  + resource "aws_cloudwatch_metric_alarm" "application_autoscaling_scale_in_alarm_850BE3A1" {
      + actions_enabled                       = true
      + alarm_actions                         = (known after apply)
      + alarm_description                     = "Alarm to reduce capacity if container CPU is low"
      + alarm_name                            = "Push-Prod Service Low CPU"
      + arn                                   = (known after apply)
      + comparison_operator                   = "LessThanThreshold"
      + dimensions                            = {
          + "ClusterName" = "Push-Prod"
          + "ServiceName" = "Push-Prod"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 2
      + id                                    = (known after apply)
      + metric_name                           = "CPUUtilization"
      + namespace                             = "AWS/ECS"
      + period                                = 60
      + statistic                             = "Average"
      + tags                                  = {
          + "environment" = "Prod"
          + "service"     = "Push"
        }
      + tags_all                              = {
          + "environment" = "Prod"
          + "service"     = "Push"
        }
      + threshold                             = 30
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.application_autoscaling_scale_out_alarm_E40FCBA0 will be created
  + resource "aws_cloudwatch_metric_alarm" "application_autoscaling_scale_out_alarm_E40FCBA0" {
      + actions_enabled                       = true
      + alarm_actions                         = (known after apply)
      + alarm_description                     = "Alarm to add capacity if container CPU is high"
      + alarm_name                            = "Push-Prod Service High CPU"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanThreshold"
      + dimensions                            = {
          + "ClusterName" = "Push-Prod"
          + "ServiceName" = "Push-Prod"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 2
      + id                                    = (known after apply)
      + metric_name                           = "CPUUtilization"
      + namespace                             = "AWS/ECS"
      + period                                = 60
      + statistic                             = "Average"
      + tags                                  = {
          + "environment" = "Prod"
          + "service"     = "Push"
        }
      + tags_all                              = {
          + "environment" = "Prod"
          + "service"     = "Push"
        }
      + threshold                             = 45
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.service_scale_in_alarm will be destroyed
  # (because aws_cloudwatch_metric_alarm.service_scale_in_alarm is not in configuration)
  - resource "aws_cloudwatch_metric_alarm" "service_scale_in_alarm" {
      - actions_enabled           = true -> null
      - alarm_actions             = [
          - "arn:aws:autoscaling:us-east-1:996905175585:scalingPolicy:4a2191f2-6ef9-453f-b4fe-48ba8917abc7:resource/ecs/service/Push-Prod/PushNotifications6912ccdb32711a4b:policyName/ScaleInPolicy",
        ] -> null
      - alarm_description         = "Only a few messages are in the queue" -> null
      - alarm_name                = "Push Service Queue Size Reduced" -> null
      - arn                       = "arn:aws:cloudwatch:us-east-1:996905175585:alarm:Push Service Queue Size Reduced" -> null
      - comparison_operator       = "LessThanThreshold" -> null
      - datapoints_to_alarm       = 0 -> null
      - dimensions                = {
          - "QueueName" = "pocket-push-queue"
        } -> null
      - evaluation_periods        = 2 -> null
      - id                        = "Push Service Queue Size Reduced" -> null
      - insufficient_data_actions = [] -> null
      - metric_name               = "ApproximateNumberOfMessagesVisible" -> null
      - namespace                 = "AWS/SQS" -> null
      - ok_actions                = [] -> null
      - period                    = 60 -> null
      - statistic                 = "Sum" -> null
      - tags                      = {} -> null
      - tags_all                  = {} -> null
      - threshold                 = 100 -> null
      - treat_missing_data        = "notBreaching" -> null
    }

  # aws_cloudwatch_metric_alarm.service_scale_out_alarm will be destroyed
  # (because aws_cloudwatch_metric_alarm.service_scale_out_alarm is not in configuration)
  - resource "aws_cloudwatch_metric_alarm" "service_scale_out_alarm" {
      - actions_enabled           = true -> null
      - alarm_actions             = [
          - "arn:aws:autoscaling:us-east-1:996905175585:scalingPolicy:4a2191f2-6ef9-453f-b4fe-48ba8917abc7:resource/ecs/service/Push-Prod/PushNotifications6912ccdb32711a4b:policyName/ScaleOutPolicy",
        ] -> null
      - alarm_description         = "Too many messages pending in the queue" -> null
      - alarm_name                = "Push Service Queue Size Exceeded" -> null
      - arn                       = "arn:aws:cloudwatch:us-east-1:996905175585:alarm:Push Service Queue Size Exceeded" -> null
      - comparison_operator       = "GreaterThanThreshold" -> null
      - datapoints_to_alarm       = 0 -> null
      - dimensions                = {
          - "QueueName" = "pocket-push-queue"
        } -> null
      - evaluation_periods        = 2 -> null
      - id                        = "Push Service Queue Size Exceeded" -> null
      - insufficient_data_actions = [] -> null
      - metric_name               = "ApproximateNumberOfMessagesVisible" -> null
      - namespace                 = "AWS/SQS" -> null
      - ok_actions                = [] -> null
      - period                    = 60 -> null
      - statistic                 = "Sum" -> null
      - tags                      = {} -> null
      - tags_all                  = {} -> null
      - threshold                 = 1000 -> null
      - treat_missing_data        = "notBreaching" -> null
    }

  # aws_ecr_lifecycle_policy.application_ecs_service_ecr-app_ecr-repo-lifecyclepolicy_CCDF75B7 will be created
  + resource "aws_ecr_lifecycle_policy" "application_ecs_service_ecr-app_ecr-repo-lifecyclepolicy_CCDF75B7" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "expire old images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 800
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "push-prod-app"
    }

  # aws_ecr_repository.application_ecs_se

# ...
# ... The maximum length of GitHub Comment is 65536, so the content is omitted by tfcmt.
# ...

                    }
                      - Effect    = "Allow"
                      - Principal = {
                          - AWS = "*"
                        }
                      - Resource  = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmCritical"
                      - Sid       = "__default_statement_ID"
                    },
                ]
              - Version   = "2008-10-17"
            }
        ) -> null
      - signature_version                        = 0 -> null
      - sqs_success_feedback_sample_rate         = 0 -> null
      - tags                                     = {
          - "environment" = "Prod"
          - "service"     = "Push"
        } -> null
      - tags_all                                 = {
          - "environment" = "Prod"
          - "service"     = "Push"
        } -> null
    }

  # aws_sns_topic.alarm_non_critical will be destroyed
  # (because aws_sns_topic.alarm_non_critical is not in configuration)
  - resource "aws_sns_topic" "alarm_non_critical" {
      - application_success_feedback_sample_rate = 0 -> null
      - arn                                      = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmNonCritical" -> null
      - content_based_deduplication              = false -> null
      - fifo_topic                               = false -> null
      - firehose_success_feedback_sample_rate    = 0 -> null
      - http_success_feedback_sample_rate        = 0 -> null
      - id                                       = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmNonCritical" -> null
      - lambda_success_feedback_sample_rate      = 0 -> null
      - name                                     = "Push-Prod-InfrastructureAlarmNonCritical" -> null
      - owner                                    = "996905175585" -> null
      - policy                                   = jsonencode(
            {
              - Id        = "__default_policy_ID"
              - Statement = [
                  - {
                      - Action    = [
                          - "SNS:GetTopicAttributes",
                          - "SNS:SetTopicAttributes",
                          - "SNS:AddPermission",
                          - "SNS:RemovePermission",
                          - "SNS:DeleteTopic",
                          - "SNS:Subscribe",
                          - "SNS:ListSubscriptionsByTopic",
                          - "SNS:Publish",
                          - "SNS:Receive",
                        ]
                      - Condition = {
                          - StringEquals = {
                              - "AWS:SourceOwner" = "996905175585"
                            }
                        }
                      - Effect    = "Allow"
                      - Principal = {
                          - AWS = "*"
                        }
                      - Resource  = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmNonCritical"
                      - Sid       = "__default_statement_ID"
                    },
                ]
              - Version   = "2008-10-17"
            }
        ) -> null
      - signature_version                        = 0 -> null
      - sqs_success_feedback_sample_rate         = 0 -> null
      - tags                                     = {
          - "environment" = "Prod"
          - "service"     = "Push"
        } -> null
      - tags_all                                 = {
          - "environment" = "Prod"
          - "service"     = "Push"
        } -> null
    }

  # aws_sns_topic.pagerduty_alarm-critical-topic_F1534579 will be created
  + resource "aws_sns_topic" "pagerduty_alarm-critical-topic_F1534579" {
      + arn                         = (known after apply)
      + beginning_archive_time      = (known after apply)
      + content_based_deduplication = false
      + fifo_topic                  = false
      + id                          = (known after apply)
      + name                        = "Push-Prod-Infrastructure-Alarm-Critical"
      + name_prefix                 = (known after apply)
      + owner                       = (known after apply)
      + policy                      = (known after apply)
      + signature_version           = (known after apply)
      + tags_all                    = (known after apply)
      + tracing_config              = (known after apply)
    }

  # aws_sns_topic.pagerduty_alarm-non-critical-topic_53C1A3B3 will be created
  + resource "aws_sns_topic" "pagerduty_alarm-non-critical-topic_53C1A3B3" {
      + arn                         = (known after apply)
      + beginning_archive_time      = (known after apply)
      + content_based_deduplication = false
      + fifo_topic                  = false
      + id                          = (known after apply)
      + name                        = "Push-Prod-Infrastructure-Alarm-Non-Critical"
      + name_prefix                 = (known after apply)
      + owner                       = (known after apply)
      + policy                      = (known after apply)
      + signature_version           = (known after apply)
      + tags_all                    = (known after apply)
      + tracing_config              = (known after apply)
    }

  # aws_sns_topic_subscription.infrastructure_alarm_critical will be destroyed
  # (because aws_sns_topic_subscription.infrastructure_alarm_critical is not in configuration)
  - resource "aws_sns_topic_subscription" "infrastructure_alarm_critical" {
      - arn                             = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmCritical:0482da6d-2829-441b-907e-470f919546d1" -> null
      - confirmation_timeout_in_minutes = 2 -> null
      - confirmation_was_authenticated  = false -> null
      - endpoint                        = "https://events.pagerduty.com/integration/b66d9a0bd9424600d0e71920177f82f5/enqueue" -> null
      - endpoint_auto_confirms          = true -> null
      - id                              = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmCritical:0482da6d-2829-441b-907e-470f919546d1" -> null
      - owner_id                        = "996905175585" -> null
      - pending_confirmation            = false -> null
      - protocol                        = "https" -> null
      - raw_message_delivery            = false -> null
      - topic_arn                       = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmCritical" -> null
    }

  # aws_sns_topic_subscription.infrastructure_alarm_non_critical will be destroyed
  # (because aws_sns_topic_subscription.infrastructure_alarm_non_critical is not in configuration)
  - resource "aws_sns_topic_subscription" "infrastructure_alarm_non_critical" {
      - arn                             = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmNonCritical:a310d8a5-7daf-45bc-aec1-9ce9ec584b9b" -> null
      - confirmation_timeout_in_minutes = 2 -> null
      - confirmation_was_authenticated  = false -> null
      - endpoint                        = "https://events.pagerduty.com/integration/081e53c68ee24201c0274f189a32b7dc/enqueue" -> null
      - endpoint_auto_confirms          = true -> null
      - id                              = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmNonCritical:a310d8a5-7daf-45bc-aec1-9ce9ec584b9b" -> null
      - owner_id                        = "996905175585" -> null
      - pending_confirmation            = false -> null
      - protocol                        = "https" -> null
      - raw_message_delivery            = false -> null
      - topic_arn                       = "arn:aws:sns:us-east-1:996905175585:Push-Prod-InfrastructureAlarmNonCritical" -> null
    }

  # aws_sns_topic_subscription.pagerduty_alarm-critical-subscription_E2168B84 will be created
  + resource "aws_sns_topic_subscription" "pagerduty_alarm-critical-subscription_E2168B84" {
      + arn                             = (known after apply)
      + confirmation_timeout_in_minutes = 2
      + confirmation_was_authenticated  = (known after apply)
      + endpoint                        = (known after apply)
      + endpoint_auto_confirms          = true
      + filter_policy_scope             = (known after apply)
      + id                              = (known after apply)
      + owner_id                        = (known after apply)
      + pending_confirmation            = (known after apply)
      + protocol                        = "https"
      + raw_message_delivery            = false
      + topic_arn                       = (known after apply)
    }

  # aws_sns_topic_subscription.pagerduty_alarm-non-critical-subscription_4702677B will be created
  + resource "aws_sns_topic_subscription" "pagerduty_alarm-non-critical-subscription_4702677B" {
      + arn                             = (known after apply)
      + confirmation_timeout_in_minutes = 2
      + confirmation_was_authenticated  = (known after apply)
      + endpoint                        = (known after apply)
      + endpoint_auto_confirms          = true
      + filter_policy_scope             = (known after apply)
      + id                              = (known after apply)
      + owner_id                        = (known after apply)
      + pending_confirmation            = (known after apply)
      + protocol                        = "https"
      + raw_message_delivery            = false
      + topic_arn                       = (known after apply)
    }

  # null_resource.update-service will be destroyed
  # (because null_resource.update-service is not in configuration)
  - resource "null_resource" "update-service" {
      - id       = "671702548441364657" -> null
      - triggers = {
          - "arn" = "arn:aws:ecs:us-east-1:996905175585:service/Push-Prod/PushNotifications6912ccdb32711a4b"
        } -> null
    }

  # pagerduty_service.critical will be destroyed
  # (because pagerduty_service.critical is not in configuration)
  - resource "pagerduty_service" "critical" {
      - acknowledgement_timeout = "600" -> null
      - alert_creation          = "create_incidents" -> null
      - alert_grouping_timeout  = "null" -> null
      - auto_resolve_timeout    = "14400" -> null
      - created_at              = "2023-08-18T07:58:11-07:00" -> null
      - description             = "Managed by Terraform" -> null
      - escalation_policy       = "PQ2EUPZ" -> null
      - html_url                = "https://mozilla.pagerduty.com/service-directory/PBS7YII" -> null
      - id                      = "PBS7YII" -> null
      - name                    = "Push-Prod-Critical" -> null
      - status                  = "active" -> null
      - type                    = "service" -> null

      - alert_grouping_parameters {
        }

      - incident_urgency_rule {
          - type    = "constant" -> null
          - urgency = "high" -> null
        }
    }

  # pagerduty_service.non_critical will be destroyed
  # (because pagerduty_service.non_critical is not in configuration)
  - resource "pagerduty_service" "non_critical" {
      - acknowledgement_timeout = "600" -> null
      - alert_creation          = "create_incidents" -> null
      - alert_grouping_timeout  = "null" -> null
      - auto_resolve_timeout    = "14400" -> null
      - created_at              = "2023-08-18T07:58:11-07:00" -> null
      - description             = "Managed by Terraform" -> null
      - escalation_policy       = "PXOQVEP" -> null
      - html_url                = "https://mozilla.pagerduty.com/service-directory/PF1VZY8" -> null
      - id                      = "PF1VZY8" -> null
      - name                    = "Push-Prod-Non-Critical" -> null
      - status                  = "active" -> null
      - type                    = "service" -> null

      - alert_grouping_parameters {
        }

      - incident_urgency_rule {
          - type    = "constant" -> null
          - urgency = "low" -> null
        }
    }

  # pagerduty_service.pagerduty_pagerduty-critical_464EE7CD will be created
  + resource "pagerduty_service" "pagerduty_pagerduty-critical_464EE7CD" {
      + acknowledgement_timeout = "1800"
      + alert_creation          = "create_incidents"
      + alert_grouping          = (known after apply)
      + alert_grouping_timeout  = (known after apply)
      + auto_resolve_timeout    = "14400"
      + created_at              = (known after apply)
      + description             = "PagerDuty Critical"
      + escalation_policy       = "PXOQVEP"
      + html_url                = (known after apply)
      + id                      = (known after apply)
      + last_incident_timestamp = (known after apply)
      + name                    = "Push-Prod-PagerDuty-Critical"
      + response_play           = (known after apply)
      + status                  = (known after apply)
      + type                    = (known after apply)

      + incident_urgency_rule {
          + type    = "constant"
          + urgency = "high"
        }
    }

  # pagerduty_service.pagerduty_pagerduty-non-critical_B4CB3938 will be created
  + resource "pagerduty_service" "pagerduty_pagerduty-non-critical_B4CB3938" {
      + acknowledgement_timeout = "1800"
      + alert_creation          = "create_incidents"
      + alert_grouping          = (known after apply)
      + alert_grouping_timeout  = (known after apply)
      + auto_resolve_timeout    = "14400"
      + created_at              = (known after apply)
      + description             = "PagerDuty Non-Critical"
      + escalation_policy       = "PXOQVEP"
      + html_url                = (known after apply)
      + id                      = (known after apply)
      + last_incident_timestamp = (known after apply)
      + name                    = "Push-Prod-PagerDuty-Non-Critical"
      + response_play           = (known after apply)
      + status                  = (known after apply)
      + type                    = (known after apply)

      + incident_urgency_rule {
          + type    = "constant"
          + urgency = "low"
        }
    }

  # pagerduty_service_integration.cloudwatch_critical will be destroyed
  # (because pagerduty_service_integration.cloudwatch_critical is not in configuration)
  - resource "pagerduty_service_integration" "cloudwatch_critical" {
      - html_url        = "https://mozilla.pagerduty.com/services/PBS7YII/integrations/PH4A9UJ" -> null
      - id              = "PH4A9UJ" -> null
      - integration_key = "b66d9a0bd9424600d0e71920177f82f5" -> null
      - name            = "Amazon CloudWatch" -> null
      - service         = "PBS7YII" -> null
      - type            = "event_transformer_api_inbound_integration" -> null
      - vendor          = "PZQ6AUS" -> null
    }

  # pagerduty_service_integration.cloudwatch_non_critical will be destroyed
  # (because pagerduty_service_integration.cloudwatch_non_critical is not in configuration)
  - resource "pagerduty_service_integration" "cloudwatch_non_critical" {
      - html_url        = "https://mozilla.pagerduty.com/services/PF1VZY8/integrations/P1HC9K2" -> null
      - id              = "P1HC9K2" -> null
      - integration_key = "081e53c68ee24201c0274f189a32b7dc" -> null
      - name            = "Amazon CloudWatch" -> null
      - service         = "PF1VZY8" -> null
      - type            = "event_transformer_api_inbound_integration" -> null
      - vendor          = "PZQ6AUS" -> null
    }

  # pagerduty_service_integration.pagerduty_pagerduty_cloudwatch_7956692A-critical_546FC7B5 will be created
  + resource "pagerduty_service_integration" "pagerduty_pagerduty_cloudwatch_7956692A-critical_546FC7B5" {
      + email_filter_mode       = (known after apply)
      + email_incident_creation = (known after apply)
      + email_parsing_fallback  = (known after apply)
      + html_url                = (known after apply)
      + id                      = (known after apply)
      + integration_email       = (known after apply)
      + integration_key         = (known after apply)
      + name                    = "Amazon CloudWatch"
      + service                 = (known after apply)
      + type                    = (known after apply)
      + vendor                  = "PZQ6AUS"
    }

  # pagerduty_service_integration.pagerduty_pagerduty_cloudwatch_7956692A-non-critical_EFA67B2C will be created
  + resource "pagerduty_service_integration" "pagerduty_pagerduty_cloudwatch_7956692A-non-critical_EFA67B2C" {
      + email_filter_mode       = (known after apply)
      + email_incident_creation = (known after apply)
      + email_parsing_fallback  = (known after apply)
      + html_url                = (known after apply)
      + id                      = (known after apply)
      + integration_email       = (known after apply)
      + integration_key         = (known after apply)
      + name                    = "Amazon CloudWatch"
      + service                 = (known after apply)
      + type                    = (known after apply)
      + vendor                  = "PZQ6AUS"
    }

  # pagerduty_service_integration.pagerduty_pagerduty_sentry_FFB12B7C-critical_45BF6D23 will be created
  + resource "pagerduty_service_integration" "pagerduty_pagerduty_sentry_FFB12B7C-critical_45BF6D23" {
      + email_filter_mode       = (known after apply)
      + email_incident_creation = (known after apply)
      + email_parsing_fallback  = (known after apply)
      + html_url                = (known after apply)
      + id                      = (known after apply)
      + integration_email       = (known after apply)
      + integration_key         = (known after apply)
      + name                    = "Sentry"
      + service                 = (known after apply)
      + type                    = (known after apply)
      + vendor                  = "PKAPG94"
    }

  # pagerduty_service_integration.pagerduty_pagerduty_sentry_FFB12B7C-non-critical_B7B95197 will be created
  + resource "pagerduty_service_integration" "pagerduty_pagerduty_sentry_FFB12B7C-non-critical_B7B95197" {
      + email_filter_mode       = (known after apply)
      + email_incident_creation = (known after apply)
      + email_parsing_fallback  = (known after apply)
      + html_url                = (known after apply)
      + id                      = (known after apply)
      + integration_email       = (known after apply)
      + integration_key         = (known after apply)
      + name                    = "Sentry"
      + service                 = (known after apply)
      + type                    = (known after apply)
      + vendor                  = "PKAPG94"
    }

  # pagerduty_service_integration.sentry will be destroyed
  # (because pagerduty_service_integration.sentry is not in configuration)
  - resource "pagerduty_service_integration" "sentry" {
      - html_url        = "https://mozilla.pagerduty.com/services/PF1VZY8/integrations/PKDLN79" -> null
      - id              = "PKDLN79" -> null
      - integration_key = "7e359dd8c3c44306d03ce98dc49177a2" -> null
      - name            = "Sentry" -> null
      - service         = "PF1VZY8" -> null
      - type            = "app_event_transform_inbound_integration" -> null
      - vendor          = "PKAPG94" -> null
    }

  # random_id.service_name will be destroyed
  # (because random_id.service_name is not in configuration)
  - resource "random_id" "service_name" {
      - b64_std     = "PushNotificationsaRLM2zJxGks=" -> null
      - b64_url     = "PushNotificationsaRLM2zJxGks" -> null
      - byte_length = 8 -> null
      - dec         = "PushNotifications7571339165379402315" -> null
      - hex         = "PushNotifications6912ccdb32711a4b" -> null
      - id          = "aRLM2zJxGks" -> null
      - keepers     = {
          - "version" = "v3"
        } -> null
      - prefix      = "PushNotifications" -> null
    }

Plan: 31 to add, 0 to change, 22 to destroy.

:white_check_mark: Apply Succeeded (shared-snowplow-consumer-cdk-dev)
CI link
Apply complete! Resources: 2 added, 0 changed, 1 destroyed.
 Resource actions are indicated with the following symbols:
  + create
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_ecs_task_definition.shared-snowplow-consumer-app_application_ecs_service_ecs-task_6958091B must be replaced
-/+ resource "aws_ecs_task_definition" "shared-snowplow-consumer-app_application_ecs_service_ecs-task_6958091B" {
      ~ arn                      = "arn:aws:ecs:us-east-1:410318598490:task-definition/SharedSnowplowConsumer-Dev:99" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:410318598490:task-definition/SharedSnowplowConsumer-Dev" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "410318598490.dkr.ecr.us-east-1.amazonaws.com/sharedsnowplowconsumer-dev-app:83567fe699c04e751e5ef42ca5f8f8a3d8c6e35e" -> "410318598490.dkr.ecr.us-east-1.amazonaws.com/sharedsnowplowconsumer-dev-app:f7b4c25cfc24900d37bc3c93a6da8a3bbc79d9be"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name                   = "aws-otel-collector"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "SharedSnowplowConsumer-Dev" -> (known after apply)
      ~ revision                 = 99 -> (known after apply)
        tags                     = {
            "environment" = "Dev"
            "service"     = "SharedSnowplowConsumer"
        }
        # (9 unchanged attributes hidden)
    }

  # local_file.shared-snowplow-consumer-app_application_ecs_service_appspec_7674CFF9 will be created
  + resource "local_file" "shared-snowplow-consumer-app_application_ecs_service_appspec_7674CFF9" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

Plan: 2 to add, 0 to change, 1 to destroy.
aws_ecs_task_definition.shared-snowplow-consumer-app_application_ecs_service_ecs-task_6958091B: Destroying... [id=SharedSnowplowConsumer-Dev]
aws_ecs_task_definition.shared-snowplow-consumer-app_application_ecs_service_ecs-task_6958091B: Destruction complete after 0s
aws_ecs_task_definition.shared-snowplow-consumer-app_application_ecs_service_ecs-task_6958091B: Creating...
aws_ecs_task_definition.shared-snowplow-consumer-app_application_ecs_service_ecs-task_6958091B: Creation complete after 0s [id=SharedSnowplowConsumer-Dev]
local_file.shared-snowplow-consumer-app_application_ecs_service_appspec_7674CFF9: Creating...
local_file.shared-snowplow-consumer-app_application_ecs_service_appspec_7674CFF9: Creation complete after 0s [id=2051f4e90f668e166cfefb93193340bc389ce5a0]

Apply complete! Resources: 2 added, 0 changed, 1 destroyed.

:white_check_mark: Apply Succeeded (user-list-search-cdk-dev)
CI link
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
 Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # local_file.appspec will be created
  + resource "local_file" "appspec" {
      + content              = jsonencode(
            {
              + Resources = [
                  + {
                      + TargetService = {
                          + Properties = {
                              + LoadBalancerInfo = {
                                  + ContainerName = "node"
                                  + ContainerPort = 4000
                                }
                              + TaskDefinition   = "arn:aws:ecs:us-east-1:410318598490:task-definition/UserListSearch-Dev-Apollo:97"
                            }
                          + Type       = "AWS::ECS::Service"
                        }
                    },
                ]
              + version   = 1
            }
        )
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.
local_file.appspec: Creating...
local_file.appspec: Creation complete after 0s [id=894297f73b7683c51231c76fcfd5c89f11203f72]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

workspace = "UserListSearch-Dev"

:white_check_mark: Apply Succeeded (account-delete-monitor-cdk-dev)
CI link
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
 Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_lambda_function.eventtracker_lambda_2D56166D will be updated in-place
  ~ resource "aws_lambda_function" "eventtracker_lambda_2D56166D" {
        id                             = "AccountDeleteMonitor-Dev-EventTracker-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:410318598490:function:AccountDeleteMonitor-Dev-EventTracker-Function:101" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:410318598490:function:AccountDeleteMonitor-Dev-EventTracker-Function:101/invocations" -> (known after apply)
        tags                           = {
            "environment" = "Dev"
            "service"     = "AccountDeleteMonitor"
        }
      ~ version                        = "101" -> (known after apply)
        # (19 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "GIT_SHA"              = (sensitive value)
                # (4 unchanged elements hidden)
            }
        }

        # (4 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.
aws_lambda_function.eventtracker_lambda_2D56166D: Modifying... [id=AccountDeleteMonitor-Dev-EventTracker-Function]
aws_lambda_function.eventtracker_lambda_2D56166D: Modifications complete after 6s [id=AccountDeleteMonitor-Dev-EventTracker-Function]

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

:white_check_mark: Apply Succeeded (braze-cdk-dev)
CI link
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
 Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration
and found no differences, so no changes are needed.

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

:white_check_mark: Apply Succeeded (v3-proxy-api-cdk-dev)
CI link
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
 Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # local_file.application_ecs_service_appspec_94386B9C will be created
  + resource "local_file" "application_ecs_service_appspec_94386B9C" {
      + content              = jsonencode(
            {
              + Resources = [
                  + {
                      + TargetService = {
                          + Properties = {
                              + LoadBalancerInfo = {
                                  + ContainerName = "app"
                                  + ContainerPort = 4029
                                }
                              + TaskDefinition   = "arn:aws:ecs:us-east-1:410318598490:task-definition/V3ProxyApi-Dev:21"
                            }
                          + Type       = "AWS::ECS::Service"
                        }
                    },
                ]
              + version   = 1
            }
        )
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.
local_file.application_ecs_service_appspec_94386B9C: Creating...
local_file.application_ecs_service_appspec_94386B9C: Creation complete after 0s [id=c525867038a6ae29df03ab1d0ccecd852e79f9ed]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

:white_check_mark: Apply Succeeded (account-data-deleter-cdk-dev)
CI link
Apply complete! Resources: 2 added, 2 changed, 1 destroyed.
 Resource actions are indicated with the following symbols:
  + create
  ~ update in-place
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_ecs_task_definition.data-deleter-app_application_ecs_service_ecs-task_243DED07 must be replaced
-/+ resource "aws_ecs_task_definition" "data-deleter-app_application_ecs_service_ecs-task_243DED07" {
      ~ arn                      = "arn:aws:ecs:us-east-1:410318598490:task-definition/AccountDataDeleter-Dev:103" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:410318598490:task-definition/AccountDataDeleter-Dev" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "410318598490.dkr.ecr.us-east-1.amazonaws.com/accountdatadeleter-dev-app:83567fe699c04e751e5ef42ca5f8f8a3d8c6e35e" -> "410318598490.dkr.ecr.us-east-1.amazonaws.com/accountdatadeleter-dev-app:f7b4c25cfc24900d37bc3c93a6da8a3bbc79d9be"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "AccountDataDeleter-Dev" -> (known after apply)
      ~ revision                 = 103 -> (known after apply)
        tags                     = {
            "environment" = "Dev"
            "service"     = "AccountDataDeleter"
        }
        # (9 unchanged attributes hidden)
    }

  # aws_lambda_function.batchdeletelambda_batch-delete-lambda_9A38729B will be updated in-place
  ~ resource "aws_lambda_function" "batchdeletelambda_batch-delete-lambda_9A38729B" {
        id                             = "AccountDataDeleter-Dev-BatchDeleteLambda-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:410318598490:function:AccountDataDeleter-Dev-BatchDeleteLambda-Function:126" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:410318598490:function:AccountDataDeleter-Dev-BatchDeleteLambda-Function:126/invocations" -> (known after apply)
        tags                           = {
            "environment" = "Dev"
            "service"     = "AccountDataDeleter"
        }
      ~ version                        = "126" -> (known after apply)
        # (19 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "GIT_SHA"     = (sensitive value)
                # (4 unchanged elements hidden)
            }
        }

        # (4 unchanged blocks hidden)
    }

  # aws_lambda_function.event-consumer_sqs-event-consumer_lambda_2F35855C will be updated in-place
  ~ resource "aws_lambda_function" "event-consumer_sqs-event-consumer_lambda_2F35855C" {
        id                             = "AccountDataDeleter-Dev-Sqs-Event-Consumer-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:410318598490:function:AccountDataDeleter-Dev-Sqs-Event-Consumer-Function:169" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:410318598490:function:AccountDataDeleter-Dev-Sqs-Event-Consumer-Function:169/invocations" -> (known after apply)
        tags                           = {
            "environment" = "Dev"
            "service"     = "AccountDataDeleter"
        }
      ~ version                        = "169" -> (known after apply)
        # (19 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "GIT_SHA"                      = (sensitive value)
                # (4 unchanged elements hidden)
            }
        }

        # (4 unchanged blocks hidden)
    }

  # local_file.data-deleter-app_application_ecs_service_appspec_5FC42C09 will be created
  + resource "local_file" "data-deleter-app_application_ecs_service_appspec_5FC42C09" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

Plan: 2 to add, 2 to change, 1 to destroy.
aws_ecs_task_definition.data-deleter-app_application_ecs_service_ecs-task_243DED07: Destroying... [id=AccountDataDeleter-Dev]
aws_ecs_task_definition.data-deleter-app_application_ecs_service_ecs-task_243DED07: Destruction complete after 0s
aws_lambda_function.event-consumer_sqs-event-consumer_lambda_2F35855C: Modifying... [id=AccountDataDeleter-Dev-Sqs-Event-Consumer-Function]
aws_lambda_function.batchdeletelambda_batch-delete-lambda_9A38729B: Modifying... [id=AccountDataDeleter-Dev-BatchDeleteLambda-Function]
aws_ecs_task_definition.data-deleter-app_application_ecs_service_ecs-task_243DED07: Creating...
aws_ecs_task_definition.data-deleter-app_application_ecs_service_ecs-task_243DED07: Creation complete after 0s [id=AccountDataDeleter-Dev]
local_file.data-deleter-app_application_ecs_service_appspec_5FC42C09: Creating...
local_file.data-deleter-app_application_ecs_service_appspec_5FC42C09: Creation complete after 0s [id=3d8655bad7efe9ba57a6e3af1f2d748fa1ef907e]
aws_lambda_function.batchdeletelambda_batch-delete-lambda_9A38729B: Modifications complete after 7s [id=AccountDataDeleter-Dev-BatchDeleteLambda-Function]
aws_lambda_function.event-consumer_sqs-event-consumer_lambda_2F35855C: Modifications complete after 8s [id=AccountDataDeleter-Dev-Sqs-Event-Consumer-Function]

Apply complete! Resources: 2 added, 2 changed, 1 destroyed.

:white_check_mark: Apply Succeeded (pocket-event-bridge-cdk-dev)
CI link
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
 Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_cloudwatch_metric_alarm.shareable-list-events_shareablelistevents-rule-dlq-alarm_FBCFA70C will be updated in-place
  ~ resource "aws_cloudwatch_metric_alarm" "shareable-list-events_shareablelistevents-rule-dlq-alarm_FBCFA70C" {
      ~ dimensions                = {
          ~ "QueueName" = "PocketEventBridge-Dev-SNS-ShareableListItemEvents-Topic-DLQ" -> "PocketEventBridge-Dev-SNS-ShareableListEvents-Topic-DLQ"
        }
        id                        = "PocketEventBridge-Dev-ShareableListEvents-Rule-dlq-alarm"
        tags                      = {}
        # (17 unchanged attributes hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.
aws_cloudwatch_metric_alarm.shareable-list-events_shareablelistevents-rule-dlq-alarm_FBCFA70C: Modifying... [id=PocketEventBridge-Dev-ShareableListEvents-Rule-dlq-alarm]
aws_cloudwatch_metric_alarm.shareable-list-events_shareablelistevents-rule-dlq-alarm_FBCFA70C: Modifications complete after 0s [id=PocketEventBridge-Dev-ShareableListEvents-Rule-dlq-alarm]

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

:white_check_mark: Apply Succeeded (transactional-emails-cdk-dev)
CI link
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
 Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # aws_lambda_function.events_sqs-event-consumer_lambda_3BE960B8 will be updated in-place
  ~ resource "aws_lambda_function" "events_sqs-event-consumer_lambda_3BE960B8" {
        id                             = "TransactionalEmails-Dev-Sqs-Event-Consumer-Function"
      ~ qualified_arn                  = "arn:aws:lambda:us-east-1:410318598490:function:TransactionalEmails-Dev-Sqs-Event-Consumer-Function:182" -> (known after apply)
      ~ qualified_invoke_arn           = "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:410318598490:function:TransactionalEmails-Dev-Sqs-Event-Consumer-Function:182/invocations" -> (known after apply)
        tags                           = {
            "environment" = "Dev"
            "service"     = "TransactionalEmails"
        }
      ~ version                        = "182" -> (known after apply)
        # (19 unchanged attributes hidden)

      ~ environment {
          ~ variables = {
              ~ "GIT_SHA"                            = (sensitive value)
                # (6 unchanged elements hidden)
            }
        }

        # (4 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.
aws_lambda_function.events_sqs-event-consumer_lambda_3BE960B8: Modifying... [id=TransactionalEmails-Dev-Sqs-Event-Consumer-Function]
aws_lambda_function.events_sqs-event-consumer_lambda_3BE960B8: Modifications complete after 7s [id=TransactionalEmails-Dev-Sqs-Event-Consumer-Function]

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

:white_check_mark: Apply Succeeded (parser-graphql-wrapper-cdk-dev)
CI link
Apply complete! Resources: 2 added, 0 changed, 1 destroyed.
 Resource actions are indicated with the following symbols:
  + create
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4 must be replaced
-/+ resource "aws_ecs_task_definition" "application_ecs_service_ecs-task_461CC9D4" {
      ~ arn                      = "arn:aws:ecs:us-east-1:410318598490:task-definition/ParserGraphQLWrapper-Dev:123" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-1:410318598490:task-definition/ParserGraphQLWrapper-Dev" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                  ~ image                  = "410318598490.dkr.ecr.us-east-1.amazonaws.com/parsergraphqlwrapper-dev-app:83567fe699c04e751e5ef42ca5f8f8a3d8c6e35e" -> "410318598490.dkr.ecr.us-east-1.amazonaws.com/parsergraphqlwrapper-dev-app:f7b4c25cfc24900d37bc3c93a6da8a3bbc79d9be"
                    name                   = "app"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name                   = "aws-otel-collector"
                  ~ portMappings           = [
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                      ~ {
                          - protocol      = "tcp"
                            # (2 unchanged attributes hidden)
                        },
                    ]
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ id                       = "ParserGraphQLWrapper-Dev" -> (known after apply)
      ~ revision                 = 123 -> (known after apply)
        tags                     = {
            "environment" = "Dev"
            "service"     = "ParserGraphQLWrapper"
        }
        # (9 unchanged attributes hidden)
    }

  # local_file.application_ecs_service_appspec_94386B9C will be created
  + resource "local_file" "application_ecs_service_appspec_94386B9C" {
      + content              = (known after apply)
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "appspec.json"
      + id                   = (known after apply)
    }

Plan: 2 to add, 0 to change, 1 to destroy.
aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4: Destroying... [id=ParserGraphQLWrapper-Dev]
aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4: Destruction complete after 0s
aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4: Creating...
aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4: Creation complete after 0s [id=ParserGraphQLWrapper-Dev]
local_file.application_ecs_service_appspec_94386B9C: Creating...
local_file.application_ecs_service_appspec_94386B9C: Creation complete after 0s [id=9032d492c0a9d8a602884f04e10ebd4a190fedd5]

Apply complete! Resources: 2 added, 0 changed, 1 destroyed.

:white_check_mark: Apply Succeeded (push-server-cdk-dev)
CI link
Apply complete! Resources: 21 added, 0 changed, 0 destroyed.
 Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_appautoscaling_policy.application_autoscaling_scale_in_policy_BF273511 will be created
  + resource "aws_appautoscaling_policy" "application_autoscaling_scale_in_policy_BF273511" {
      + alarm_arns         = (known after apply)
      + arn                = (known after apply)
      + id                 = (known after apply)
      + name               = "Push-Dev-ScaleInPolicy"
      + policy_type        = "StepScaling"
      + resource_id        = "service/Push-Dev/Push-Dev"
      + scalable_dimension = "ecs:service:DesiredCount"
      + service_namespace  = "ecs"

      + step_scaling_policy_configuration {
          + adjustment_type         = "ChangeInCapacity"
          + cooldown                = 60
          + metric_aggregation_type = "Average"

          + step_adjustment {
              + metric_interval_upper_bound = "0"
              + scaling_adjustment          = -1
            }
        }
    }

  # aws_appautoscaling_policy.application_autoscaling_scale_out_policy_D03900A2 will be created
  + resource "aws_appautoscaling_policy" "application_autoscaling_scale_out_policy_D03900A2" {
      + alarm_arns         = (known after apply)
      + arn                = (known after apply)
      + id                 = (known after apply)
      + name               = "Push-Dev-ScaleOutPolicy"
      + policy_type        = "StepScaling"
      + resource_id        = "service/Push-Dev/Push-Dev"
      + scalable_dimension = "ecs:service:DesiredCount"
      + service_namespace  = "ecs"

      + step_scaling_policy_configuration {
          + adjustment_type         = "ChangeInCapacity"
          + cooldown                = 60
          + metric_aggregation_type = "Average"

          + step_adjustment {
              + metric_interval_lower_bound = "0"
              + scaling_adjustment          = 2
            }
        }
    }

  # aws_appautoscaling_target.application_autoscaling_autoscaling_target_42BF5C99 will be created
  + resource "aws_appautoscaling_target" "application_autoscaling_autoscaling_target_42BF5C99" {
      + arn                = (known after apply)
      + id                 = (known after apply)
      + max_capacity       = 10
      + min_capacity       = 2
      + resource_id        = "service/Push-Dev/Push-Dev"
      + role_arn           = (known after apply)
      + scalable_dimension = "ecs:service:DesiredCount"
      + service_namespace  = "ecs"
      + tags_all           = (known after apply)
    }

  # aws_cloudwatch_dashboard.application_cloudwatch-dashboard_1F3DC0ED will be created
  + resource "aws_cloudwatch_dashboard" "application_cloudwatch-dashboard_1F3DC0ED" {
      + dashboard_arn  = (known after apply)
      + dashboard_body = jsonencode(
            {
              + widgets = [
                  + {
                      + height     = 6
                      + properties = {
                          + annotations = {
                              + horizontal = [
                                  + {
                                      + color = "#e377c2"
                                      + label = "CPU scale out"
                                      + value = 45
                                    },
                                  + {
                                      + color = "#c5b0d5"
                                      + label = "CPU scale in"
                                      + value = 30
                                    },
                                ]
                            }
                          + metrics     = [
                              + [
                                  + "ECS/ContainerInsights",
                                  + "RunningTaskCount",
                                  + "ServiceName",
                                  + "Push-Dev",
                                  + "ClusterName",
                                  + "Push-Dev",
                                  + {
                                      + color = "#c49c94"
                                      + yAxis = "right"
                                    },
                                ],
                              + [
                                  + "AWS/ECS",
                                  + "CPUUtilization",
                                  + ".",
                                  + ".",
                                  + ".",
                                  + ".",
                                  + {
                                      + color = "#f7b6d2"
                                    },
                                ],
                              + [
                                  + ".",
                                  + "MemoryUtilization",
                                  + ".",
                                  + ".",
                                  + ".",
                                  + ".",
                                  + {
                                      + color = "#c7c7c7"
                                    },
                                ],
                            ]
                          + period      = 60
                          + region      = "us-east-1"
                          + stacked     = false
                          + stat        = "Average"
                          + title       = "Service Load"
                          + view        = "timeSeries"
                        }
                      + type       = "metric"
                      + width      = 12
                      + x          = 0
                      + y          = 6
                    },
                ]
            }
        )
      + dashboard_name = "Push-Dev"
      + id             = (known after apply)
    }

  # aws_cloudwatch_log_group.app-log-group will be created
  + resource "aws_cloudwatch_log_group" "app-log-group" {
      + arn               = (known after apply)
      + id                = (known after apply)
      + log_group_class   = (known after apply)
      + name              = "/Backend/Push-Dev/ecs/app"
      + name_prefix       = (known after apply)
      + retention_in_days = 90
      + skip_destroy      = true
      + tags              = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all          = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
    }

  # aws_cloudwatch_log_group.aws-otel-collector-log-group will be created
  + resource "aws_cloudwatch_log_group" "aws-otel-collector-log-group" {
      + arn               = (known after apply)
      + id                = (known after apply)
      + log_group_class   = (known after apply)
      + name              = "/Backend/Push-Dev/ecs/aws-otel-collector"
      + name_prefix       = (known after apply)
      + retention_in_days = 90
      + skip_destroy      = true
      + tags              = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all          = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
    }

  # aws_cloudwatch_metric_alarm.application_autoscaling_scale_in_alarm_850BE3A1 will be created
  + resource "aws_cloudwatch_metric_alarm" "application_autoscaling_scale_in_alarm_850BE3A1" {
      + actions_enabled                       = true
      + alarm_actions                         = (known after apply)
      + alarm_description                     = "Alarm to reduce capacity if container CPU is low"
      + alarm_name                            = "Push-Dev Service Low CPU"
      + arn                                   = (known after apply)
      + comparison_operator                   = "LessThanThreshold"
      + dimensions                            = {
          + "ClusterName" = "Push-Dev"
          + "ServiceName" = "Push-Dev"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 2
      + id                                    = (known after apply)
      + metric_name                           = "CPUUtilization"
      + namespace                             = "AWS/ECS"
      + period                                = 60
      + statistic                             = "Average"
      + tags                                  = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all                              = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + threshold                             = 30
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.application_autoscaling_scale_out_alarm_E40FCBA0 will be created
  + resource "aws_cloudwatch_metric_alarm" "application_autoscaling_scale_out_alarm_E40FCBA0" {
      + actions_enabled                       = true
      + alarm_actions                         = (known after apply)
      + alarm_description                     = "Alarm to add capacity if container CPU is high"
      + alarm_name                            = "Push-Dev Service High CPU"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanThreshold"
      + dimensions                            = {
          + "ClusterName" = "Push-Dev"
          + "ServiceName" = "Push-Dev"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 2
      + id                                    = (known after apply)
      + metric_name                           = "CPUUtilization"
      + namespace                             = "AWS/ECS"
      + period                                = 60
      + statistic                             = "Average"
      + tags                                  = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all                              = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + threshold                             = 45
      + treat_missing_data                    = "notBreaching"
    }

  # aws_ecr_lifecycle_policy.application_ecs_service_ecr-app_ecr-repo-lifecyclepolicy_CCDF75B7 will be created
  + resource "aws_ecr_lifecycle_policy" "application_ecs_service_ecr-app_ecr-repo-lifecyclepolicy_CCDF75B7" {
      + id          = (known after apply)
      + policy      = jsonencode(
            {
              + rules = [
                  + {
                      + action       = {
                          + type = "expire"
                        }
                      + description  = "expire old images"
                      + rulePriority = 1
                      + selection    = {
                          + countNumber = 800
                          + countType   = "imageCountMoreThan"
                          + tagStatus   = "any"
                        }
                    },
                ]
            }
        )
      + registry_id = (known after apply)
      + repository  = "push-dev-app"
    }

  # aws_ecr_repository.application_ecs_service_ecr-app_ecr-repo_ABFE17F0 will be created
  + resource "aws_ecr_repository" "application_ecs_service_ecr-app_ecr-repo_ABFE17F0" {
      + arn                  = (known after apply)
      + id                   = (known after apply)
      + image_tag_mutability = "MUTABLE"
      + name                 = "push-dev-app"
      + registry_id          = (known after apply)
      + repository_url       = (known after apply)
      + tags                 = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all             = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

  # aws_ecs_cluster.application_ecs_cluster_4DC6EFB3 will be created
  + resource "aws_ecs_cluster" "application_ecs_cluster_4DC6EFB3" {
      + arn      = (known after apply)
      + id       = (known after apply)
      + name     = "Push-Dev"
      + tags     = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }

      + setting {
          + name  = "containerInsights"
          + value = "enabled"
        }
    }

  # aws_ecs_service.application_ecs_service_ecs-service_A8BAB5F4 will be created
  + resource "aws_ecs_service" "application_ecs_service_ecs-service_A8BAB5F4" {
      + cluster                            = (known after apply)
      + deployment_maximum_percent         = 200
      + deployment_minimum_healthy_percent = 100
      + desired_count                      = 2
      + enable_ecs_managed_tags            = false
      + enable_execute_command             = false
      + iam_role                           = (known after apply)
      + id                                 = (known after apply)
      + launch_type                        = "FARGATE"
      + name                               = "Push-Dev"
      + platform_version                   = (known after apply)
      + propagate_tags                     = "SERVICE"
      + scheduling_strategy                = "REPLICA"
      + tags                               = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all                           = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + task_definition                    = (known after apply)
      + triggers                           = (known after apply)
      + wait_for_steady_state              = false

      + deployment_controller {
          + type = "ECS"
        }

      + network_configuration {
          + assign_public_ip = false
          + security_groups  = (known after apply)
          + subnets          = [
              + "subnet-04478ac1c55709b1f",
              + "subnet-07854aac95d07bb16",
              + "subnet-0a6c00fa564f97b10",
              + "subnet-0eb99fe10e08d5d96",
            ]
        }
    }

  # aws_ecs_task_definition.application_ecs_service_ecs-task_461CC9D4 will be created
  + resource "aws_ecs_task_definition" "application_ecs_service_ecs-task_461CC9D4" {
      + arn                      = (known after apply)
      + arn_without_revision     = (known after apply)
      + container_definitions    = (known after apply)
      + cpu                      = "512"
      + execution_role_arn       = (known after apply)
      + family                   = "Push-Dev"
      + id                       = (known after apply)
      + memory                   = "2048"
      + network_mode             = "awsvpc"
      + requires_compatibilities = [
          + "FARGATE",
        ]
      + revision                 = (known after apply)
      + skip_destroy             = true
      + tags                     = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all                 = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + task_role_arn            = (known after apply)
    }

  # aws_iam_policy.application_ecs_service_ecs-iam_ecs-task-execution-role-policy_2D469A77 will be created
  + resource "aws_iam_policy" "application_ecs_service_ecs-iam_ecs-task-execution-role-policy_2D469A77" {
      + arn         = (known after apply)
      + id          = (known after apply)
      + name        = "Push-Dev-TaskExecutionRolePolicy"
      + name_prefix = (known after apply)
      + path        = "/"
      + policy      = jsonencode(
            {
              + Statement = [
                  + {
                      + Action   = [
                          + "secretsmanager:GetSecretValue",
                          + "kms:Decrypt",
                        ]
                      + Effect   = "Allow"
                      + Resource = [
                          + "arn:aws:secretsmanager:us-east-1:410318598490:secret:Shared/*",
                          + "arn:aws:secretsmanager:us-east-1:410318598490:secret:Shared",
                          + "arn:aws:secretsmanager:us-east-1:410318598490:secret:Push/Dev/*",
                          + "arn:aws:secretsmanager:us-east-1:410318598490:secret:Push/Dev",
                          + "arn:aws:secretsmanager:us-east-1:410318598490:secret:Push-Dev/*",
                          + "arn:aws:secretsmanager:us-east-1:410318598490:secret:Push-Dev",
                          + "arn:aws:kms:us-east-1:410318598490:key/379b8bf2-3daf-4927-b40e-39744689d73f",
                        ]
                    },
                  + {
                      + Action   = "ssm:GetParameter*"
                      + Effect   = "Allow"
                      + Resource = [
                          + "arn:aws:ssm:us-east-1:410318598490:parameter/Push/Dev/*",
                          + "arn:aws:ssm:us-east-1:410318598490:parameter/Push/Dev",
                        ]
                    },
                ]
              + Version   = "2012-10-17"
            }
        )
      + policy_id   = (known after apply)
      + tags        = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all    = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
    }

  # aws_iam_policy.application_ecs_service_ecs-iam_ecs-task-role-policy_6FC89FB6 will be created
  + resource "aws_iam_policy" "application_ecs_service_ecs-iam_ecs-task-role-policy_6FC89FB6" {
      + arn         = (known after apply)
      + id          = (known after apply)
      + name        = "Push-Dev-TaskRolePolicy"
      + name_prefix = (known after apply)
      + path        = "/"
      + policy      = jsonencode(
            {
              + Statement = [
                  + {
                      + Action   = [
                          + "xray:PutTraceSegments",
                          + "xray:PutTelemetryRecords",
                          + "xray:GetSamplingTargets",
                          + "xray:GetSamplingStatisticSummaries",
                          + "xray:GetSamplingRules",
                        ]
                      + Effect   = "Allow"
                      + Resource = "*"
                    },
                  + {
                      + Action   = [
                          + "sqs:SendMessageBatch",
                          + "sqs:SendMessage",
                          + "sqs:ReceiveMessage",
                          + "sqs:DeleteMessage",
                        ]
                      + Effect   = "Allow"
                      + Resource = [
                          + "arn:aws:sqs:us-east-1:410318598490:pocket-push-queue",
                          + "arn:aws:sqs:us-east-1:410318598490:pocket-push-feedback-queue",
                        ]
                    },
                ]
              + Version   = "2012-10-17"
            }
        )
      + policy_id   = (known after apply)
      + tags        = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
      + tags_all    = {
          + "environment" = "Dev"
          + "service"     = "Push"
        }
    }