如何使用 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
}
}
}
期望的结果
我想根据另一个变量 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
}
}
}