📝

CloudFront の CNAME から Distribution ID を取得する

2023/07/16に公開

やりたかったこと

CloudFront + S3 でホスティングしている Web ページがあります。
フロント側の変更を即時で反映するため、デプロイ後に Invalidate AWS CloudFront actionを使用してキャッシュの削除を自動化しています。

Invalidate AWS CloudFront action の使い方は簡単で、下記のように Distribution ID を指定するだけです。

  - name: Clear cache in CloudFront
    uses: chetan/invalidate-cloudfront-action@v1.2
    env:
      DISTRIBUTION: Distribution ID
      PATHS: "/*"
      AWS_REGION: ${{ secrets.AWS_REGION }}
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_KEY }}

通常は問題ないのですが、必要な時だけ立ち上げるような環境(ステージング環境など)の場合は一工夫必要になります。
環境を作り直すと、Distribution ID も変わるためです。

このようなケースに対応するため、デプロイ時に Distribution ID を取得し、Invalidate AWS CloudFront action に渡したかったというのがモチベーションです。

CNAME から Distribution ID を取得する

AWS CLI を使って下記のようなコマンドを実行することで、指定した CNAME から Distribution ID を取得できます。(CNAME の部分を書き換えてください)

aws cloudfront list-distributions --query "DistributionList.Items[?Aliases.Items[0]=='CNAME'].Id" --output text

Discussion