5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS EC2 タグを指定してAnsibleを実行する

Posted at

はじめに

Ansibleでサーバーに命令を実行する場合、インベントリーファイルに実行先サーバーのIPアドレスを定義する。一方でAWSのEC2はデフォルトでは再起動するたびにIPアドレスが変わってしまう。Elastic IPを使うとIPアドレスを固定することも可能であるが、費用もかかる。こんなときに便利なのがIPアドレスの代わりにAWS のEC2のタグを指定してAnsibleを実行する方法である。以下にその方法を紹介する。

前提

■ Ansibleサーバーが構築済、かつ対象サーバーとAnsible実行ユーザーでssh実行可能であること
 > 下の「手順」では例として、Ansible実行ユーザー名はansibleとする。

■ AWSコンソールでAnsible実行先サーバー(EC2)にタグが付与されていること
 > 下の「手順」では例として、付与されたタグはrole(キー)=webserver(値)とする。

■ AWSコンソールでIAM ユーザーのアクセスキーを作成済であること
 > 下の「手順」では例として、アクセスキーIDをxxxxxxxx、シークレットアクセスキーをyyyyyyyyとする。

手順

以下の手順は全てAnsibleサーバーにて実行する。

➀ アクセスキー情報を設定する

 # vi /home/ansible/.aws/credentials

※credentialsファイルはAnsible実行用sshユーザーのホームディレクトリーの下に置く。上の例ではansibleユーザーとしている。ユーザー名は適宜、読み替えること。

 credentialsファイル内に以下の3行を記載する。
 -----ここから-----
 [default]
 aws_access_key_id = xxxxxxxx
 aws_secret_access_key = yyyyyyyy
 -----ここまで-----

※xxxxxxxx/yyyyyyyyには実際の値を指定する。

② botoのインストール

botoはAWSを操作するためのPython SDKである。botoをインストールするためにはまずpythonのパッケージ管理ツールであるpipをyumでインストールし、pipでbotoをインストールする。

 # yum install python-pip
 # pip install boto

③ ec2.py/ec2.iniをgithubからダウンロードして編集する

ec2.pyはAWS EC2のインベントリー情報(タグ含む)を取得するスクリプトである。ec2.iniはec2.pyの設定ファイルである。

■ ダウンロード元
 > https://github.com/ansible/ansible/tree/devel/contrib/inventory

■ 配置先
 > ec2.py/ec2.iniともにインベントリーファイルの配置先と同じフォルダに配置する。
 > ec2.pyは配置後、chmodで実行権限を付与する。

■ ec2.iniの修正箇所
 ec2.iniは以下の箇所を修正する。(ec2.pyは修正不要)
 > region = ap-northeast-1a(修正)
 > instance_filters = tag:role=webserver(追加)
 > rds = false(コメントアウト解除)
 > elasticache = false(コメントアウト解除)
 > destination_variable = private_dns_name(修正)
 > vpc_destination_variable = private_ip_address(追加)
 > cache_max_age = 0(追加)

④ playbookのhostsの指定の修正

playbook内のhostsを指定している箇所にタグを使用するように修正する。

  • 修正例

    hosts: tag_role_webserver

※role(キー)およびwebserver(値)は適宜、読み替えること

⑤ playbookの実行確認

以下のplaybookコマンドを実行し、タグ指定したEC2がリストアップされることを確認する。

 # ansible-playbook -i <inventoryファイル> <playbookファイル> --list-hosts

以上

5
6
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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?