メインコンテンツへスキップ
  1. Posts/

Terraform 小ネタ - formatlist

Terraform

Terraform の小ネタです。どうせまた自分でググることになるのでメモ。

formatlist です。 Security Group の設定を行う場合には IP アドレスではなく CIDR 表記で指定する必要があります。1つの IPv4 アドレスであれば /32 をつける必要があります。 でも、何かのリソースで作成された IP アドレスは IP アドレス単体でしか取得できなかったりします。例えば NAT Gateway の IP アドレス。 これに /32 をつけるのに便利なのが formatlist です。

次の例では concat と組み合わせていますが、これもメモです。ここで注目すべきは formatlist の部分。sprintf のように "%s/32" でフォーマットしていていて、これが後ろの module.vpc.nat_public_ips というリストの各要素に適用されて、その結果がリストで返されます。

resource "aws_security_group_rule" "some_ingress" {
  type              = "ingress"
  from_port         = var.some_port_number
  to_port           = var.some_port_number
  protocol          = "TCP"
  security_group_id = aws_security_group.some_sg.id
  cidr_blocks       = concat(concat(var.some_cidrs, var.additional_cidrs), formatlist("%s/32", module.vpc.nat_public_ips))
  description       = "example"
}

もう見つけたと思いますが format は sprintf のように使えます。

ネットワーク関連では cidrhost cidrnetmask cidrsubnet という便利 Function もあります。