Ansibleで(CFnなどのモジュールを使って、も含む)クラウドリソースを作成し、後続のタスクで作成したコンピュートインスタンス(EC2)へ接続して処理を行いたい、みたいなケースで、ダイナミックインベントリを使用することでタグなどを使ってEC2情報を動的に取得してアクセスできます。
……と仕組み的には可能なんだけど、1回のAnsible実行ではAnsible起動時にダイナミックインベントリによるホスト情報を収集するため、「クラウドリソース作成後のEC2アクセス」のタイミングではダイナミックインベントリによって取得されるホスト情報は空(正確にはAnsible起動時に収集したリソース作成前の情報)のまま。
ではどうすれば作成したばかりのEC2へのアクセスを実現できるかと言うと、任意のタイミングでインベントリを再読み込みすることができるansible.builtin.meta
モジュールのrefresh_inventory
パラメタを使ったタスクを実装することで、クラウドリソースを作成したあとにダイナミックインベントリによるホスト情報の収集を行えます。
具体的には以下の通り。
- name: refresh inventory ansible.builtin.meta: refresh_inventory
このタスクが実行されると、そのタイミングでインベントリの再読み込みが行われるため、ダイナミックインベントリを使ったクラウドリソースのホスト情報収集が行われ、「後続のタスクで作成したコンピュートインスタンス(EC2)へ接続して処理を行う」を実現できます。
全体のplaybook構成としては、以下のようなイメージでEC2の作成とEC2への処理の自動化をまとめて実装できます。
- hosts: localhost tasks: - クラウドリソースを作成するタスク - ansible.builtin.meta: refresh_inventory - hosts: ダイナミックインベントリで取得したホストグループ tasks: - EC2への操作 - : : :
参考:
metaモジュールを使ったその他の操作
「任意のタイミングで〇〇する」のgather_facts編
AWSのダイナミックインベントリ
そういえばダイナミックインベントリを使ってEC2に接続してタスク実行はまだまとめてなかったですね。。