Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

chore: GCForms release v3.21.0 #823

Merged
merged 1 commit into from
Sep 13, 2024
Merged

Conversation

sre-read-write[bot]
Copy link
Contributor

🤖 I have created a release beep boop

3.21.0 (2024-09-12)

Features


This PR was generated with Release Please. See documentation.

Copy link

Production: ecr

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

Plan: 2 to add, 0 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_ecr_lifecycle_policy.idp[0]
aws_ecr_repository.idp[0]
Show plan
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

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

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

      + image_scanning_configuration {
          + scan_on_push = true
        }
    }

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

Changes to Outputs:
  ~ ecr_repository_url_idp                             = null -> (known after apply)

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

Saved the plan to: plan.tfplan

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

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

Copy link

Production: network

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

Plan: 15 to add, 0 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_security_group.idp_db[0]
aws_security_group.idp_ecs[0]
aws_security_group.idp_lb[0]
aws_security_group_rule.idp_db_egress_privatelink[0]
aws_security_group_rule.idp_db_ingress_ecs[0]
aws_security_group_rule.idp_ecs_egress_db[0]
aws_security_group_rule.idp_ecs_egress_internet[0]
aws_security_group_rule.idp_ecs_egress_privatelink[0]
aws_security_group_rule.idp_ecs_egress_smtp_tls[0]
aws_security_group_rule.idp_ecs_ingress_lb[0]
aws_security_group_rule.idp_lb_egress_ecs[0]
aws_security_group_rule.idp_lb_ingress_internet_http[0]
aws_security_group_rule.idp_lb_ingress_internet_https[0]
aws_security_group_rule.privatelink_idp_db_ingress[0]
aws_security_group_rule.privatelink_idp_ecs_ingress[0]
Show plan
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_security_group.idp_db[0] will be created
  + resource "aws_security_group" "idp_db" {
      + arn                    = (known after apply)
      + description            = "Zitadel IdP database"
      + egress                 = (known after apply)
      + id                     = (known after apply)
      + ingress                = (known after apply)
      + name                   = "idp_db"
      + name_prefix            = (known after apply)
      + owner_id               = (known after apply)
      + revoke_rules_on_delete = false
      + tags_all               = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + vpc_id                 = "vpc-0e852a6f3554a8bca"
    }

  # aws_security_group.idp_ecs[0] will be created
  + resource "aws_security_group" "idp_ecs" {
      + arn                    = (known after apply)
      + description            = "Zitadel IdP ECS Tasks"
      + egress                 = (known after apply)
      + id                     = (known after apply)
      + ingress                = (known after apply)
      + name                   = "idp_ecs"
      + name_prefix            = (known after apply)
      + owner_id               = (known after apply)
      + revoke_rules_on_delete = false
      + tags_all               = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + vpc_id                 = "vpc-0e852a6f3554a8bca"
    }

  # aws_security_group.idp_lb[0] will be created
  + resource "aws_security_group" "idp_lb" {
      + arn                    = (known after apply)
      + description            = "Zitadel IdP load balancer"
      + egress                 = (known after apply)
      + id                     = (known after apply)
      + ingress                = (known after apply)
      + name                   = "idp_lb"
      + name_prefix            = (known after apply)
      + owner_id               = (known after apply)
      + revoke_rules_on_delete = false
      + tags_all               = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + vpc_id                 = "vpc-0e852a6f3554a8bca"
    }

  # aws_security_group_rule.idp_db_egress_privatelink[0] will be created
  + resource "aws_security_group_rule" "idp_db_egress_privatelink" {
      + description              = "Egress from Zitadel IdP database to PrivateLink endpoints"
      + from_port                = 443
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = "sg-0799d12ff9d17bded"
      + to_port                  = 443
      + type                     = "egress"
    }

  # aws_security_group_rule.idp_db_ingress_ecs[0] will be created
  + resource "aws_security_group_rule" "idp_db_ingress_ecs" {
      + description              = "Ingress to database from Zitadel IdP ECS task"
      + from_port                = 5432
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 5432
      + type                     = "ingress"
    }

  # aws_security_group_rule.idp_ecs_egress_db[0] will be created
  + resource "aws_security_group_rule" "idp_ecs_egress_db" {
      + description              = "Egress from Zitadel IdP ECS task to database"
      + from_port                = 5432
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 5432
      + type                     = "egress"
    }

  # aws_security_group_rule.idp_ecs_egress_internet[0] will be created
  + resource "aws_security_group_rule" "idp_ecs_egress_internet" {
      + cidr_blocks              = [
          + "0.0.0.0/0",
        ]
      + description              = "Egress from Zitadel IdP ECS task to internet (HTTPS)"
      + from_port                = 443
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 443
      + type                     = "egress"
    }

  # aws_security_group_rule.idp_ecs_egress_privatelink[0] will be created
  + resource "aws_security_group_rule" "idp_ecs_egress_privatelink" {
      + description              = "Egress from Zitadel IdP ECS task to PrivateLink endpoints"
      + from_port                = 443
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = "sg-0799d12ff9d17bded"
      + to_port                  = 443
      + type                     = "egress"
    }

  # aws_security_group_rule.idp_ecs_egress_smtp_tls[0] will be created
  + resource "aws_security_group_rule" "idp_ecs_egress_smtp_tls" {
      + cidr_blocks              = [
          + "0.0.0.0/0",
        ]
      + description              = "Egress from Zitadel IdP ECS task to SMTP"
      + from_port                = 465
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 465
      + type                     = "egress"
    }

  # aws_security_group_rule.idp_ecs_ingress_lb[0] will be created
  + resource "aws_security_group_rule" "idp_ecs_ingress_lb" {
      + description              = "Ingress from load balancer to Zitadel IdP ECS task"
      + from_port                = 8080
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 8080
      + type                     = "ingress"
    }

  # aws_security_group_rule.idp_lb_egress_ecs[0] will be created
  + resource "aws_security_group_rule" "idp_lb_egress_ecs" {
      + description              = "Egress from load balancer to Zitadel IdP ECS task"
      + from_port                = 8080
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 8080
      + type                     = "egress"
    }

  # aws_security_group_rule.idp_lb_ingress_internet_http[0] will be created
  + resource "aws_security_group_rule" "idp_lb_ingress_internet_http" {
      + cidr_blocks              = [
          + "0.0.0.0/0",
        ]
      + description              = "Ingress from internet to the Zitadel IdP load balancer (HTTP)"
      + from_port                = 80
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 80
      + type                     = "ingress"
    }

  # aws_security_group_rule.idp_lb_ingress_internet_https[0] will be created
  + resource "aws_security_group_rule" "idp_lb_ingress_internet_https" {
      + cidr_blocks              = [
          + "0.0.0.0/0",
        ]
      + description              = "Ingress from internet to the Zitadel IdP load balancer (HTTPS)"
      + from_port                = 443
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = (known after apply)
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 443
      + type                     = "ingress"
    }

  # aws_security_group_rule.privatelink_idp_db_ingress[0] will be created
  + resource "aws_security_group_rule" "privatelink_idp_db_ingress" {
      + description              = "Security group rule for Zitadel IdP database ingress"
      + from_port                = 443
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = "sg-0799d12ff9d17bded"
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 443
      + type                     = "ingress"
    }

  # aws_security_group_rule.privatelink_idp_ecs_ingress[0] will be created
  + resource "aws_security_group_rule" "privatelink_idp_ecs_ingress" {
      + description              = "Security group rule for Zitadel IdP ECS task ingress"
      + from_port                = 443
      + id                       = (known after apply)
      + protocol                 = "tcp"
      + security_group_id        = "sg-0799d12ff9d17bded"
      + security_group_rule_id   = (known after apply)
      + self                     = false
      + source_security_group_id = (known after apply)
      + to_port                  = 443
      + type                     = "ingress"
    }

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

