雑記

インフラのことだったりプログラムのことだったりどうでもいいこと書いたり。要は雑記。

Terraformで最低限のAWS環境を作ってみた

タイトル通り。

Terraformってなに?

インフラの構成をコード化するもの。

AWSに限っていうと、VPCやSecurityGroup、GatewayからEC2などなどをコード化できる。 (Terraform自体はAWSだけでなく、DigitalOceanやHerokuなど各種サービスに対応している)

サーバの中身をコード化するChefやAnsibleなどとはそもそも異なる。

Terraform by HashiCorp

インストール

Macの場合はHomebrewで一発

% brew install terraform

2015/07時点の最新版である0.6がインストールされた。 以降、0.6でのお話し。

設定

tfファイルで構成を定義する。 以下、AWSインスタンスを作成する設定サンプル。

# Credential
provider "aws" {
    access_key = "xxxxxxxxxx"
    secret_key = "xxxxxxxxxx"
    region = "ap-northeast-1"
}

# Create instance
resource "aws_instance" "sample" {
    ami = "ami-cbf90ecb" # Amazon Linux AMI 2015.03 (HVM), SSD Volume Type
    instance_type = "t2.micro"
    tags {
      Name = "sample"
    }
}

コマンド

作成したtfファイルを元に適用のテストをする(ようはdry-run)

% terraform plan

作成したtfファイルを元に構成を適用する

% terraform apply

構成を全て破棄する

% terraform destroy

構成を確認する

% terraform show

試しに

AWSで一通りの構成を作ってみた。

github.com

これで作れるものは以下。

  • Key Pairs
  • VPC
  • Subnets
  • Internet Gateway
  • Route Tables
  • Security Groups
  • EC2
  • ELB

気になったこと

tfstateファイルについて

terraform applyを実行すると、tfstateファイルが作成されます。

こいつが現在の生の構成を把握するファイルみたいなので、複数人で利用する場合は統一する必要があります。

インスタンスの設定変更について

EC2インスタンスを一度立ち上げた後に設定を変更する場合、なんと一度Destroyしてからの再作成となります。 SecurityGroupを追加してもそうなりました(ただ、タグの追加は大丈夫でした) 完璧にImmutable化できているのなら大丈夫ですが、そうでない場合やインスタンスの用途がDB系である場合は要注意かと思います。

感想

使ってて気持ちいい。 apply -> destroy -> applyして全く同じ環境ができるのはちょっと感動。 初めて構成管理ツール使った時の感覚を思い出しました。

とりあえずは軽めのところから実践投入する予定。