如何使用Terraform为Elastic Beanstalk环境定义按环境生效的条件配置
报错原因
count 是仅适用于顶级 resource、module 块或 dynamic 嵌套生成块的参数,无法直接在资源的原生嵌套配置块(例如本次场景中aws_elastic_beanstalk_environment的setting配置块)内使用,因此会触发「参数不被期望」的报错。
修复方案
使用Terraform提供的dynamic块语法实现嵌套配置块的条件生成,调整后的配置如下:
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" # 其余原有配置保持不变 dynamic "setting" { # 仅当环境为prod时生成当前setting配置块 for_each = var.environment == "prod" ? [1] : [] content { namespace = "aws:elasticbeanstalk:application:environment" name = "API_KEY" value = var.api_key } } }
上述配置的for_each逻辑和你原本期望的count逻辑完全一致:当var.environment等于prod时返回单元素列表,生成对应的setting块;否则返回空列表,不生成该配置块,完全满足条件化定义setting块的需求。
内容的提问来源于stack exchange,提问作者Blair Nangle
相关产品推荐
相关产品推荐