Changes to Outputs:
  ~ idp_db_security_group_id         = null -> (known after apply)
  ~ idp_ecs_security_group_id        = null -> (known after apply)
  ~ idp_lb_security_group_id         = null -> (known after apply)

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

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_default_network_acl.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_default_security_group.default"]
WARN - plan.json - main - Missing Common Tags: ["aws_eip.forms_natgw[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_eip.forms_natgw[1]"]
WARN - plan.json - main - Missing Common Tags: ["aws_eip.forms_natgw[2]"]
WARN - plan.json - main - Missing Common Tags: ["aws_flow_log.vpc_flow_logs[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_internet_gateway.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_nat_gateway.forms[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_nat_gateway.forms[1]"]
WARN - plan.json - main - Missing Common Tags: ["aws_nat_gateway.forms[2]"]
WARN - plan.json - main - Missing Common Tags: ["aws_route_table.forms_private_subnet[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_route_table.forms_private_subnet[1]"]
WARN - plan.json - main - Missing Common Tags: ["aws_route_table.forms_private_subnet[2]"]
WARN - plan.json - main - Missing Common Tags: ["aws_route_table.forms_public_subnet"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.connector_db"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms_database"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms_egress"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms_load_balancer"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.forms_redis"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.idp_db[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.idp_ecs[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.idp_lb[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_security_group.lambda_nagware"]
WARN - plan.json - main - Missing...

Copy link

Production: load_balancer

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

Plan: 0 to add, 0 to change, 0 to destroy
Show summary
CHANGE NAME
Show plan
Changes to Outputs:
  ~ kinesis_firehose_waf_logs_arn  = "" -> "arn:aws:firehose:ca-central-1:957818836222:deliverystream/aws-waf-logs-forms"

You can apply this plan to save these new output values to the Terraform
state, without changing any real infrastructure.

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

Saved the plan to: plan.tfplan

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

Copy link

Production: idp

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

