LoginSignup
3
1

More than 5 years have passed since last update.

awsrmを使ってAWS EC2用のAnsible Dynamic Inventoryを作ってみる

Last updated at Posted at 2017-12-18

awsrmで気楽にAWSのリソース情報を取得する例として、awsrmを使ってあるELB(my-elb)配下のEC2群に対してAnsibleでプロビジョニングをしてみます。

前提

  • 同じVPC内の踏み台インスタンスからAnsibleを実行するとします
  • SSHの公開鍵設定などは終わっているとします
  • Ansibleのsite.ymlの hosts には web が設定されているとします

gemのインストール

まずGemfileを作成します。

# Gemfile
source 'https://rubygems.org'

gem 'awsecrets'
gem 'awsrm'

awsecrets.gemはawscliのように各種AWS関係の環境変数を読み込んでくれるライブラリです (awspecの中で使われています)。

今回作成するinventory.rbで AWS_PROFILE を読み込んでAWSのクレデンシャルを設定して欲しいので利用します。

bundle installでgemをインストール

$ bundle install

inventory.rbの作成

#!/bin/bash bundle exec ruby

require 'awsecrets'
require 'awsrm'
require 'json'

# AWSのクレデンシャル情報の読み込み
Awsecrets.load

# my-elb 配下のEC2インスタンスの `private_ip_address` を取得
instance_private_ips = Awsrm::Ec2.all(elb: 'my-elb').map(&:private_ip_address)

# Dynamic Inventoryのフォーマットで出力
puts JSON.dump(web: instance_private_ips)

上記のRubyスクリプトで、ELB my-elb 配下のEC2のPrivate IPを取得してDynamic Inventoryのフォーマットで出力ができます。

ポイントとしては、Shebangを #!/bin/bash bundle exec ruby とすることでrbenvのRubyやBundler配下のgemを利用するようにしています。

Ansibleの実行

最後に実行権限を与えて

$ chmod +x inventory.rb

あとは ansible-playbook でプロビジョニングが可能です。

$ AWS_PROFILE=produciton ansible-playbook -i inventory.rb site.yml

awsrm

このようにawsrmは「直感的にAWSリソースを取得できれば。。」と思ってのんびり開発をしています。

対応リソースの要望や機能追加のアイデアがあれば是非。

3
1
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
3
1