amazon-web-services - 在 terraform 中使用模块将多个安全组分配给 ec2 时出错
问题描述
这是我的 ec2.tf
resource "aws_instance" "ec2_instance" {
# resource gets created if private_ip variable is not passed as a input.
count = var.instance_count
//"${length(compact(split(",", var.instance_count))) > 0 ? "${var.instance_count}" : 0}"
ami = "${element(split(",", var.ami_id), count.index)}"
instance_type = "${element(split(",", var.instance_type), count.index)}"
subnet_id = "${element(split("," ,var.subnet),count.index)}"
key_name = "${aws_key_pair.tmnl-infra-ssrv.key_name}"
associate_public_ip_address = "${var.associate_public_ip}"
disable_api_termination = "${var.disable_termination}"
vpc_security_group_ids = ["${element(split("@", var.security_group), 0)}"]
iam_instance_profile = "${element(split(",", var.iam_instance_profile), count.index)}"
ebs_optimized = "${element(split(",", var.ebs_optimized), count.index)}"
这是 main.tf 中 EC2 的模块
module "ec2" {
source = "../../euc-terraformcontrol-compute"
ami_id = "${element(split(",", var.ami_id), 0)},${element(split(",", var.ami_id), 1)},${element(split(",", var.ami_id), 2)},${element(split(",", var.ami_id), 3)},${element(split(",", var.ami_id), 4)},${element(split(",", var.ami_id), 5)},${element(split(",", var.ami_id), 6)},${element(split(",", var.ami_id), 7)}"
instance_count = "${element(split(",", var.instance_count), 0)}"
root_volume_size = "${element(split(",", var.root_volume_size),0)}"
subnet = "subnet-0be87b3442158715d,subnet-0cd01502c1a6f37d9,subnet-06785e23087afb9a6"
iam_instance_profile = "${element(split(",", var.iam_instance_profile),0)}"
#if multiple security group should be attached to each instance then the format will be "${var.sg1},${var.sg2},${var.sg3},${var.sg4}"
security_group = ["${element(split(",", module.security_groups.security_group_05_id),0)}","${element(split(",", module.security_groups.security_group_06_id),0)}"]
instance_type = "${element(split(",", var.instance_type), 0)},${element(split(",", var.instance_type), 1)},${element(split(",", var.instance_type), 2)},${element(split(",", var.instance_type), 3)},${element(split(",", var.instance_type), 4)},${element(split(",", var.instance_type), 5)},${element(split(",", var.instance_type), 6)},${element(split(",", var.instance_type), 7)}"
instance_name = "${element(split(",", var.instance_name), 0)},${element(split(",", var.instance_name), 1)},${element(split(",", var.instance_name), 2)},${element(split(",", var.instance_name), 3)},${element(split(",", var.instance_name), 4)},${element(split(",", var.instance_name), 5)},${element(split(",", var.instance_name), 6)},${element(split(",", var.instance_name), 7)}"
}
我在 tfvars 文件中的变量是:
security_group = "security_group_04_id@security_group_05_id@security_group_07_id"
现在我得到了两种类型的错误:
- 错误:属性值类型不正确
在 ....\xxxxxxxxxxxx\ec2.tf 第 20 行,在资源 "aws_instance" "ec2_instance": 20: vpc_security_group_ids = ["${element(split("@", var.security_group), 0)}"] | ---------------- | var.security_group 是具有 2 个元素的元组
“str”参数的值无效:需要字符串。
- 错误:启动源实例时出错:InvalidGroup.NotFound:VPC 'vpc-016113bafe6694c18' 中不存在安全组'sg-0a8a5220cf7ae4fff,sg-0d245af2b879c385d' 状态码:400,请求ID:291fda8a-7ec5-486b-b7a3b-9feb3bd
请帮助我解决这些错误。
解决方案
我在 ec2.tf 中做了这个改变
vpc_security_group_ids = "${var.security_group}"
我在 main.tf 中改变了这个
security_group =["${module.security_groups.security_group_04_id}", "${module.security_groups.security_group_05_id}"]
这对我有用。
推荐阅读
- java - 多次截图程序
- html - 可扩展文本的标题文本大小
- tsql - 如何在 SQL Server 中拒绝用户组几个小时的写入权限
- react-native - 如何使用 react-native-admob 显示 admob 插页式广告?
- windows-10 - 从 USB 安装 Windows 10
- visual-studio - MSbuild命令行和Visual Studio在代码分析上的区别
- vba - 如何防止代码发生任何更改并能够同时查看它?(VBA)
- java - 使用 listView 和适配器显示对象
- node.js - 我的节点代码中不断出现此错误。DeprecationWarning:不推荐调用不带回调的异步函数
- node.js - 服务器重新启动后议程作业不运行