Plan: 73 to add, 0 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_acm_certificate.idp
aws_acm_certificate_validation.idp
aws_alb_listener_rule.idp_protocol_version
aws_iam_access_key.idp_send_email
aws_iam_group.idp_send_email
aws_iam_group_membership.idp_send_email
aws_iam_group_policy_attachment.idp_send_email
aws_iam_policy.idp_send_email
aws_iam_user.idp_send_email
aws_lb.idp
aws_lb_listener.idp
aws_lb_listener.idp_http_redirect
aws_lb_target_group.idp["HTTP1"]
aws_lb_target_group.idp["HTTP2"]
aws_route53_record.idp
aws_route53_record.idp_dkim_CNAME[0]
aws_route53_record.idp_dkim_CNAME[1]
aws_route53_record.idp_dkim_CNAME[2]
aws_route53_record.idp_dmarc_TXT
aws_route53_record.idp_ses_verification_TXT
aws_route53_record.idp_spf_TXT
aws_route53_record.idp_validation["auth.forms-formulaires.alpha.canada.ca"]
aws_secretsmanager_secret.zidatel_database_proxy_auth
aws_secretsmanager_secret_version.zidatel_database_proxy_auth
aws_ses_domain_dkim.idp
aws_ses_domain_identity.idp
aws_ses_domain_identity_verification.idp
aws_shield_protection.idp
aws_ssm_parameter.idp_database_cluster_admin_password
aws_ssm_parameter.idp_database_cluster_admin_username
aws_ssm_parameter.zitadel_admin_password
aws_ssm_parameter.zitadel_admin_username
aws_ssm_parameter.zitadel_database_host
aws_ssm_parameter.zitadel_database_name
aws_ssm_parameter.zitadel_database_user_password
aws_ssm_parameter.zitadel_database_user_username
aws_ssm_parameter.zitadel_secret_key
aws_wafv2_rule_group.rate_limiters_group_idp
aws_wafv2_web_acl.idp
aws_wafv2_web_acl_association.idp
aws_wafv2_web_acl_logging_configuration.idp
random_string.idp_alb_tg_suffix
module.idp_database.aws_cloudwatch_log_group.log_exports["postgresql"]
module.idp_database.aws_cloudwatch_log_group.proxy[0]
module.idp_database.aws_db_proxy.proxy[0]
module.idp_database.aws_db_proxy_default_target_group.this[0]
module.idp_database.aws_db_proxy_target.target[0]
module.idp_database.aws_db_subnet_group.rds
module.idp_database.aws_iam_policy.read_connection_string[0]
module.idp_database.aws_iam_role.rds_proxy[0]
module.idp_database.aws_iam_role_policy_attachment.read_connection_string[0]
module.idp_database.aws_rds_cluster.cluster
module.idp_database.aws_rds_cluster_instance.instances[0]
module.idp_database.aws_secretsmanager_secret.connection_string[0]
module.idp_database.aws_secretsmanager_secret.proxy_connection_string[0]
module.idp_database.aws_secretsmanager_secret_version.connection_string[0]
module.idp_database.aws_secretsmanager_secret_version.proxy_connection_string[0]
module.idp_database.aws_security_group.rds
module.idp_database.aws_security_group_rule.rds_egress
module.idp_database.aws_security_group_rule.rds_ingress
module.idp_database.random_string.random
module.idp_ecs.aws_appautoscaling_policy.this["cpu"]
module.idp_ecs.aws_appautoscaling_policy.this["memory"]
module.idp_ecs.aws_appautoscaling_target.this[0]
module.idp_ecs.aws_cloudwatch_log_group.this
module.idp_ecs.aws_ecs_cluster.this[0]
module.idp_ecs.aws_ecs_cluster_capacity_providers.this[0]
module.idp_ecs.aws_ecs_service.this
module.idp_ecs.aws_ecs_task_definition.this
module.idp_ecs.aws_iam_policy.this_task_exec
module.idp_ecs.aws_iam_role.this_task
module.idp_ecs.aws_iam_role.this_task_exec
module.idp_ecs.aws_iam_role_policy_attachment.this_task_exec

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

Show plan
Resource actions are indicated with the following symbols:
  + create
 <= read (data resources)

