2019年6月18日火曜日

terraform-inventory 最速入門

概要

terraform-inventory の挙動をとりあえず動かしてサクっと確認したい人向けの記事です
ただ執筆時点での結論から言うと terraform の最新バージョン 0.12 には対応していないため対応までは採用見送りかなと思っています

環境

  • macOS 10.14.5
  • ansible 2.5.5
  • terraform 0.12.1 -> 0.11.14

terraform インストール

  • brew install terraform@0.11

0.12 にはまだ対応していないので 0.11 をインストールする

example.tf

  • vim example.tf
provider "aws" {
  region = "us-east-2"
}

resource "aws_instance" "web1" {
  ami = "ami-0ebbf2179e615c338"
  instance_type = "t2.nano"
  key_name = "sshkey"
  tags = {
    Role = "web1"
  }
}

key_name = "sshkey" は事前に作成済みを想定しています

AWS にインスタンス作成

  • terraform init
  • terraform plan
  • terraform apply

ansible インストール

  • brew install ansible

terraform-inventory インストール

  • brew install terraform-inventory
  • terraform-inventory -inventory terraform.tfstate

Inventory ファイルの情報が出力されることを確認します

playbook 作成

  • vim example.yml
---
- hosts: role_web1
  tasks:
    - name: Install nginx
      shell: "amazon-linux-extras install nginx1.12"
      become: yes
    - name: Start nginx
      systemd:
        name: nginx.service
        state: started
      become: yes

playbook 適用

  • ansible-playbook -i $(which terraform-inventory) example.yml -u ec2-user --private-key /path/to/sshkey.pem

動作確認

  • curl ec2-3-14-84-102.us-east-2.compute.amazonaws.com

パブリック DNS の部分は適宜変更してください

解説

terraform

provider aws を使って AWS 上にインスタンスを作成します
ami = "ami-0ebbf2179e615c338" は Amazon Linux2 になります
ポイントは tags でこれを付与することで ansible の hosts としてインスタンスを指定することができます

ansible

terraform.tfstate というファイルを元に terraform-inventory というコマンドが自動的にインベントリ情報を生成してくれます
このようにプログラムが動的にインベントリ情報を生成する仕組みを Dynamic Inventory といいます
ec2 に生成したインスタンスに ssh ログインするには ec2-user ユーザの指定と鍵の指定が必要になります

また今回の動作確認は nginx をインストールして起動しています
ec2 に適用されるセキュリティブループは default を想定しているおり 80 でのアクセスができるようにしておいてください

最後に

terraform-inventory を試してみました
.tfstate ファイルを元にインベントリ情報を動的に生成してくれるツールです
最新版に対応するのは時間の問題かなと思いますが、今後も terraform のバージョンアップにより .tfstate のフォーマットが変更されることを考えると Dynamic Inventory 用のスクリプトを自作するほうが良いかもしれません

参考サイト

0 件のコメント:

コメントを投稿