如何使用 Terraform 为 Elastic Beanstalk 环境定义条件(按环境)设置?

How can one define a conditional (per-environment) setting for Elastic Beanstalk environment with Terraform?

期望的结果

我想根据另一个变量 environment.

有条件地为 aws_elastic_beanstalk_environment Terraform 资源定义一个 setting

当前尝试

对于这种情况,我通常会使用 count:

resource "aws_elastic_beanstalk_environment" "backend_prod" {
  name                   = "backend-${var.env}"
  application            = aws_elastic_beanstalk_application.backend.name
  solution_stack_name    = "64bit Amazon Linux 2 v3.4.9 running Docker"
  wait_for_ready_timeout = "10m"

  # other settings omitted

  setting {
    count     = var.environment == "prod" ? 1 : 0
    namespace = "aws:elasticbeanstalk:application:environment"
    name      = "API_KEY"
    value     = var.api_key
  }
}

当前结果

不幸的是,每当我 运行 terraform plan 这导致:​​

An argument named "count" is not expected here.

您可以使用 dynamic block:

resource "aws_elastic_beanstalk_environment" "backend_prod" {
  name                   = "backend-${var.env}"
  application            = aws_elastic_beanstalk_application.backend.name
  solution_stack_name    = "64bit Amazon Linux 2 v3.4.9 running Docker"
  wait_for_ready_timeout = "10m"

  # other settings omitted

  dynamic "setting" {

    for_each     = var.environment == "prod" ? [1] : []
  
    content {
        namespace = "aws:elasticbeanstalk:application:environment"
        name      = "API_KEY"
        value     = var.api_key
    }
  }
}