概要
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 件のコメント:
コメントを投稿