はじめに
AWS上のEC2インスタンスの情報を動的にインベントリとして利用できる、amazon.aws.aws_ec2
というインベントリープラグインがあります。
その中に、include_filters
というオプションがあり、Nameタグの情報などで抽出条件を指定できます。
include_filters
ということで複数形なので条件も複数指定できるのですが、どう指定すると and なのか or なのか初見では分かりにくかったです。
自分で試してみた結果をまとめます。
前提
EC2 インスタンスは、以下のものがある状態とします。
タグ Name |
タグ aws:cloudformation:stack-name |
---|---|
sv01a | stack01 |
sv01b | stack01 |
sv01c | stack01 |
sv02a | stack02 |
sv02b | stack02 |
sv02c | stack02 |
CloudFormation のスタック名 stack01
、stack02
で作成されたインスタンスが3つずつあるような状態です。
or 条件の include_filters
各条件をそれぞれリストで指定すると or 条件になりました。
--- plugin: amazon.aws.aws_ec2 regions: - ap-northeast-1 include_filters: - tag:Name: - sv0*a - tag:aws:cloudformation:stack-name: - stack01 hostnames: - tag:Name
確認します。
$ ansible-inventory -i inventory_aws_ec2.yml --graph @all: |--@aws_ec2: | |--sv01a | |--sv01b | |--sv01c | |--sv02a |--@ungrouped:
Nameで sv0*a
を指定しているので該当するインスタンスが2つ抽出されるのに加え、スタック名 stack01
を or 条件で指定しているため、stack01
で作成されたすべてのインスタンスも抽出されたという形です。
and 条件の include_filters
一つのリストの中に複数の条件を指定すると and になりました。
--- plugin: amazon.aws.aws_ec2 regions: - ap-northeast-1 include_filters: - tag:Name: - sv0*a tag:aws:cloudformation:stack-name: - stack01 hostnames: - tag:Name
or 条件のときとの見かけ上の違いは、tag:aws:cloudformation:stack-name
の前の -
がなくなっただけです。
確認します。
$ ansible-inventory -i inventory_aws_ec2.yml --graph @all: |--@aws_ec2: | |--sv01a |--@ungrouped:
今度は、Nameで sv0*a
に加えて、and 条件でスタック名 stack01
を指定しています。そのため スタック名 stack01
かつ、Name sv0*a
に該当するインスタンスのみが抽出されました。
おわりに
ドキュメント見てもピンとこないときでも、一回試すと腑に落ちたというパターンでした。