最初に
terraformを業務で使用することになりました。
そのため勉強したことをまとめています。
terraform プレフィックスリスト作成
※値は意味のないものに変更しています。
※outputsも記載しないとtfstateファイルから値を取得できないため記載してください。
# プロバイダーとプロファイルの指定
provider "aws" {
shared_credentials_files = ["~/.aws/credentials"]
region = "ap-northeast-1"
profile = "profile-name"
}
# プレフィックスリストの作成
resource "aws_ec2_managed_prefix_list" "prefix" {
name = "prefix"
# 設定IPアドレスの種類を指定
address_family = "IPv4"
# プレフィックスリストに含められる数の最大数
# 数に上限はありませんがセキュリティグループには最大60個しか登録できません。
# そのためセキュリティグループで使用したい場合は実質上限は60個になります。
max_entries = 5
entry {
cidr = "0.0.0.0/32"
description = "test"
}
tags = {
Name = "prefix"
}
}
terraform セキュリティグループ作成
※値は意味のないものに変更しています。
※outputsも記載しないとtfstateファイルから値を取得できないため記載してください。
# プロバイダーとプロファイルの指定
provider "aws" {
shared_credentials_files = ["~/.aws/credentials"]
region = "ap-northeast-1"
profile = "profile-name"
}
# alb用セキュリティグループ作成
resource "aws_security_group" "test-alb-sg" {
# outputsで取得可能にしたvpc.idを指定してください。
# 今回は省略していますがdataで事前に情報を取得する必要があります。
vpc_id = "vpc.id"
name = "test-alb-sg"
# インバウンドルールを指定しています。
ingress {
description = "HTTP"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "HTTPS"
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# アウトバウンドルールを指定しています。
# -1はすべてのプロトコルを許可しています。
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "test-alb-sg"
}
}
# ec2用セキュリティグループ作成
resource "aws_security_group" "test-ec2-sg" {
vpc_id = "vpc.id"
name = "test-ec2-sg"
# インバウンドルールを指定しています。
# プレフィックスリストで設定したIPアドレスからのSSH接続を許可しています。
ingress {
description = "SSH"
from_port = 22
to_port = 22
protocol = "tcp"
prefix_list_ids = prefix.id
}
# albのセキュリティグループを通過してきた接続を許可しています。
ingress {
description = "alb"
from_port = 80
to_port = 80
protocol = "tcp"
security_groups = [
aws_security_group.test-alb-sg.id
]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "test-ec2-sg"
}
}
# rds用のセキュリティグループ作成
resource "aws_security_group" "test-rds-sg" {
vpc_id = "vpc.id"
name = "test-rds-sg"
# インバウンドルールを指定しています。
# ec2のセキュリティグループを通過してきた接続を許可しています。
ingress {
description = "MYSQL"
from_port = 3306
to_port = 3306
protocol = "tcp"
security_groups = [aws_security_group.test-ec2-sg.id]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "test-rds-sg"
}
}
最後に
outputsについては今回は記載しませんでした。
設定は必須です。(記載していませんが、、)
ec2やrdsについても書いて構築が出来たので書きたいです。