mzumi's blog

Terraform を使って VPC 環境を構築する

August 13, 2016

今更ながら、Terraform に入門してみたので、その時のメモ。

Terraform をインストール

osx の場合、homebrew を使うと簡単にインストールすることができる

$ brew install terraform

プロバイダーの設定

最初に、AWS 使用するための設定を行う。
ファイル名は特に指定はなく、*.tf ファイルを作成すると実行時に読み込んでくれるようだ。
プロバイダーは AWS となるので、テンプレートには
AWS を使用するように、provider.tf のファイルを作成し、以下を記述する。

teffraform を使って、AWS の各種サービスを設定する際に
アクセスキーとシークレットキーを使用するのだが、
この管理方法はいくつかあるらしい。
ただ、今回は、公式ページに記述されている terraform.tfvarsに記述すする方法を採用する。

terraform.tfvars には以下を記述する。

もちろん実際には、取得しているアクセスキーとシークレットキーを記述する。ファイル名は terraform.tfvars にしておくと自動でそこで定義された値が読みこられる。
違うファイル名にした場合は、terraform を実行する際に、
-var-file="ファイル名"で指定する。

Terraform で VPC を設定する

まず、VPC の設定を行う。
vpc.tf というファイルを作成し、以下を内容を記述する。

とりあえず、状態で dry-run を実行する。
dry-run は terraform plan で実行できる。
実際に実行すると以下のような出力が表示される。

efreshing Terraform state prior to plan...


The Terraform execution plan has been generated and is shown below.
Resources are shown in alphabetical order for quick scanning. Green resources
will be created (or destroyed and then created if an existing resource
exists), yellow resources are being changed in-place, and red resources
will be destroyed.

Note: You didn't specify an "-out" parameter to save this plan, so when
"apply" is called, Terraform can't guarantee this is what will execute.

+ aws_vpc.vpc-1
    cidr_block:                "" => "10.0.0.0/16"
    default_network_acl_id:    "" => "<computed>"
    default_security_group_id: "" => "<computed>"
    dhcp_options_id:           "" => "<computed>"
    enable_classiclink:        "" => "<computed>"
    enable_dns_hostnames:      "" => "false"
    enable_dns_support:        "" => "true"
    instance_tenancy:          "" => "default"
    main_route_table_id:       "" => "<computed>"
    tags.#:                    "" => "1"
    tags.Name:                 "" => "vpc-1"


Plan: 1 to add, 0 to change, 0 to destroy

また、実行すると、terraform.tfstat というファイルが
作成される。これはインフラの状態を管理しているファイルらしい。
このファイルはバージョン管理してはいけないので、git の管理下から
外す。(複数人で作業する際は S3 などを使用するらいしいがそれは別の
機会に)

Terraform を実行

ファイル構成は以下のようになっている。

.
├── provider.tf
├── terraform.tfstate
├── terraform.tfvars
└── vpc.tf

実際に実行するコマンドは terraform apply になる。
実際に実行すると、以下の内容が出力される。

aws_vpc.vpc-1: Creating...
  cidr_block:                "" => "10.0.0.0/16"
  default_network_acl_id:    "" => "<computed>"
  default_security_group_id: "" => "<computed>"
  dhcp_options_id:           "" => "<computed>"
  enable_classiclink:        "" => "<computed>"
  enable_dns_hostnames:      "" => "false"
  enable_dns_support:        "" => "true"
  instance_tenancy:          "" => "default"
  main_route_table_id:       "" => "<computed>"
  tags.#:                    "" => "1"
  tags.Name:                 "" => "vpc-1"
aws_vpc.vpc-1: Creation complete

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

The state of your infrastructure has been saved to the path
below. This state is required to modify and destroy your
infrastructure, so keep it safe. To inspect the complete state
use the `terraform show` command.

State path: terraform.tfstate

で実際にコンソールで確認すると、、、作成されている!

これだけでは、何もできないので、gateway などを作成する必要があるが、今回はここまで。