LoginSignup
13
15

More than 5 years have passed since last update.

Terraform + AnsibleでEC2の構成管理

Posted at

Overview

TerraformのprovisionerにはAnsibleがないが terraform-inventory が .tfstateファイルからdynamic inventoryを生成しAnsibleでのterraformリソースの構成管理を可能にしてくれるようなので試してみた。

Requirements

Installation

golangのインストール

CentOS

yum install golang --enablerepo=epel

Debian系

apt-get install golang

terraform-inventoryをインストール

$ export GOPATH=/usr/local/go
$ go get github.com/adammck/terraform-inventory
$ export PATH=$PATH:/usr/local/go/bin
$ which terraform-inventory

なおterraform-inventoryがサポートしているTerraformリソースとしては、2015/08/12現在 AWS, DigitalOcean, CloudStack のみなのに注意。

.tfstateファイル

デフォルトはカレントディレクトリのterraform.tfstateを参照する。
別のパスを指定したい場合はTF_STATE環境変数で指定する。

ansible実行

vim test.yml
test.yml
- hosts: all
  remote_user: ec2-user
  tasks:
    - name: Hello
      command: echo Hello!
$ export PATH=$PATH:/usr/local/go/bin
$ ansible-playbook -i $(which terraform-inventory) test.yml

PLAY [all] ******************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [52.69.47.41]

TASK: [Hello] ***************************************************************** 
changed: [52.69.47.41]

PLAY RECAP ******************************************************************** 
52.69.47.41 

実行出来た。
なお生成されるinventoryは.tfファイルのリソースブロックのNAMEに当たる部分がホスト名になる。
例えば

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

というリソース定義ならwebがホスト名になるのでplaybookでは

- hosts: web
  remote_user: ec2-user
  tasks:
    - name: Hello
      command: echo Hello!

と書ける。

terraformとの連携

provisionerブロックの発火タイミングではまだ.tfstateファイルが生成されていないのでterraform実行後にansibleを発火する必要がある。

terraform apply
cat terraform.tfstate
ansible -i $(which terraform-inventory) all -m ping

Conclusion

TerraformとAnsibleでAWSリソースの構成管理をした。
Terraformが公式にサポートしているprovisionerとしてはChefがあるが既にAnsibleを使ってる場合はこの方法でもいいかなと思った。

13
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
15