#IAMユーザ作成
●サービス検索から【IAM】と入力
●左のダッシュボードからユーザークリック
●「ユーザーを追加」を選択
●ユーザー名を「Terraform」設定
●「プログラムによるアクセス」のチェックボックスにチェックをいれる
●「既存のポリシーを直接アタッチ」を選択し、「AdministratorAccess」ポリシー(管理者権限)を選択。
●タグは入力しない。
●「ユーザーの作成」 クリック
●アクセスキー のcsvをダウンロードして保存
#terraformをDockerで起動
vagrantへログイン
$ mkdir terraform && cd terraform
ホストのカレントディレクトリをコンテナ上へマウント( -v $(pwd):/terraform )してファイルの共有
$ docker run \
-e AWS_ACCESS_KEY_ID=AWS ACCESS KEY \
-e AWS_SECRET_ACCESS_KEY=AWS SECRET ACCESS KEY \
-v $(pwd):/terraform \
-w /terraform \
-it \
--entrypoint=ash \
hashicorp/terraform:0.11.13
Docker内でTerraform がインストールできてるか確認
$ terraform version
Terraform v0.11.13
#VPC作成
新しくパワーシェル起動してvagrant sshでホストOSに接続
& cd terraform
$ mkdir vpc && cd vpc
コンテナ内で同期できてるか確認
/terraform # ls
vpc
HCLを書く
VPCを立ち上げるためのコード
$ touch main.tf
$ vi main.tf
provider "aws" {
region = "us-west-2"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "vpc"
}
}
下記コンテナ内で実行
$ cd vpc
$ terraform init
$ terraform apply
Enter a value: と表示されたら yes と入力
awsコンソールへアクセスしてvpcが作成されていることを確認する
#リソースの変更
provider "aws" {
region = "us-west-2"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "vpc_aaaa"
}
}
applyの前にplanで確認
$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
aws_vpc.main: Refreshing state... (ID: vpc-0832c28bc984a91c4)
------------------------------------------------------------------------
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
~ aws_vpc.main
tags.Name: "vpc" => "vpc_aaaa"
Plan: 0 to add, 1 to change, 0 to destroy.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
$ terraform apply
awsコンソールで確認
#Terraformが管理しているリソース
$ terraform show
aws_vpc.main:
id = vpc-0832c28bc984a91c4
arn = arn:aws:ec2:us-west-2:491186103049:vpc/vpc-0832c28bc984a91c4
assign_generated_ipv6_cidr_block = false
cidr_block = 10.0.0.0/16
default_network_acl_id = acl-069cbe3977c81ffce
default_route_table_id = rtb-02832eeb3e6b31aee
default_security_group_id = sg-068d9e09d0f03d3c5
dhcp_options_id = dopt-a6e172de
enable_classiclink = false
enable_classiclink_dns_support = false
enable_dns_hostnames = false
enable_dns_support = true
instance_tenancy = default
ipv6_association_id =
ipv6_cidr_block =
main_route_table_id = rtb-02832eeb3e6b31aee
owner_id = 491186103049
tags.% = 1
tags.Name = vpc_aaaa
Terraformが管理しているリソースは terraform.tfstate というJSONファイルに格納
コードの適用を行う際はこのファイルを参照し、差分の確認
/terraform/vpc # ls
main.tf terraform.tfstate terraform.tfstate.backup
/terraform/vpc # cat terraform.tfstate
{
"version": 3,
"terraform_version": "0.11.13",
"serial": 2,
"lineage": "15d630e2-a839-c136-8a0b-a5edb07f01ef",
"modules": [
{
"path": [
"root"
],
"outputs": {},
"resources": {
"aws_vpc.main": {
"type": "aws_vpc",
"depends_on": [],
"primary": {
"id": "vpc-0832c28bc984a91c4",
"attributes": {
"arn": "arn:aws:ec2:us-west-2:491186103049:vpc/vpc-0832c28bc984a91c4",
"assign_generated_ipv6_cidr_block": "false",
"cidr_block": "10.0.0.0/16",
"default_network_acl_id": "acl-069cbe3977c81ffce",
"default_route_table_id": "rtb-02832eeb3e6b31aee",
"default_security_group_id": "sg-068d9e09d0f03d3c5",
"dhcp_options_id": "dopt-a6e172de",
"enable_classiclink": "false",
"enable_classiclink_dns_support": "false",
"enable_dns_hostnames": "false",
"enable_dns_support": "true",
"id": "vpc-0832c28bc984a91c4",
"instance_tenancy": "default",
"ipv6_association_id": "",
"ipv6_cidr_block": "",
"main_route_table_id": "rtb-02832eeb3e6b31aee",
"owner_id": "491186103049",
"tags.%": "1",
"tags.Name": "vpc_aaaa"
},
"meta": {
"schema_version": "1"
},
"tainted": false
},
"deposed": [],
"provider": "provider.aws"
}
},
"depends_on": []
}
]
}
削除
$ terraform destroy
awsコンソールで削除されてるか確認