Terraformで最低限のAWS環境を作ってみた
タイトル通り。
Terraformってなに?
インフラの構成をコード化するもの。
AWSに限っていうと、VPCやSecurityGroup、GatewayからEC2などなどをコード化できる。 (Terraform自体はAWSだけでなく、DigitalOceanやHerokuなど各種サービスに対応している)
サーバの中身をコード化するChefやAnsibleなどとはそもそも異なる。
インストール
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で一通りの構成を作ってみた。
これで作れるものは以下。
気になったこと
tfstateファイルについて
terraform applyを実行すると、tfstateファイルが作成されます。
こいつが現在の生の構成を把握するファイルみたいなので、複数人で利用する場合は統一する必要があります。
インスタンスの設定変更について
EC2インスタンスを一度立ち上げた後に設定を変更する場合、なんと一度Destroyしてからの再作成となります。 SecurityGroupを追加してもそうなりました(ただ、タグの追加は大丈夫でした) 完璧にImmutable化できているのなら大丈夫ですが、そうでない場合やインスタンスの用途がDB系である場合は要注意かと思います。
感想
使ってて気持ちいい。 apply -> destroy -> applyして全く同じ環境ができるのはちょっと感動。 初めて構成管理ツール使った時の感覚を思い出しました。
とりあえずは軽めのところから実践投入する予定。