AWSのタグ名を取得して、任意のインスタンスへのみデプロイできるようにする。
fabricとは
コマンドライン 経由で 任意の Python 関数 を実行するツールです。
(低レベルライブラリの上に構築された)サブルーチンのライブラリで、SSH経由で 簡単に かつ Python風に シェルコマンドを実行します
チュートリアル
http://fabric-ja.readthedocs.org/en/latest/tutorial.html
Fabric実行モデル
https://fabric-ja.readthedocs.org/ja/latest/usage/execution.html
PrivateIPの取得
条件にマッチしたインスタンスのPrivateIPを取得して、
hostsにsetすることで指定のインスタンスへのデプロイが可能。
- 起動中であるインスタンス
- Roles/Enviromentのタグに任意のものを指定
@task def set_hosts(e,r): """ホスト一覧取得""" client = boto3.client('ec2', region_name=region) # 対象インスタンスリストの取得 instances = client.describe_instances(Filters=[ {'Name':'tag:Roles', 'Values':[r]}, {'Name':'tag:Environment', 'Values':[e]}, {'Name': 'instance-state-name', 'Values': ['running']} ]) # プライベートIPをenvに入れる for i in instances["Reservations"]: env.hosts.append(i["Instances"][0]["PrivateIpAddress"])
実行
例えばvimを入れる処理を追加。
@task def install_vim(): sudo("yum -y install vim")
実行すれば、指定のインスタンスへvimがインストールされる。
- 対象
起動中、Enviroment=dev/Roles=web
[ec2-user@ip-172-16-66-177 fabric]$ fab set_hosts:e=dev,r=web install_vim [172.16.66.177] Executing task 'install_vim' [172.16.66.177] sudo: yum -y install vim [172.16.66.177] out: Loaded plugins: priorities, update-motd, upgrade-helper
まとめ
タグ名の指定をきちんとしておけば、開発環境のWeb全台へなどのデプロイが簡単できる。