2020/06/27
TerraformでAWSのセキュリティグループをListで定義してみた
概要
terraformで環境構築を行っていますが、eksのserviceで自動作成されるsecurity groupの定義を後付けて設定しています。
ただ、これは環境毎(開発/ステージング/本番)に異なるので、変数で定義して反映するようにしました。
terraformの for_each
と dynamic
を組み合わせて、複数の定義を一括で登録できるようにしています。
実装内容
変数の定義
以下のような感じで、 variable.tf
に定義します。
variable "ingress-list" {
default = [
{
description = "Allow nlb to access cluster node",
from_port = 31579
to_port = 31579
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
self = false
},
{
description = "Allow nlb to access cluster node",
from_port = 31579
to_port = 31579
protocol = "udp"
cidr_blocks = ["0.0.0.0/0"]
self = false
}
]
}
変数の活用
resource "aws_security_group" "my-security-group" {
name = "my-security-group-${terraform.workspace}"
description = "My Security group."
vpc_id = aws_vpc.my-vpc.id
tags = merge(map("Name", "my-security-group"))
dynamic "ingress" {
for_each = var.ingress-list
content {
description = ingress.value["description"]
from_port = ingress.value["from_port"]
to_port = ingress.value["to_port"]
protocol = ingress.value["protocol"]
cidr_blocks = ingress.value["cidr_blocks"]
self = ingress.value["self"]
}
}
}
for_each
を使って、変数に定義されているものを一括で登録することができます。
以上です。
関連する記事
EKSのロードバランサーでIPアドレスのアクセス制限を設定する
EKSで構築しているネットワークロードバランサータイプのServiceにIP Whitelistを設定しました。
EKSのバージョンをアップグレードする
開発に利用しているEKSのバージョンをアップグレードしました
tfenvでterraformの複数バージョンを管理
tfenvという便利なツールがあったので、それを使ってローカル環境のterraformの複数バージョンの管理をすることにしました
[EKS]NLB+NginxでClientのIPアドレスを取得する
EKS上にdeployしたnginxをNetwork Load Balancerを使って外部公開した時に接続元のIPアドレスを取得する対応をしました