zaki work log

作業ログやら生活ログやらなんやら

[Ansible] 任意のタイミングでダイナミックインベントリのホスト情報収集を行う

Ansibleで(CFnなどのモジュールを使って、も含む)クラウドリソースを作成し、後続のタスクで作成したコンピュートインスタンス(EC2)へ接続して処理を行いたい、みたいなケースで、ダイナミックインベントリを使用することでタグなどを使ってEC2情報を動的に取得してアクセスできます。

……と仕組み的には可能なんだけど、1回のAnsible実行ではAnsible起動時にダイナミックインベントリによるホスト情報を収集するため、「クラウドリソース作成後のEC2アクセス」のタイミングではダイナミックインベントリによって取得されるホスト情報は空(正確にはAnsible起動時に収集したリソース作成前の情報)のまま。
ではどうすれば作成したばかりのEC2へのアクセスを実現できるかと言うと、任意のタイミングでインベントリを再読み込みすることができるansible.builtin.metaモジュールrefresh_inventoryパラメタを使ったタスクを実装することで、クラウドリソースを作成したあとにダイナミックインベントリによるホスト情報の収集を行えます。

docs.ansible.com

具体的には以下の通り。

- name: refresh inventory
  ansible.builtin.meta: refresh_inventory

このタスクが実行されると、そのタイミングでインベントリの再読み込みが行われるため、ダイナミックインベントリを使ったクラウドリソースのホスト情報収集が行われ、「後続のタスクで作成したコンピュートインスタンス(EC2)へ接続して処理を行う」を実現できます。

全体のplaybook構成としては、以下のようなイメージでEC2の作成とEC2への処理の自動化をまとめて実装できます。

- hosts: localhost
  tasks:
  - クラウドリソースを作成するタスク
  - ansible.builtin.meta: refresh_inventory

- hosts: ダイナミックインベントリで取得したホストグループ
  tasks:
  - EC2への操作
  - :
    :
    :

参考:

metaモジュールを使ったその他の操作

zaki-hmkc.hatenablog.com

「任意のタイミングで〇〇する」のgather_facts編

zaki-hmkc.hatenablog.com

AWSのダイナミックインベントリ

zaki-hmkc.hatenablog.com

そういえばダイナミックインベントリを使ってEC2に接続してタスク実行はまだまとめてなかったですね。。