amazon-web-services - 如何使用 Terraform 在 AWS SSM 参数中存储三元素元组?
问题描述
我正在使用 Terraform 创建私有子网:
resource "aws_subnet" "private" {
count = length(data.aws_availability_zones.available.names)
vpc_id = aws_vpc.main_vpc.id
cidr_block = cidrsubnet(var.vpc_cidr, 8, count.index + 10)
availability_zone = element(data.aws_availability_zones.available.names, count.index)
map_public_ip_on_launch = false
tags = {
Name = "${var.client_code}-${var.environment}-private-${element(data.aws_availability_zones.available.names, count.index)}"
}
}
后来我尝试使用以下方法创建 SSM 参数:
resource "aws_ssm_parameter" "private_subnets_ids" {
name = "/${var.client_code}-${var.environment}/backend/SUBNET_IDS"
type = "StringList"
value = aws_subnet.private.*.id
}
由于子网资源正在创建三个子网,因此会引发以下错误:
4: value = aws_subnet.private.*.id
|----------------
| aws_subnet.private is tuple with 3 elements
Inappropriate value for attribute "value": string required.
我应该如何将这三个元素元组传递给StringList
类型参数?
解决方案
无论指定如何,资源的value
参数都必须是字符串类型。事实上,AWS 总是期望参数是一个字符串类型,如API 文档中所见并在这个答案中提到,并且该类型本质上是客户端的元数据,以期望它是一个包含由逗号字符连接在一起的其他字符串的字符串.aws_ssm_parameter
type
StringList
要将元组类型从aws_subnet.private.*.id
转换为列表,您可以使用如下join
函数将其加入:
resource "aws_ssm_parameter" "private_subnets_ids" {
name = "/${var.client_code}-${var.environment}/backend/SUBNET_IDS"
type = "StringList"
value = join(",", aws_subnet.private.*.id)
}
推荐阅读
- ruby-on-rails - 使用 before_filter 访问两个模型认证
- python - 无法从 Firebird blob sub_type 0 字段中找到文件扩展名
- c# - 将字符串解析为日期时间:字符串未被识别为有效的日期时间
- javascript - 更新多个圆环图 d3.js 的大小和值
- python - 检查是否可以在不运行脚本的情况下进行所有导入
- ios - 在 ios 中的整个应用程序中限制底部的标签栏
- javascript - 如何合并复选框和日期选择器的结果
- swift - 苹果电视上的 .ism/manifest 格式
- django - 不同域和平台之间的单点登录
- android - Firebase setCurrentScreen() 作为第一个事件没有记录正确的值