tl;dr
AWS CLI で Alternate Domain Names (CNAMEs) のドメイン名から Distribution ID が欲しい。
実行
以下のように実行する。
aws cloudfront list-distributions \ --query "DistributionList.Items[].{DistId: Id, DomainName: DomainName, OriginDomainName: Aliases.Items[0]}[? OriginDomainName == 'foo.example.com'] | [0].DistId"\ --output=text
以下、実行例。
$ aws cloudfront list-distributions \ --query "DistributionList.Items[].{DistId: Id, DomainName: DomainName, OriginDomainName: Aliases.Items[0]}[? OriginDomainName == 'foo.example.com'] | [0].DistId"\ --output=text # 以下のように Distribution ID が出力される ABCDEFGH12345
Alternate Domain Names (CNAMEs) のドメイン名を素で取得しようとすると、以下のように出力されるので、ドメイン名をキーにして Distribution ID を取得するのは至難の技。
[ { "Id": "ABCDEFGH12345", "ARN": "arn:aws:cloudfront::123456789012:distribution/ABCDEFGH12345", "Status": "Deployed", "LastModifiedTime": "2018-04-17T00:54:59.727000+00:00", "DomainName": "xxxxxx.cloudfront.net", "Aliases": { "Quantity": 1, "Items": [ "foo.example.com" ] }, ...
ということで、一旦、以下のように必要なデータで出力を再構成してから検索すると意図したような出力が得られた。
DistributionList.Items[].{DistId: Id, DomainName: DomainName, OriginDomainName: Aliases.Items[0]}[? OriginDomainName == 'foo.example.com'] | [0].DistId
いい感じ。
応用編
Alternate Domain Names (CNAMEs) のドメイン名から CloudFront 自体のドメイン名 (xxxxxx.cloudfront.net) が欲しい場合には、以下のように書く。
aws cloudfront list-distributions \ --query "DistributionList.Items[].{DomainName: DomainName, OriginDomainName: Aliases.Items[0]}[? OriginDomainName == 'foo.example.com'] | [0].DomainName"\ --output=text
以下、実行例。
$ aws cloudfront list-distributions \ --query "DistributionList.Items[].{DomainName: DomainName, OriginDomainName: Aliases.Items[0]}[? OriginDomainName == 'foo.example.com'] | [0].DomainName"\ --output=text # 以下のようにドメイン名が出力される xxxxxx.cloudfront.net
以上
メモでした。