Terraform で既存の AWS リソースを管理できるようにします。
#Terraform で管理するリソースの確認
今回は以下の通り
- VPC
- subnet
- SecurityGroup
- Key Pair
- Elastic IP Address
- EC2
#下準備
IAM ユーザーのアクセスキーを設定し、リソースへアクセスできるようにした準備を行います。
まず direnv をインストールします、以下の記事が参考になります。
direnv のインストールが完了したら、.envrc
ファイルを作成します。
export AWS_ACCESS_KEY_ID = "{アクセスキーId}"
export AWS_SECRET_ACCESS_KEY="{シークレットアクセスキー}"
これで、.envrc
以下の階層に入ると自動的に認証情報が適用されリソースへのアクセスが可能になります。
#テンプレートの作成
公式ページで各リソースの基本的なテンプレートを確認。
###例
VPC
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "main"
}
}
subnet
resource "aws_subnet" "main" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
tags = {
Name = "Main"
}
}
まず VPC のテンプレートを作成する。
ローカルでvpc.tf
を作成し、先程のコードをコピー。
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
instance_tenancy = "default"
tags = {
Name = "main"
}
}
テンプレートファイルの先頭でリソースの種類の指定と、名付けを行っています。
vpc.tf
と同じ階層でterraform import
を実行。
テンプレートファイルで指定したリソースの種類と名前、読み込むリソースの ID を指定して実行します。
terraform-server % ls
vpc.tf
terraform-server % terraform import aws_vpc.main {VPC ID}
aws_security_group_name: Importing from ID "xxxxxxxxxxxxxxxxxxxx"...
aws_security_group_name: Import prepared!
Prepared aws_security_group for import
aws_security_group_name: Refreshing state... [id=xxxxxxxxxxxxxxxxxxxx]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
続いてterraform plan
を実行して現在の環境とvpc.tf
の差分を確認します。
vpc.tf
を編集し、terraform plan
の実行結果が以下のようになったら次のリソースのテンプレート作成に移ります。
terraform-server % terraform plan
aws_vpc.main: Refreshing state... [id=vpc-xxxxxxxx]
No changes. Your infrastructure matches the configuration.
Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
#参考資料