簡體   English   中英

如何使用 Terraform 在 AWS SSM 參數中存儲三元素元組?

[英]How can I store a three element tuple in AWS SSM parameter with Terraform?

我正在使用 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_ssm_parameter資源必須是字符串類型無論的type指定。 事實上,AWS 總是希望參數是在API 文檔中看到並在本答案中提到的字符串類型,並且StringList類型本質上是客戶端的元數據,希望它是一個包含其他字符串的字符串,用逗號連接在一起特點。

要將您的元組類型從aws_subnet.private.*.id轉換為列表,您可以使用join函數將其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)
}

這是完整的示例:

resource "aws_ssm_parameter" "SubnetIDs" {
  name        = "SubnetIDs"
  description = "SubnetIDs"
  type        = "StringList"
  value       = join(", ", aws_subnet.private-subnet.*.id)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM