LoginSignup
0
0

CLIでCloudFrontディストリビューションを新規作成する、既存ディストリビューションをコピーする

Posted at

先月ぐらいに怒涛の勢いで記事を書いたはいいが、さっそくネタ切れになった。。。
意外に出し尽くした感があるが、それでもまだまだ地味なTipsが残っている。だが、地味なTipsほど書く気が起きない。難しいところ。やや出涸らし気味だが、頑張ってみる。

目的(やりたいこと)

  • CloudFrontのディストリビューションをCLIで作成したい
  • 作成するにしても既存のものをコピーしたい

前提条件

  • Cloudshellを利用

CloudFrontのディストリビューションをCLIで作成

テンプレートコンフィグ取得

基本的にCloudformationのようにコンフィグファイルを作成して、そのコンフィグファイルをCloudFrontに適用するイメージとなる。コンフィグファイルをどう作ればいい?という話になるが、そのテンプレートはAWSCLIで出力することが可能。

aws cloudfront create-distribution --generate-cli-skeleton > aws-cloudfront-distribution.json

「aws-cloudfront-distribution.json」の部分は出力ファイル名のため、お好きな名前に変更する。

コンフィグファイルを修正

vi aws-cloudfront-distribution.json

たくさん設定値があるので、それをお好み、よしなに設定する。

コンフィグファイルを適用

aws cloudfront create-distribution --cli-input-json file://aws-cloudfront-distribution.json

この流れでCLIでのディストリビューションドメイン作成が可能となる。



既存のCloudFrontディストリビューションをコピーしたい

テンプレートで作成してくれる機能はあるが、正直設定値は多いため難しい。であれば、試験的なディストリビューションをGUIで事前に作成しておいたり、既存に存在するディストリビューションの設定値をコンフィグファイルとして出力して、それを改修したほうが効率がよい。

  • callerReferenceを取得
callerReference=`date +"%Y%m%d%H%M%S%N"`

これはユニークな値でないといけないそうなので、ミリ秒単位で取得している。


  • callerReferenceが取得できたか確認
echo ${callerReference}

  • ディストリビューションの設定情報を取得
    「EXXXXXXX」はコピーしたいディストリビューションのIDのため、この値は事前にコンソールで確認しておく。
aws cloudfront get-distribution --id EXXXXXXX | \
 jq -r ".Distribution | { DistributionConfig: .DistributionConfig } | .DistributionConfig.CallerReference = \"${callerReference}\"" > copydist.json

copydist.jsonが出来上がる。

コンフィグファイルを修正

vi copydist.json

viなどのエディタで修正する。

既存ディストリビューションのコンフィグファイル修正ポイント

  • ドメイン名の変更
    基本的にコピー元で使っているドメイン名、例えばexample.comがコピー元ディストリビューションのオリジンドメイン名だったとして、その部分は新たに設定するドメイン名に変える。

  • callerReferenceの変更
    設定変更するにあたり、この部分も新たな値に変更する(変えなくても設定できるかもしれないが、念のため変えている)。
    これも同じように以下コマンドを実行して、値を出力し、その値を記載する。

date +"%Y%m%d%H%M%S%N"
20230525051758555398360

上記コマンドの結果を、copydist.jsonの「"CallerReference":」に記載する

copydist.json
{
  "DistributionConfig": {
    "CallerReference": "20230525051758555398360",
    "Aliases": {
      "Quantity": 0
    },


  • ACMの設定
    私の環境だけかもしれないが、ACMに登録した証明書を空にして適用すると、エラーで失敗した。ディストリビューションを作成するにあたり、ACMは必須のように見えるので、ACMの証明書を記載しておく。まだACMに証明書をインポートしてない場合は、事前にインポートしておく。
    インポートできる証明書がない場合は、ダミーでオレオレ証明書を作成し、ACMにインポートしておき、それを指定しておくとよい。
    ACMでオレオレ証明書を作ってインポートするやり方は以下。

ACMの証明書指定箇所はこちら。指定する証明書ARNが「arn:aws:acm:us-east-1:NNNNNNNNNNNNNNNNNNNN:certificate/XXXXXXXXXXXXXXXXXXXX」としているため、これをご自身の証明書ARNに置き換える。

copydist.json
    "ViewerCertificate": {
      "CloudFrontDefaultCertificate": false,
      "ACMCertificateArn": "arn:aws:acm:us-east-1:NNNNNNNNNNNNNNNNNNNN:certificate/XXXXXXXXXXXXXXXXXXXX",
      "SSLSupportMethod": "sni-only",
      "MinimumProtocolVersion": "TLSv1.2_2021",
      "Certificate": "arn:aws:acm:us-east-1:NNNNNNNNNNNNNNNNNNNN:certificate/XXXXXXXXXXXXXXXXXXXX",
      "CertificateSource": "acm"


コンフィグファイルを適用

エラーが出なければ、新たなディストリビューションを作成できる。

aws cloudfront create-distribution --cli-input-json file://copydist.json

参考リンク

CloudFrontの設定をコマンドラインから作成する

[AWS] CloudFront Distributionをコマンドライン(CLI)から作成する

AWS CloudFormation の「One or more of your origins or origin groups do not exist」(1 つ以上のオリジンまたはオリジングループが存在しません) というエラーを解決するにはどうすればよいですか?

"One or more of your origins or origin groups do not exist"

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0