この記事は、Ansible Advent Calendar 2022 の9日目のエントリです。
はじめに
ダイナミックインベントリを使う時はデフォルトのDNS名をhostsに指定していたのですが、ほかの指定はできないのかと思い、IPアドレスを対象に実施してみました。
インベントリファイル
ファイル名は、仕様でaws_ec2.ymlか***aws_ec2.ymlとする必要があります。
$ cat aws_ec2.yml --- plugin: amazon.aws.aws_ec2 regions: - ap-northeast-1 hostnames: # 結果をプライベートIPで出力する。パブリックIPは「ip-address」を指定する - private-ip-address include_filters: # リストの中に複数の条件をいれると、andでつながる - instance-state-name: running tag:Name: # ワイルドカードが使える - "web_*" compose: ansible_host: private_ip_address # hostsにプライベートIPをしているので、今回は不要 $
実行ログ
インスタンスの状況は以下です。
Name | インスタンスの状態 | プライベートIPアドレス |
---|---|---|
web_01 | 実行中 | 172.31.36.*** |
web_02 | 実行中 | 172.31.32.*** |
web_03 | 停止済み | 172.31.41.*** |
weeeeebb!!! | 実行中 | 172.31.16.*** |
ansible-inventoryコマンドを実行し、確認します。
$ ansible-inventory -i aws_ec2.yml --graph @all: |--@aws_ec2: | |--172.31.32.*** | |--172.31.36.*** |--@ungrouped: $
起動中のweb_01、web_02のプライベートIPアドレスのみ出力できました。
注意
プライベートIPアドレスはインスタンスが停止していても割り当てられているので、aws_ec2.ymlのフィルターにあるinstance-state-name : running
が必要です。
aws_ec2.ymlからinstance-state-name : running
を削除した場合、以下のように停止中のインスタンスも表示されます。
$ cat aws_ec2.yml --- plugin: amazon.aws.aws_ec2 regions: - ap-northeast-1 hostnames: - private-ip-address include_filters: - tag:Name: - "web_*" $ $ ansible-inventory -i aws_ec2.yml --graph @all: |--@aws_ec2: | |--172.31.32.*** | |--172.31.36.*** | |--172.31.41.*** |--@ungrouped: $
参考
フィルターの条件をandにする方法が分からなかったので助かりました!
フィルターなどの条件に指定できるEC2インスタンスのパラメータは以下のようです。