amazon-web-services - 如何使用 Terraform 在 AWS SSM 参数中存储三元素元组?

标签 amazon-web-services terraform terraform-provider-aws

我正在使用 Terraform 创建私有(private)子网:

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 parameter对于aws_ssm_parameter resource无论指定的 type 为何,都必须是字符串类型。事实上,AWS 总是希望参数是字符串类型,如 the API docs 所示。并在 this answer 中提及StringList 类型本质上是客户端的元数据,客户端期望它是一个字符串,其中包含由逗号字符连接在一起的其他字符串。

要将您的元组类型从 aws_subnet.private.*.id 转换为列表,您可以使用 join function 加入它像这样:

resource "aws_ssm_parameter" "private_subnets_ids" {
  name  = "/${var.client_code}-${var.environment}/backend/SUBNET_IDS"
  type  = "StringList"
  value = join(",", aws_subnet.private.*.id)
}

关于amazon-web-services - 如何使用 Terraform 在 AWS SSM 参数中存储三元素元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64916301/

相关文章:

azure - 将现有 Azure 存储帐户导入 Terraform 资源

azure - 引用模块输出的值(对象映射)

amazon-web-services - Terraform - 为安全组迭代并创建入口规则

amazon-web-services - 无法生成 id 和 arn

amazon-web-services - 从 Raspberry Pi 访问 AWS VPC

amazon-web-services - 为什么我的 EC2 实例没有注册到 ECS 集群

kubernetes - 管理 kubernetes list 更改的正确方法是什么?

terraform - 未知 token IDENT aws_region

amazon-web-services - ALB 未正确传播响应 header

amazon-web-services - 如何通过其友好名称或使用 cloudformation 的 arn 从云上现有的 Lambda 函数获取角色名称?