Terraform创建Elastic Beanstalk环境时Subnets参数值类型错误求助
问题描述
在VPC内使用Terraform创建Elastic Beanstalk环境时,因单个子网会触发"至少需要两个子网"的错误,所以配置了两个子网,但执行terraform apply时出现以下错误:
Inappropriate value for attribute "value": string required.
相关Terraform代码片段:
resource "aws_elastic_beanstalk_application" "elasticapp" { name = var.elasticapp } resource "aws_elastic_beanstalk_environment" "beanstalkappenv" { name = var.beanstalkappenv application = aws_elastic_beanstalk_application.elasticapp.name solution_stack_name = var.solution_stack_name tier = var.tier setting { namespace = "aws:ec2:vpc" name = "VPCId" value = "${aws_vpc.prod-vpc.id}" } setting { namespace = "aws:ec2:vpc" name = "Subnets" value = ["${aws_subnet.prod-subnet-public-1.id}", "${aws_subnet.prod-subnet-public-2.id}"] } }
解决方案
错误根源在于Elastic Beanstalk的Subnets配置项要求逗号分隔的字符串,而非列表类型;同时Terraform的aws_elastic_beanstalk_environment资源中,setting块的value字段仅接受字符串值,不能直接传入列表。
修正代码的两种可行方式:
- 使用
join函数将子网ID列表拼接为逗号分隔的字符串(推荐,灵活性更高):
setting { namespace = "aws:ec2:vpc" name = "Subnets" value = join(",", [aws_subnet.prod-subnet-public-1.id, aws_subnet.prod-subnet-public-2.id]) }
- 手动拼接字符串(不推荐,扩展性差):
setting { namespace = "aws:ec2:vpc" name = "Subnets" value = "${aws_subnet.prod-subnet-public-1.id},${aws_subnet.prod-subnet-public-2.id}" }
另外需注意:你的代码中最后一个setting块缺少闭合的},需补上避免语法错误。
内容的提问来源于stack exchange,提问作者Mike D Hovhannisyan
相关产品推荐
相关产品推荐

