今回はAWSのVPC関連のコードをまとめてみました!
Terraform Registoryがめちゃくちゃ優秀なので、英語がわからなくても翻訳使えばある程度はできるかなと思います。
が、私自身わからなくなった時に検索しても英語の記事が多くて困った経験があるので、ここにはAWS公式のリンクも所々に貼っています。
この記事が皆さんの参考になればと思います。
VPC
VPCとはVirtual Private Cloudの略。
AWS上に自分専用のネットワーク空間を構築することができます。
【VPCとは?】
VPCを作成するコードの例
resource "aws_vpc" "test" { cidr_block = "10.0.0.0/16" instance_tenancy = "default" tags = { Name = "test" } }
引数一覧
cidr_block(必須)
VPCのCIDRブロック
instance_tenancy(オプション)
VPC内に起動されるインスタンスのテナント属性。
デフォルトは「default」で、インスタンスがホスト上で共有される。
他のオプション(「dedicated」か「host」)を使用すると結構お金がかかる可能性あり。
【テナント属性】
enable_dns_support(オプション)
VPCでDNSサポートをenable(有効)/disable(無効)にする。
デフォルトはtrue。
【DNS】
enable_dns_hostnames(オプション)
VPCでDNSホスト名をenable(有効)/disable(無効)にする。
デフォルトはfalse。
【DNSホスト名】
enable_classic_link(オプション)
VPCのClassicLinkをenable(有効)/disable(無効)にする。
EC2 Classicをサポートする地域とアカウントでのみ有効。
デフォルトはfalse。
【ClassicLink】
【EC2 Classic】
enable_classiclink_dns_support(オプション)
VPCのClassicLink DNSサポートをenable(有効)/disable(無効)にする。
EC2 Classicをサポートする地域とアカウントでのみ有効。
assign_generated_ipv6_cidr_block(オプション)
単一のIPv6 CIDRブロックをVPCに関連付けるかどうか。
CIDR ブロックは /56 の固定長プレフィックスである。
AmazonのIPv6 アドレスプールからIPv6 CIDR ブロックをリクエストできる。
ただ、IPアドレスの範囲やCIDRブロックのサイズは指定できない。
デフォルトはfalse。
【IPv6用のVPCとサブネットのサイズ設定】
tags(オプション)
タグ(そのまんま)
Subnet
サブネットとは、VPC内に部屋を作るような形で作るネットワーク群のことです。
サブネット毎にルートテーブルをアタッチして外部や内部の接続について設定することができます。
【サブネット】
subnetを作成するコードの例
resource "aws_subnet" "test" { vpc_id = aws_vpc.test.id cidr_block = "10.0.1.0/24" tags = { Name = "test" } }
引数一覧
availability_zone(オプション)
サブネットのアベイラビリティーゾーン
availability_zone_id(オプション)
サブネットのアベイラビリティーゾーンのID
cidr_block(必須)
サブネットのCIDRブロック
ipv6_cidr_block(オプション)
CIDR表記のサブネットのIPv6ネットワーク範囲。
サブネットのサイズ設定で/ 64プレフィックス長を使用する必要がある。
map_public_ip_on_launch(オプション)
サブネットに起動されたインスタンスにパブリックIPアドレスを割り当てる場合はtrue。
デフォルトはfalse。
outpost_arn(オプション)
OutpostのARN
assign_ipv6_address_on_creation(オプション)
サブネットで作成されたネットワークインターフェイスにIPv6アドレスを割り当てる場合はtrue。
デフォルトはfalse。
vpc_id(必須)
VPCのID
tags(オプション)
タグ(そのまんま)
SecurityGroup
各インスタンスに設定することができる通信制御のサービス(ファイアウォール機能)です。
インバウンドはインスタンスに入ってくる通信の制御を行い、アウトバウンドはインスタンスから出る通信の制御を行なってます。
セキュリティグループを作成するコードの例
resource "aws_security_group" "test_sg" { name = "test_sg" description = "test" vpc_id = aws_vpc.test.id ingress { description = "TLS from VPC" from_port = 443 to_port = 443 protocol = "tcp" cidr_blocks = [aws_vpc.test.cidr_block] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } tags = { Name = "test_sg" } }
引数一覧
name(オプション)
セキュリティグループの名前。
省略した場合、ランダムな名前を割り当てる。
name_prefix(オプション)
指定したプレフィックスで始まる名前。
nameとは別。
description(オプション)
セキュリティグループの説明。
デフォルトは「Managed by Terraform」。
AWS GroupDescription属性にマップされるため、 更新可能な方法でセキュリティグループを分類する場合はタグの使用を推奨。
revoke_rules_on_delete(オプション)
ルール自体を削除する前に、Terraformにアタッチされたすべてのセキュリティグループのインバウンドとアウトバウンドのルールを取り消すように指示する。
通常は必要ないが、Elastic Map Reduceなどの特定のAWSサービスはサービスで使用されるセキュリティグループに必要なルールを自動的に追加する場合があり、それらのルールには依存関係を削除せずにセキュリティグループが破棄されないようにする循環依存関係が含まれる場合があります。
デフォルトはfalse。
vpc_id(オプション)
VPCのID
tags(オプション)
タグ(そのまんま)
ingress(オプション)
インバウンドルール。複数回指定できます。
egress(オプション)
アウトバウンドルール。複数回指定できます。
– ingress & egress 構築内容 –
・cidr_blocks(オプション) = CIDR ブロックのリスト
・ipv6_cidr_blocks(オプション) = IPv6 CIDR ブロックのリスト
・prefix_list_ids(オプション) = プレフィックスリストのIDのリスト
・from_port(必須) = 開始ポート(プロトコルが「icmp」または「icmpv6」の場合はICMPタイプ番号)
・protocol(必須) = プロトコル。 「-1」(全部)を選択する場合、「from_port」と「to_port」を0に指定する必要がある。
icmp、icmpv6、tcp、 udp、「-1」を指定できる。
・security_groups(オプション) = EC2-Classicを使用している場合はセキュリティグループのグループ名、VPCを使用している場合はグループIDのリスト。
・self(オプション) = trueの場合、セキュリティグループ自体がこの(インバウンド,アウトバウンド)ルールのソースとして追加される。
・to_port(必須) = 終了範囲ポート(プロトコルが「icmp」の場合はICMPコード)。
・description(オプション) = インバウンドルール,アウトバウンドルールの説明
Internet Gateway
VPCとインターネット間の通信を可能にするゲートウェイ。
【Internet Gatewayとは】
インターネットゲートウェイを作成するコードの例
resource "aws_internet_gateway" "gw" { vpc_id = aws_vpc.test.id tags = { Name = "test" } }
引数一覧
vpc_id(必須)
VPCのID
tags(オプション)
タグ(そのまんま)
NAT Gateway
プライベートサブネットから外部のインターネットに接続するためのゲートウェイ。
内部から外部に出る一方通行なので内部には入ることができない。安心!
【NATゲートウェイ】
NATゲートウェイを作成するコードの例
resource "aws_nat_gateway" "test" { allocation_id = aws_eip.nat.id subnet_id = aws_subnet.test.id tags = { Name = "gw NAT" } }
引数一覧
allocation_id(必須)
ゲートウェイのElastic IPアドレスのID
subnet_id(必須)
ゲートウェイを配置するサブネットのID
tags(オプション)
タグ(そのまんま)
Route Table
サブネット内のインスタンスの通信の宛先を定めた物です。
【ルートテーブル】
ルートテーブルを作成するコードの例
resource "aws_route_table" "test" { vpc_id = aws_vpc.test.id route { cidr_block = "10.0.1.0/24" gateway_id = aws_internet_gateway.test.id } route { ipv6_cidr_block = "::/0" egress_only_gateway_id = aws_egress_only_internet_gateway.test.id } tags = { Name = "test" } }
引数一覧
vpc_id(必須)
VPCのID
propagating_vgws(オプション)
仮想ゲートウェイのリスト
tags(オプション)
タグ(そのまんま)
route(オプション)
ルートオブジェクトのリスト
– route の構築内容 –
・cidr_block(必須) = ルートのCIDRブロック
・ipv6_cidr_block(オプション) = ルートのIPv6 CIDRブロック
・egress_only_gateway_id(オプション) = VPC(出力専用)インターネットゲートウェイのID
・gateway_id(オプション) = VPCインターネットゲートウェイまたは仮想プライベートゲートウェイのID
・instance_id(オプション) = EC2インスタンスのID
・nat_gateway_id(オプション) = NATゲートウェイのID
・network_interface_id(オプション) = EC2ネットワークインターフェイスのID
・transit_gateway_id(オプション) = EC2トランジットゲートウェイのID
・vpc_peering_connection_id(オプション) = VPCピアリング接続のID
ルートテーブルをアタッチするコードの例
resource "aws_route_table_association" "a" { subnet_id = aws_subnet.test.id route_table_id = aws_route_table.test.id }#サブネットにアタッチ resource "aws_route_table_association" "b" { gateway_id = aws_internet_gateway.test.id route_table_id = aws_route_table.test.id }#ゲートウェイにアタッチ
引数一覧
route_table_id(必須)
アタッチするルートテーブルのID
subnet_id(オプション)
関連付けるサブネットID。
gateway_idと一緒に指定することはできない。
gateway_id(オプション)
関連付けるゲートウェイのID。
subnet_idと一緒に指定することはできない。