前提条件
学習のため細かく分けて作成していきます。
バージョン情報
- Terraform:
Terraform v1.10.5
- AWS CLI:
aws-cli/2.24.11 Python/3.12.9 Windows/11 exe/AMD64
作業
AWS IAMユーザの作成
AWS CLI用のユーザを作成します。
- awscliユーザを作成
- アクセスキー作成
- IAM > セキュリティ認証情報 > アクセスキーを作成
- ユースケース:コマンドラインインターフェイス (CLI)
AWS CLI の設定
AWS CLI の認証情報を設定します。
PS C:\Users\username> aws configure
AWS Access Key ID [None]: AKIAxxxxxxxxxxxxxxxxxx # アクセスキーを入力
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxx # シークレットキーを入力
Default region name [None]: us-west-2 # デフォルトのリージョンを設定
Default output format [None]: json # 出力フォーマットを設定
設定された情報は以下のファイルに保存されます。
PS C:\Users\username\.aws> cat config
[default]
region = us-west-2
output = json
PS C:\Users\username\.aws> cat credentials
[default]
aws_access_key_id = AKIAxxxxxxxxxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxx
Terraformの作業ディレクトリ作成
Terraform の作業ディレクトリを作成し、移動します。
PS C:\Users\username> mkdir C:\work\Terraform\01_basic
PS C:\Users\username> cd C:\work\Terraform\01_basic
Terraform 用の設定ファイル 01_vpc.tf
を作成しました。
Terraformの初期化/プラン作成/apply実行
Terraform の初期化
Terraform のバックエンドとプロバイダを初期化します。
PS C:\work\Terraform\01_basic> terraform.exe init
Terraform のプラン作成
リソースの作成計画を確認します。
PS C:\work\Terraform\01_basic> terraform plan
出力結果の一部:
Terraform will perform the following actions:
# aws_vpc.terraform-vpc will be created
+ resource "aws_vpc" "terraform-vpc" {
+ cidr_block = "10.0.0.0/16"
+ enable_dns_hostnames = true
+ enable_dns_support = true
+ tags = {
+ "Name" = "terraform"
}
}
Terraform の適用
リソースを適用し、VPC を作成します。
PS C:\work\Terraform\01_basic> terraform apply
プロンプトが表示されるので、yes
を入力。
Enter a value: yes
適用が完了すると、以下のように表示されます。
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
作成したVPCの確認
作成した VPC を AWS CLI で確認します。
PS C:\work\Terraform\01_basic> aws ec2 describe-vpcs
出力結果の一部:
{
"Vpcs": [
{
"VpcId": "vpc-xxxxxxxxxxxxxxxxxxx",
"CidrBlock": "10.0.0.0/16",
"Tags": [
{
"Key": "Name",
"Value": "terraform"
}
],
"State": "available"
}
]
}
AWS VPCパラメータについて
パラメータ一覧
参照:パラメータ名 | 説明 |
---|---|
cidr_block |
VPCのIPv4 CIDRブロック。明示的に設定するか、IPAMを使用して ipv4_netmask_length から導出可能。 |
instance_tenancy |
VPCに起動するインスタンスのテナンシーオプション。デフォルトは default 。dedicated を選択すると、専用ホストで実行され、追加料金が発生する。 |
ipv4_ipam_pool_id |
このVPCのCIDRを割り当てるためのIPv4 IPAMプールのID。IPAMを使用してIPアドレス管理を自動化できる。 |
ipv4_netmask_length |
VPCに割り当てるIPv4 CIDRのネットマスク長。ipv4_ipam_pool_id の指定が必要。 |
ipv6_cidr_block |
IPAMプールからリクエストするIPv6 CIDRブロック。明示的に設定するか、ipv6_netmask_length から導出可能。 |
ipv6_ipam_pool_id |
IPv6用のIPAMプールID。assign_generated_ipv6_cidr_block と競合する。 |
ipv6_netmask_length |
IPAMプールからリクエストするネットマスク長。ipv6_cidr_block と競合する。値は 44 ~ 60 の4単位の増分で指定可能。 |
ipv6_cidr_block_network_border_group |
VPCにIPv6 CIDRを割り当てる際のデフォルトのネットワークボーダーグループ(通常はVPCのリージョン)。ローカルゾーンなど特定のグループに変更可能。 |
enable_dns_support |
VPCでDNSサポートを有効/無効にするブール値。デフォルトは true 。 |
enable_network_address_usage_metrics |
VPCでネットワークアドレス使用状況のメトリクスを有効にするかどうかを示す。デフォルトは false 。 |
enable_dns_hostnames |
VPCでDNSホスト名のサポートを有効/無効にするブール値。デフォルトは false 。 |
assign_generated_ipv6_cidr_block |
Amazonが提供する /56 プレフィックス長のIPv6 CIDRブロックを要求。範囲やサイズの指定は不可。デフォルトは false 。ipv6_ipam_pool_id と競合。 |
tags |
リソースに割り当てるタグのマップ。プロバイダーのデフォルトタグ設定がある場合、キーが一致すると上書きされる。 |
arn |
VPCのAmazon Resource Name (ARN)。 |
id |
VPCのID。 |
instance_tenancy |
VPC内で起動するインスタンスのテナンシー。 |
dhcp_options_id |
VPCのDHCPオプションID。 |
enable_dns_support |
VPCのDNSサポートが有効かどうか。 |
enable_network_address_usage_metrics |
VPCのネットワークアドレス使用メトリクスが有効かどうか。 |
enable_dns_hostnames |
VPCのDNSホスト名サポートが有効かどうか。 |
main_route_table_id |
このVPCに関連付けられたメインルートテーブルのID。aws_main_route_table_association を使用して変更可能。 |
default_network_acl_id |
VPC作成時にデフォルトで作成されるネットワークACLのID。 |
default_security_group_id |
VPC作成時にデフォルトで作成されるセキュリティグループのID。 |
default_route_table_id |
VPC作成時にデフォルトで作成されるルートテーブルのID。 |
ipv6_association_id |
IPv6 CIDRブロックの関連付けID。 |
ipv6_cidr_block_network_border_group |
ネットワークボーダーグループのゾーン名。 |
owner_id |
VPCを所有するAWSアカウントのID。 |
tags_all |
リソースに割り当てられたタグのマップ(プロバイダーのデフォルトタグを含む)。 |
まとめ
- AWS CLI の設定を行い、Terraform で VPC を作成しました。
-
terraform init
で初期化し、terraform plan
でプランを確認。 -
terraform apply
を実行し、VPC の作成を確認。 -
aws ec2 describe-vpcs
で作成された VPC を確認。
この学習を通じて、AWS に VPC を Terraform で作成する手順を理解しました。
次回は サブネットの設定 を行います。