ようへいの日々精進XP

よかろうもん

AWS CLI で CloudFront の Alternate Domain Names (CNAMEs) から Distribution ID が欲しい + 応用編

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

以上

メモでした。