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 もあります。