尋常でないもふもふ

a software engineer blog

2分でわかるTerraform

AWS のようなクラウドサービスによってインフラ構築がとても手軽に行えるようになりました。手動でインスタンスを起動して、サーバ設定を行い、Web サービスをインターネットに公開します。
では、手動で行った構築手順はどのように残していますか?どのようにチームメンバーに共有しているでしょうか。記憶を頼りにするだけなのか、それともブログや Wiki に文書化して残すのか。
Terraform の登場でいままで手動で行っていた作業をコードに落とすことができるようになりました。

なにができるのか

例えばインフラで AWS を利用してる場合、Terraform で用意されている AWS Provider によって、以下のような機能を利用可能です。

  • EC2 インスタンスの起動
  • セキュリティグループの作成
  • ELB の作成
  • Elastic IP の付与
  • RDS インスタンスの起動
  • Route53 を使った DNS の設定
  • S3 バケットの作成
  • VPC 関連

インストール

$ brew install terraform
$ terraform version
Terraform v0.3.5

Terraform Syntax

Terraform では拡張子 .tf の設定ファイルを使います。Terraform Syntax という独自の書式です。
例えば、EC2 インスタンスを起動したい場合、resource ブロックを使い、TYPENAME を引数に渡します。

resource "aws_instance" "web" {
    ami = "ami-123456"
    instance_type = "m1.small"
}

"aws_instance" が AWS Provider のモジュール名にあたり、"web" は任意の名前です。このような形式でインフラ構成を記述していきます。

実行

上記は雰囲気を伝えるために簡易に書いたものなのでこのままでは動きませんが、.tf ファイルを記述した後にいくつかの terraform コマンドを実行することで、AWS 上に実際に環境が構築されます。
terraform コマンドはカレントディレクトリにある .tf ファイルを参照します。

実行後にどうなるかを表示する。

$ terraform plan

実行する。

$ terraform apply