TERRAFORM
15/08/21 @takshig
Terraform
HashiCorpのプロダクトの一つ
何が出来るの?
サーバー構成のコード化
サーバー構成のバージョン管理
様々なProviderに対応
AWS・Azure・GoogleCloud・Heroku・
DigitalOcean・Docker など
→設定ファイルを書いてコマンド一発で
 インフラ構築が出来る!
例えばAWS Route53
aws_route53.tf
variable "aws_access_key" {} // tfvarファイルか環境変数TF_VAR_aws_access_keyで定義
variable "aws_secret_key" {} // tfvarファイルか環境変数TF_VAR_aws_secret_keyで定義
provider "aws" {
access_key = "${var.aws_access_key}"
secret_key = "${var.aws_secret_key}"
region = "us-east-1"
}
resource "aws_route53_zone" "hoge_com" {
name = "hoge.com"
}
resource "aws_route53_record" "www" {
zone_id = "${aws_route53_zone.hoge_com.zone_id}"
name = "www.hoge.com"
type = "A"
ttl = "300"
records = ["100.100.100.100"]
}
例えばAWS Route53
1.まずはテスト
terraform plan
2.そして適用
terraform apply
3.できた→
他にも色々出来ます
AWSだと
● S3 バケット作成
● EC2 インスタンス・EIP・ELB作成管理
● RDS・DynamoDB Table作成
● CloudWatch Alarm設定
VPCの設定やIAM ユーザーの管理まで出来ます
他にも色々出来ます
Dockerだと
● コンテナを起動する
○ docker-composeと同じようなことが出来る
○ dockerコマンドのオプションが指定可能
※Docker Machineやベースのサーバーへの操作
も一元的に出来る
それ○○とどう違うの?
● Chef・Puppet
○ Terraformはあくまで初期リソースのセットアップ
○ TerraformからChefやPuppetを使うイメージ
● AWS CloudFormation
○ TerraformはAWS以外も利用できる
○ planでdry runができる
メリット
● あと変更点を追うことが出来る
○ だから構築ログを残さなくてもよい←重要
○ 戻すのも簡単
● PullRequestベースにすればダブルチェックも簡単
● 毎回Webにはいってぽちぽちしなくていい
○ コマンド一発でできる安心感
デメリット
● 状態が保存されているtfstateファイル管理が難しい
○ applyする全ての人が同じtfstateを使わないといけない
■ 一元的にCIでapplyすれば大丈夫
○ RDSのパスワードなどが含まれているため管理が難しい
■ 現状はAtlasかS3に格納が現実解
● applyが失敗することがある
○ 追加は手動で復帰できる(tfstateをいじらないとだめ)
○ 削除はあえて手動でやると割り切る

Terraform