先月ぐらいに怒涛の勢いで記事を書いたはいいが、さっそくネタ切れになった。。。
意外に出し尽くした感があるが、それでもまだまだ地味な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":」に記載する
{
"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に置き換える。
"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"