Terraform will perform the following actions:

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

      + statement {
          + actions   = [
              + "ssm:GetParameter",
              + "ssm:GetParameters",
            ]
          + effect    = "Allow"
          + resources = [
              + (known after apply),
              + (known after apply),
              + (known after apply),
              + (known after apply),
              + (known after apply),
              + (known after apply),
              + (known after apply),
              + (known after apply),
              + (known after apply),
            ]
          + sid       = "GetSSMParameters"
        }
    }

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

      + statement {
          + actions   = [
              + "ses:SendRawEmail",
            ]
          + effect    = "Allow"
          + resources = [
              + (known after apply),
            ]
        }
    }

  # aws_acm_certificate.idp will be created
  + resource "aws_acm_certificate" "idp" {
      + arn                       = (known after apply)
      + domain_name               = "auth.forms-formulaires.alpha.canada.ca"
      + domain_validation_options = [
          + {
              + domain_name           = "auth.forms-formulaires.alpha.canada.ca"
              + resource_record_name  = (known after apply)
              + resource_record_type  = (known after apply)
              + resource_record_value = (known after apply)
            },
        ]
      + id                        = (known after apply)
      + key_algorithm             = (known after apply)
      + not_after                 = (known after apply)
      + not_before                = (known after apply)
      + pending_renewal           = (known after apply)
      + renewal_eligibility       = (known after apply)
      + renewal_summary           = (known after apply)
      + status                    = (known after apply)
      + subject_alternative_names = [
          + "auth.forms-formulaires.alpha.canada.ca",
        ]
      + tags                      = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all                  = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + type                      = (known after apply)
      + validation_emails         = (known after apply)
      + validation_method         = "DNS"

      + options (known after apply)
    }

  # aws_acm_certificate_validation.idp will be created
  + resource "aws_acm_certificate_validation" "idp" {
      + certificate_arn         = (known after apply)
      + id                      = (known after apply)
      + validation_record_fqdns = (known after apply)
    }

  # aws_alb_listener_rule.idp_protocol_version will be created
  + resource "aws_alb_listener_rule" "idp_protocol_version" {
      + arn          = (known after apply)
      + id           = (known after apply)
      + listener_arn = (known after apply)
      + priority     = 100
      + tags_all     = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + action {
          + order            = (known after apply)
          + target_group_arn = (known after apply)
          + type             = "forward"
        }

      + condition {
          + path_pattern {
              + values = [
                  + "/*/v?/*",
                  + "/.well-known/openid-configuration",
                ]
            }
        }
    }

  # aws_iam_access_key.idp_send_email will be created
  + resource "aws_iam_access_key" "idp_send_email" {
      + create_date                    = (known after apply)
      + encrypted_secret               = (known after apply)
      + encrypted_ses_smtp_password_v4 = (known after apply)
      + id                             = (known after apply)
      + key_fingerprint                = (known after apply)
      + secret                         = (sensitive value)
      + ses_smtp_password_v4           = (sensitive value)
      + status                         = "Active"
      + user                           = "idp_send_email"
    }

  # aws_iam_group.idp_send_email will be created
  + resource "aws_iam_group" "idp_send_email" {
      + arn       = (known after apply)
      + id        = (known after apply)
      + name      = "idp_send_email"
      + path      = "/"
      + unique_id = (known after apply)
    }

  # aws_iam_group_membership.idp_send_email will be created
  + resource "aws_iam_group_membership" "idp_send_email" {
      + group = "idp_send_email"
      + id    = (known after apply)
      + name  = "idp_send_email"
      + users = [
          + "idp_send_email",
        ]
    }

  # aws_iam_group_policy_attachment.idp_send_email will be created
  + resource "aws_iam_group_policy_attachment" "idp_send_email" {
      + group      = "idp_send_email"
      + id         = (known after apply)
      + policy_arn = (known after apply)
    }

  # aws_iam_policy.idp_send_email will be created
  + resource "aws_iam_policy" "idp_send_email" {
      + arn              = (known after apply)
      + attachment_count = (known after apply)
      + id               = (known after apply)
      + name             = "idp_send_email"
      + name_prefix      = (known after apply)
      + path             = "/"
      + policy           = (known after apply)
      + policy_id        = (known after apply)
      + tags_all         = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
    }

  # aws_iam_user.idp_send_email will be created
  + resource "aws_iam_user" "idp_send_email" {
      + arn           = (known after apply)
      + force_destroy = false
      + id            = (known after apply)
      + name          = "idp_send_email"
      + path          = "/"
      + tags_all      = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + unique_id     = (known after apply)
    }

  # aws_lb.idp will be created
  + resource "aws_lb" "idp" {
      + arn                                                          = (known after apply)
      + arn_suffix                                                   = (known after apply)
      + client_keep_alive                                            = 3600
      + desync_mitigation_mode                                       = "defensive"
      + dns_name                                                     = (known after apply)
      + drop_invalid_header_fields                                   = true
      + enable_deletion_protection                                   = true
      + enable_http2                                                 = true
      + enable_tls_version_and_cipher_suite_headers                  = false
      + enable_waf_fail_open                                         = false
      + enable_xff_client_port                                       = false
      + enforce_security_group_inbound_rules_on_private_link_traffic = (known after apply)
      + id                                                           = (known after apply)
      + idle_timeout                                                 = 60
      + internal                                                     = false
      + ip_address_type                                              = (known after apply)
      + load_balancer_type                                           = "application"
      + name                                                         = "idp"
      + name_prefix                                                  = (known after apply)
      + preserve_host_header                                         = false
      + security_groups                                              = [
          + null,
        ]
      + subnets                                                      = [
          + "subnet-0133239e9f30e9b85",
          + "subnet-01cc2a8428d4971fc",
          + "subnet-0251ed3bd219fb8e4",
        ]
      + tags                                                         = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all                                                     = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + vpc_id                                                       = (known after apply)
      + xff_header_processing_mode                                   = "append"
      + zone_id                                                      = (known after apply)

      + access_logs {
          + bucket  = "cbs-satellite-957818836222"
          + enabled = true
          + prefix  = "lb_logs"
        }

      + subnet_mapping (known after apply)
    }

  # aws_lb_listener.idp will be created
  + resource "aws_lb_listener" "idp" {
      + arn               = (known after apply)
      + certificate_arn   = (known after apply)
      + id                = (known after apply)
      + load_balancer_arn = (known after apply)
      + port              = 443
      + protocol          = "HTTPS"
      + ssl_policy        = "ELBSecurityPolicy-TLS13-1-2-2021-06"
      + tags              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all          = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + default_action {
          + order            = (known after apply)
          + target_group_arn = (known after apply)
          + type             = "forward"
        }

      + mutual_authentication (known after apply)
    }

  # aws_lb_listener.idp_http_redirect will be created
  + resource "aws_lb_listener" "idp_http_redirect" {
      + arn               = (known after apply)
      + id                = (known after apply)
      + load_balancer_arn = (known after apply)
      + port              = 80
      + protocol          = "HTTP"
      + ssl_policy        = (known after apply)
      + tags              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all          = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + default_action {
          + order = (known after apply)
          + type  = "redirect"

          + redirect {
              + host        = "#{host}"
              + path        = "/#{path}"
              + port        = "443"
              + protocol    = "HTTPS"
              + query       = "#{query}"
              + status_code = "HTTP_301"
            }
        }

      + mutual_authentication (known after apply)
    }

  # aws_lb_target_group.idp["HTTP1"] will be created
  + resource "aws_lb_target_group" "idp" {
      + arn                                = (known after apply)
      + arn_suffix                         = (known after apply)
      + connection_termination             = (known after apply)
      + deregistration_delay               = "30"
      + id                                 = (known after apply)
      + ip_address_type                    = (known after apply)
      + lambda_multi_value_headers_enabled = false
      + load_balancer_arns                 = (known after apply)
      + load_balancing_algorithm_type      = (known after apply)
      + load_balancing_anomaly_mitigation  = (known after apply)
      + load_balancing_cross_zone_enabled  = (known after apply)
      + name                               = (known after apply)
      + name_prefix                        = (known after apply)
      + port                               = 8080
      + preserve_client_ip                 = (known after apply)
      + protocol                           = "HTTPS"
      + protocol_version                   = "HTTP1"
      + proxy_protocol_v2                  = false
      + slow_start                         = 0
      + tags                               = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all                           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + target_type                        = "ip"
      + vpc_id                             = "vpc-0e852a6f3554a8bca"

      + health_check {
          + enabled             = true
          + healthy_threshold   = 3
          + interval            = 30
          + matcher             = "200-399"
          + path                = "/debug/healthz"
          + port                = "traffic-port"
          + protocol            = "HTTPS"
          + timeout             = (known after apply)
          + unhealthy_threshold = 3
        }

      + stickiness {
          + cookie_duration = 86400
          + enabled         = true
          + type            = "lb_cookie"
        }

      + target_failover (known after apply)

      + target_group_health (known after apply)

      + target_health_state (known after apply)
    }

  # aws_lb_target_group.idp["HTTP2"] will be created
  + resource "aws_lb_target_group" "idp" {
      + arn                                = (known after apply)
      + arn_suffix                         = (known after apply)
      + connection_termination             = (known after apply)
      + deregistration_delay               = "30"
      + id                                 = (known after apply)
      + ip_address_type                    = (known after apply)
      + lambda_multi_value_headers_enabled = false
      + load_balancer_arns                 = (known after apply)
      + load_balancing_algorithm_type      = (known after apply)
      + load_balancing_anomaly_mitigation  = (known after apply)
      + load_balancing_cross_zone_enabled  = (known after apply)
      + name                               = (known after apply)
      + name_prefix                        = (known after apply)
      + port                               = 8080
      + preserve_client_ip                 = (known after apply)
      + protocol                           = "HTTPS"
      + protocol_version                   = "HTTP2"
      + proxy_protocol_v2                  = false
      + slow_start                         = 0
      + tags                               = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all                           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + target_type                        = "ip"
      + vpc_id                             = "vpc-0e852a6f3554a8bca"

      + health_check {
          + enabled             = true
          + healthy_threshold   = 3
          + interval            = 30
          + matcher             = "200-399"
          + path                = "/debug/healthz"
          + port                = "traffic-port"
          + protocol            = "HTTPS"
          + timeout             = (known after apply)
          + unhealthy_threshold = 3
        }

      + stickiness {
          + cookie_duration = 86400
          + enabled         = true
          + type            = "lb_cookie"
        }

      + target_failover (known after apply)

      + target_group_health (known after apply)

      + target_health_state (known after apply)
    }

  # aws_route53_record.idp will be created
  + resource "aws_route53_record" "idp" {
      + allow_overwrite = (known after apply)
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = "auth.forms-formulaires.alpha.canada.ca"
      + type            = "A"
      + zone_id         = "Z1031499PBK3926Y7HKK"

      + alias {
          + evaluate_target_health = true
          + name                   = (known after apply)
          + zone_id                = (known after apply)
        }
    }

  # aws_route53_record.idp_dkim_CNAME[0] will be created
  + resource "aws_route53_record" "idp_dkim_CNAME" {
      + allow_overwrite = (known after apply)
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = (known after apply)
      + records         = (known after apply)
      + ttl             = 300
      + type            = "CNAME"
      + zone_id         = "Z1031499PBK3926Y7HKK"
    }

  # aws_route53_record.idp_dkim_CNAME[1] will be created
  + resource "aws_route53_record" "idp_dkim_CNAME" {
      + allow_overwrite = (known after apply)
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = (known after apply)
      + records         = (known after apply)
      + ttl             = 300
      + type            = "CNAME"
      + zone_id         = "Z1031499PBK3926Y7HKK"
    }

  # aws_route53_record.idp_dkim_CNAME[2] will be created
  + resource "aws_route53_record" "idp_dkim_CNAME" {
      + allow_overwrite = (known after apply)
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = (known after apply)
      + records         = (known after apply)
      + ttl             = 300
      + type            = "CNAME"
      + zone_id         = "Z1031499PBK3926Y7HKK"
    }

  # aws_route53_record.idp_dmarc_TXT will be created
  + resource "aws_route53_record" "idp_dmarc_TXT" {
      + allow_overwrite = (known after apply)
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = "_dmarc.auth.forms-formulaires.alpha.canada.ca"
      + records         = [
          + "v=DMARC1; p=reject; sp=reject; pct=100; rua=mailto:[email protected]",
        ]
      + ttl             = 300
      + type            = "TXT"
      + zone_id         = "Z1031499PBK3926Y7HKK"
    }

  # aws_route53_record.idp_ses_verification_TXT will be created
  + resource "aws_route53_record" "idp_ses_verification_TXT" {
      + allow_overwrite = (known after apply)
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = (known after apply)
      + records         = (known after apply)
      + ttl             = 600
      + type            = "TXT"
      + zone_id         = "Z1031499PBK3926Y7HKK"
    }

  # aws_route53_record.idp_spf_TXT will be created
  + resource "aws_route53_record" "idp_spf_TXT" {
      + allow_overwrite = (known after apply)
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = "auth.forms-formulaires.alpha.canada.ca"
      + records         = [
          + "v=spf1 include:amazonses.com -all",
        ]
      + ttl             = 300
      + type            = "TXT"
      + zone_id         = "Z1031499PBK3926Y7HKK"
    }

  # aws_route53_record.idp_validation["auth.forms-formulaires.alpha.canada.ca"] will be created
  + resource "aws_route53_record" "idp_validation" {
      + allow_overwrite = true
      + fqdn            = (known after apply)
      + id              = (known after apply)
      + name            = (known after apply)
      + records         = (known after apply)
      + ttl             = 60
      + type            = (known after apply)
      + zone_id         = "Z1031499PBK3926Y7HKK"
    }

  # aws_secretsmanager_secret.zidatel_database_proxy_auth will be created
  + resource "aws_secretsmanager_secret" "zidatel_database_proxy_auth" {
      + arn                            = (known after apply)
      + force_overwrite_replica_secret = false
      + id                             = (known after apply)
      + name                           = "zidatel_database_proxy_auth"
      + name_prefix                    = (known after apply)
      + policy                         = (known after apply)
      + recovery_window_in_days        = 30
      + tags                           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all                       = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }

      + replica (known after apply)
    }

  # aws_secretsmanager_secret_version.zidatel_database_proxy_auth will be created
  + resource "aws_secretsmanager_secret_version" "zidatel_database_proxy_auth" {
      + arn            = (known after apply)
      + id             = (known after apply)
      + secret_id      = (known after apply)
      + secret_string  = (sensitive value)
      + version_id     = (known after apply)
      + version_stages = (known after apply)
    }

  # aws_ses_domain_dkim.idp will be created
  + resource "aws_ses_domain_dkim" "idp" {
      + dkim_tokens = (known after apply)
      + domain      = "auth.forms-formulaires.alpha.canada.ca"
      + id          = (known after apply)
    }

  # aws_ses_domain_identity.idp will be created
  + resource "aws_ses_domain_identity" "idp" {
      + arn                = (known after apply)
      + domain             = "auth.forms-formulaires.alpha.canada.ca"
      + id                 = (known after apply)
      + verification_token = (known after apply)
    }

  # aws_ses_domain_identity_verification.idp will be created
  + resource "aws_ses_domain_identity_verification" "idp" {
      + arn    = (known after apply)
      + domain = (known after apply)
      + id     = (known after apply)
    }

  # aws_shield_protection.idp will be created
  + resource "aws_shield_protection" "idp" {
      + arn          = (known after apply)
      + id           = (known after apply)
      + name         = "LoadBalancerIdP"
      + resource_arn = (known after apply)
      + tags_all     = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
    }

  # aws_ssm_parameter.idp_database_cluster_admin_password will be created
  + resource "aws_ssm_parameter" "idp_database_cluster_admin_password" {
      + arn            = (known after apply)
      + data_type      = (known after apply)
      + id             = (known after apply)
      + insecure_value = (known after apply)
      + key_id         = (known after apply)
      + name           = "idp_database_cluster_admin_password"
      + tags           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all       = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tier           = (known after apply)
      + type           = "SecureString"
      + value          = (sensitive value)
      + version        = (known after apply)
    }

  # aws_ssm_parameter.idp_database_cluster_admin_username will be created
  + resource "aws_ssm_parameter" "idp_database_cluster_admin_username" {
      + arn            = (known after apply)
      + data_type      = (known after apply)
      + id             = (known after apply)
      + insecure_value = (known after apply)
      + key_id         = (known after apply)
      + name           = "idp_database_cluster_admin_username"
      + tags           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all       = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tier           = (known after apply)
      + type           = "SecureString"
      + value          = (sensitive value)
      + version        = (known after apply)
    }

  # aws_ssm_parameter.zitadel_admin_password will be created
  + resource "aws_ssm_parameter" "zitadel_admin_password" {
      + arn            = (known after apply)
      + data_type      = (known after apply)
      + id             = (known after apply)
      + insecure_value = (known after apply)
      + key_id         = (known after apply)
      + name           = "zitadel_admin_password"
      + tags           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all       = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tier           = (known after apply)
      + type           = "SecureString"
      + value          = (sensitive value)
      + version        = (known after apply)
    }

  # aws_ssm_parameter.zitadel_admin_username will be created
  + resource "aws_ssm_parameter" "zitadel_admin_username" {
      + arn            = (known after apply)
      + data_type      = (known after apply)
      + id             = (known after apply)
      + insecure_value = (known after apply)
      + key_id         = (known after apply)
      + name           = "zitadel_admin_username"
      + tags           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all       = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tier           = (known after apply)
      + type           = "SecureString"
      + value          = (sensitive value)
      + version        = (known after apply)
    }

  # aws_ssm_parameter.zitadel_database_host will be created
  + resource "aws_ssm_parameter" "zitadel_database_host" {
      + arn            = (known after apply)
      + data_type      = (known after apply)
      + id             = (known after apply)
      + insecure_value = (known after apply)
      + key_id         = (known after apply)
      + name           = "zitadel_database_host"
      + tags           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all       = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tier           = (known after apply)
      + type           = "SecureString"
      + value          = (sensitive value)
      + version        = (known after apply)
    }

  # aws_ssm_parameter.zitadel_database_name will be created
  + resource "aws_ssm_parameter" "zitadel_database_name" {
      + arn            = (known after apply)
      + data_type      = (known after apply)
      + id             = (known after apply)
      + insecure_value = (known after apply)
      + key_id         = (known after apply)
      + name           = "zitadel_database_name"
      + tags           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all       = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tier           = (known after apply)
      + type           = "SecureString"
      + value          = (sensitive value)
      + version        = (known after apply)
    }

  # aws_ssm_parameter.zitadel_database_user_password will be created
  + resource "aws_ssm_parameter" "zitadel_database_user_password" {
      + arn            = (known after apply)
      + data_type      = (known after apply)
      + id             = (known after apply)
      + insecure_value = (known after apply)
      + key_id         = (known after apply)
      + name           = "zitadel_database_user_password"
      + tags           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all       = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tier           = (known after apply)
      + type           = "SecureString"
      + value          = (sensitive value)
      + version        = (known after apply)
    }

  # aws_ssm_parameter.zitadel_database_user_username will be created
  + resource "aws_ssm_parameter" "zitadel_database_user_username" {
      + arn            = (known after apply)
      + data_type      = (known after apply)
      + id             = (known after apply)
      + insecure_value = (known after apply)
      + key_id         = (known after apply)
      + name           = "zitadel_database_user_username"
      + tags           = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tags_all       = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + tier           = (known after apply)
      + type           = "SecureString"
      + value          = (sensitive value)
      + version        = (known after apply)
    }

  # aws_ssm_parameter.zitadel_secret_key will be created
  + resource "aws_ssm_parameter" "zitadel_secret_key" {
      + arn            = (known after apply)
      + data_type      = (known after apply)
      + id             = (known after apply)
      + insecure_value = (known after apply)
      + key_id         = (known after apply)
      + name           = "zitadel_secret_key"
      + tags           = {
          + "CostCentre" = "forms-platform-production"
          +...
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_alb_listener_rule.idp_protocol_version"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_policy.idp_send_email"]
WARN - plan.json - main - Missing Common Tags: ["aws_iam_user.idp_send_email"]
WARN - plan.json - main - Missing Common Tags: ["aws_shield_protection.idp"]

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

Copy link

Production: alarms

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

Plan: 11 to add, 0 to change, 0 to destroy
Show summary
CHANGE NAME
add aws_cloudwatch_log_subscription_filter.idp_error_detection[0]
aws_cloudwatch_metric_alarm.idb_lb_healthy_host_count[&quot;HTTP1&quot;]
aws_cloudwatch_metric_alarm.idb_lb_healthy_host_count[&quot;HTTP2&quot;]
aws_cloudwatch_metric_alarm.idb_lb_unhealthy_host_count[&quot;HTTP1&quot;]
aws_cloudwatch_metric_alarm.idb_lb_unhealthy_host_count[&quot;HTTP2&quot;]
aws_cloudwatch_metric_alarm.idp_bounce_rate_high[0]
aws_cloudwatch_metric_alarm.idp_complaint_rate_high[0]
aws_cloudwatch_metric_alarm.idp_cpu_utilization_high_warn[0]
aws_cloudwatch_metric_alarm.idp_memory_utilization_high_warn[0]
aws_cloudwatch_metric_alarm.idp_rds_cpu_utilization[0]
aws_cloudwatch_metric_alarm.idp_response_time_warn[0]
Show plan
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_cloudwatch_log_subscription_filter.idp_error_detection[0] will be created
  + resource "aws_cloudwatch_log_subscription_filter" "idp_error_detection" {
      + destination_arn = "arn:aws:lambda:ca-central-1:957818836222:function:notify-slack"
      + distribution    = "ByLogStream"
      + filter_pattern  = "level=error"
      + id              = (known after apply)
      + log_group_name  = "/aws/ecs/idp/zitadel"
      + name            = "error_detection_in_idp_logs"
      + role_arn        = (known after apply)
    }

  # aws_cloudwatch_metric_alarm.idb_lb_healthy_host_count["HTTP1"] will be created
  + resource "aws_cloudwatch_metric_alarm" "idb_lb_healthy_host_count" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP LB Critical - no healthy HTTP1 hosts in a 1 minute period"
      + alarm_name                            = "IdP-HealthyHostCount-HTTP1"
      + arn                                   = (known after apply)
      + comparison_operator                   = "LessThanThreshold"
      + dimensions                            = {
          + "LoadBalancer" = "loadbalancer/app/idp/1234567890123456"
          + "TargetGroup"  = "targetgroup/idp-tg-http1-abc/1234567890123456"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 1
      + id                                    = (known after apply)
      + metric_name                           = "HealthyHostCount"
      + namespace                             = "AWS/ApplicationELB"
      + period                                = 60
      + statistic                             = "Maximum"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 1
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.idb_lb_healthy_host_count["HTTP2"] will be created
  + resource "aws_cloudwatch_metric_alarm" "idb_lb_healthy_host_count" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP LB Critical - no healthy HTTP2 hosts in a 1 minute period"
      + alarm_name                            = "IdP-HealthyHostCount-HTTP2"
      + arn                                   = (known after apply)
      + comparison_operator                   = "LessThanThreshold"
      + dimensions                            = {
          + "LoadBalancer" = "loadbalancer/app/idp/1234567890123456"
          + "TargetGroup"  = "targetgroup/idp-tg-http2-abc/1234567890123456"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 1
      + id                                    = (known after apply)
      + metric_name                           = "HealthyHostCount"
      + namespace                             = "AWS/ApplicationELB"
      + period                                = 60
      + statistic                             = "Maximum"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 1
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.idb_lb_unhealthy_host_count["HTTP1"] will be created
  + resource "aws_cloudwatch_metric_alarm" "idb_lb_unhealthy_host_count" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP LB Warning - unhealthy HTTP1 host count >= 1 in a 1 minute period"
      + alarm_name                            = "IdP-UnhealthyHostCount-HTTP1"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanOrEqualToThreshold"
      + dimensions                            = {
          + "LoadBalancer" = "loadbalancer/app/idp/1234567890123456"
          + "TargetGroup"  = "targetgroup/idp-tg-http1-abc/1234567890123456"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 1
      + id                                    = (known after apply)
      + metric_name                           = "UnHealthyHostCount"
      + namespace                             = "AWS/ApplicationELB"
      + ok_actions                            = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-ok",
        ]
      + period                                = 60
      + statistic                             = "Maximum"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 1
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.idb_lb_unhealthy_host_count["HTTP2"] will be created
  + resource "aws_cloudwatch_metric_alarm" "idb_lb_unhealthy_host_count" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP LB Warning - unhealthy HTTP2 host count >= 1 in a 1 minute period"
      + alarm_name                            = "IdP-UnhealthyHostCount-HTTP2"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanOrEqualToThreshold"
      + dimensions                            = {
          + "LoadBalancer" = "loadbalancer/app/idp/1234567890123456"
          + "TargetGroup"  = "targetgroup/idp-tg-http2-abc/1234567890123456"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 1
      + id                                    = (known after apply)
      + metric_name                           = "UnHealthyHostCount"
      + namespace                             = "AWS/ApplicationELB"
      + ok_actions                            = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-ok",
        ]
      + period                                = 60
      + statistic                             = "Maximum"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 1
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.idp_bounce_rate_high[0] will be created
  + resource "aws_cloudwatch_metric_alarm" "idp_bounce_rate_high" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP SES Warning - bounce rate >=7% over the last 12 hours"
      + alarm_name                            = "IdP-SESBounceRate"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanOrEqualToThreshold"
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 1
      + id                                    = (known after apply)
      + metric_name                           = "Reputation.BounceRate"
      + namespace                             = "AWS/SES"
      + ok_actions                            = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-ok",
        ]
      + period                                = 43200
      + statistic                             = "Average"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 0.07
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.idp_complaint_rate_high[0] will be created
  + resource "aws_cloudwatch_metric_alarm" "idp_complaint_rate_high" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP SES Warning - complaint rate >=0.4% over the last 12 hours"
      + alarm_name                            = "IdP-SESComplaintRate"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanOrEqualToThreshold"
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 1
      + id                                    = (known after apply)
      + metric_name                           = "Reputation.ComplaintRate"
      + namespace                             = "AWS/SES"
      + ok_actions                            = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-ok",
        ]
      + period                                = 43200
      + statistic                             = "Average"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 0.004
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.idp_cpu_utilization_high_warn[0] will be created
  + resource "aws_cloudwatch_metric_alarm" "idp_cpu_utilization_high_warn" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP ECS Warning - High CPU usage has been detected."
      + alarm_name                            = "IdP-CpuUtilizationWarn"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanThreshold"
      + dimensions                            = {
          + "ClusterName" = "idp"
          + "ServiceName" = "zitadel"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 2
      + id                                    = (known after apply)
      + metric_name                           = "CPUUtilization"
      + namespace                             = "AWS/ECS"
      + ok_actions                            = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-ok",
        ]
      + period                                = 120
      + statistic                             = "Maximum"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 50
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.idp_memory_utilization_high_warn[0] will be created
  + resource "aws_cloudwatch_metric_alarm" "idp_memory_utilization_high_warn" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP ECS Warning - High memory usage has been detected."
      + alarm_name                            = "IdP-MemoryUtilizationWarn"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanThreshold"
      + dimensions                            = {
          + "ClusterName" = "idp"
          + "ServiceName" = "zitadel"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 2
      + id                                    = (known after apply)
      + metric_name                           = "MemoryUtilization"
      + namespace                             = "AWS/ECS"
      + ok_actions                            = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-ok",
        ]
      + period                                = 120
      + statistic                             = "Maximum"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 50
      + treat_missing_data                    = "notBreaching"
    }

  # aws_cloudwatch_metric_alarm.idp_rds_cpu_utilization[0] will be created
  + resource "aws_cloudwatch_metric_alarm" "idp_rds_cpu_utilization" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP RDS Warning - high CPU use for RDS cluster in a 5 minute period"
      + alarm_name                            = "IdP-RDSCpuUtilization"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanThreshold"
      + dimensions                            = {
          + "DBClusterIdentifier" = "idp-cluster"
        }
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 1
      + id                                    = (known after apply)
      + metric_name                           = "CPUUtilization"
      + namespace                             = "AWS/RDS"
      + ok_actions                            = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-ok",
        ]
      + period                                = 300
      + statistic                             = "Average"
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 80
      + treat_missing_data                    = "missing"
    }

  # aws_cloudwatch_metric_alarm.idp_response_time_warn[0] will be created
  + resource "aws_cloudwatch_metric_alarm" "idp_response_time_warn" {
      + actions_enabled                       = true
      + alarm_actions                         = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-warning",
        ]
      + alarm_description                     = "IdP LB Warning - The latency of response times from the IdP are abnormally high."
      + alarm_name                            = "IdP-ResponseTimeWarn"
      + arn                                   = (known after apply)
      + comparison_operator                   = "GreaterThanThreshold"
      + datapoints_to_alarm                   = 2
      + evaluate_low_sample_count_percentiles = (known after apply)
      + evaluation_periods                    = 5
      + id                                    = (known after apply)
      + ok_actions                            = [
          + "arn:aws:sns:ca-central-1:957818836222:alert-ok",
        ]
      + tags_all                              = {
          + "CostCentre" = "forms-platform-production"
          + "Terraform"  = "true"
        }
      + threshold                             = 1
      + treat_missing_data                    = "notBreaching"

      + metric_query {
          + id          = "response_time"
          + return_data = true
            # (3 unchanged attributes hidden)

          + metric {
              + dimensions  = {
                  + "LoadBalancer" = "loadbalancer/app/idp/1234567890123456"
                }
              + metric_name = "TargetResponseTime"
              + namespace   = "AWS/ApplicationELB"
              + period      = 60
              + stat        = "Average"
                # (1 unchanged attribute hidden)
            }
        }
    }

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

