この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
最近 Terraform に入門した西野です。
ひととおりチュートリアルを終え、いざ自分で .tf ファイルを書く段階になった途端、default セキュリティグループのルールを抹消したい欲求がフツフツとわき起こってきました。よくあることだと思います。 *1
Output Variables などを用いてこねくり回さないとだめなのだろうか…?と思いつつ公式ドキュメントを眺めていたところ、ちょうど良い Resource を見つけました。
aws_default_security_group
default セキュリティグループをあつかうための Resource は下記の aws_default_security_group です。
Resource: aws_default_security_group
通常の Resource の場合 Terraform は .tf ファイルにおける宣言によって対象の実体を 作成 します。
この aws_default_security_group の場合、既に存在する default セキュリティグループを 取り込む 動きをし、引数でわたされた設定で上書きするようです。
やってみた
新たな VPC を作成し、当該 VPC の dafault セキュリティグループからインバウンド/アウトバウンドルールを削除してみます。
main.tf
resource "aws_vpc" "vpc" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "vpc"
}
}
resource "aws_default_security_group" "default" {
vpc_id = aws_vpc.vpc.id
}
output "default_security_group_id" {
value = aws_default_security_group.default.id
}
8-10行目で書いたように、aws_default_security_group の引数に ingress および egress を指定しないだけでインバウンド/アウトバウンドルールが削除されます。
terraform apply
後にAWS CLI から確認してみます。
$ terraform apply
(略)
Outputs:
default_security_group_id = sg-097c5d767ea81e9e6
$ aws ec2 describe-security-groups --group-ids sg-097c5d767ea81e9e6
{
"SecurityGroups": [
{
"Description": "default VPC security group",
"GroupName": "default",
"IpPermissions": [],
"OwnerId": "XXXXXXXXXXXX",
"GroupId": "sg-097c5d767ea81e9e6",
"IpPermissionsEgress": [],
"VpcId": "vpc-03da122b6b0fbb94e"
}
]
}
インバウンドルール/アウトバウンドルールをあらわすIpPermissions
およびIpPermissionsEgress
が空になっていることがわかります。これが私の祈り、私の願い。
モジュール化してみた
すべての default セキュリティグループのルールを消し去るため、練習がてらモジュールを作ってみました。
ディレクトリツリー
.
├── main.tf
└── modules
└── vpc
└── main.tf
.tf ファイル
./modules/vpc/main.tf
variable "vpc_cidr_block" {}
variable "vpc_name" {}
resource "aws_vpc" "vpc" {
cidr_block = var.vpc_cidr_block
tags = {
Name = var.vpc_name
}
}
resource "aws_default_security_group" "default_sg" {
vpc_id = aws_vpc.vpc.id
}
./main.tf
module "vpc" {
source = "./modules/vpc"
vpc_cidr_block = "10.0.0.0/16"
vpc_name = "vpc"
}
終わりに
このブログがほんの少しでも世界を良くできれば嬉しいです。
コンサルティング部の西野 (@xiyegen) がお送りしました。
参考ブログ
Terraform RegistryのModuleを使ってAWSリソースを作成してみた