Warning: Argument is deprecated

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

Use the aws_s3_bucket_lifecycle_configuration resource instead

(and 3 more similar warnings elsewhere)

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

Saved the plan to: plan.tfplan

To perform exactly these actions, run the following command to apply:
    terraform apply "plan.tfplan"
Show Conftest results
WARN - plan.json - main - Missing Common Tags: ["aws_athena_data_catalog.dynamodb"]
WARN - plan.json - main - Missing Common Tags: ["aws_athena_data_catalog.rds_data_catalog"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_event_rule.codedeploy_sns"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_log_group.notify_slack"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ELB_5xx_error_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ELB_healthy_hosts"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.UnHealthyHostCount-TargetGroup1"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.UnHealthyHostCount-TargetGroup2"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.alb_ddos"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.audit_log_dead_letter_queue_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.cognito_login_outside_canada_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.cognito_signin_exceeded"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ddos_detected_forms_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.ddos_detected_route53_warn[0]"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.forms_cpu_utilization_high_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.forms_memory_utilization_high_warn"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.healthcheck_lambda_form_archiver_invocations"]
WARN - plan.json - main - Missing Common Tags: ["aws_cloudwatch_metric_alarm.healthcheck_lambda_nagware_invocations_schedule"]
WARN - plan.json - main - Missing Common Tags:...

@patheard patheard merged commit c39cd54 into develop Sep 13, 2024
32 checks passed
@patheard patheard deleted the release-please--branches--develop branch September 13, 2024 12:38
@sre-read-write
Copy link
Contributor Author

🤖 Created releases:

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

Successfully merging this pull request may close these issues.

2 participants