- 公開日
- 最終更新日
CLIでのCloudFrontオリジンの追加
この記事を共有する
目次
皆さんこんにちは、サービスGの山内です!
先日CLIを使ってCloudFrontのオリジンを追加することがありました。
追加方法が特殊だったため、このブログで紹介します。
概要
以下の順序でオリジンの追加を実行します。
- get-distribution-configコマンドでディストリビューションの設定ファイルを生成
- 生成したファイルを編集し、オリジンの追加を実施
- update-distributionコマンドでCloudFrontを更新
手順
get-distribution-configコマンドでディストリビューションの設定ファイルを生成
テスト用に作成した以下のディストリビューションを操作していきます。

こちらのコマンドを実行し、ディストリビューションの設定ファイルを生成します。
aws cloudfront get-distribution-config --id E27QKR4J3AR9HQ > distribution.json
このようなファイルが作成できます。
ここを押すと展開します
{
"ETag": "ETVPDKIKX0DER",
"DistributionConfig": {
"CallerReference": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
"Aliases": {
"Quantity": 0
},
"DefaultRootObject": "",
"Origins": {
"Quantity": 1,
"Items": [
{
"Id": "dev-bucket-xxxxxxxxxxxx2.s3.ap-northeast-1.amazonaws.com-xxxxxxxxxxxxxxxxxxx",
"DomainName": "dev-bucket-xxxxxxxxxxxx2.s3.ap-northeast-1.amazonaws.com",
"OriginPath": "",
"CustomHeaders": {
"Quantity": 0
},
"S3OriginConfig": {
"OriginAccessIdentity": "",
"OriginReadTimeout": 30
},
"ConnectionAttempts": 3,
"ConnectionTimeout": 10,
"OriginShield": {
"Enabled": false
},
"OriginAccessControlId": "xxxxxxxxxxxxxxxxx"
}
]
},
"OriginGroups": {
"Quantity": 0
},
"DefaultCacheBehavior": {
"TargetOriginId": "dev-bucket-xxxxxxxxxxxx2.s3.ap-northeast-1.amazonaws.com-xxxxxxxxxxxxxxxxxxxx",
"TrustedSigners": {
"Enabled": false,
"Quantity": 0
},
"TrustedKeyGroups": {
"Enabled": false,
"Quantity": 0
},
"ViewerProtocolPolicy": "redirect-to-https",
"AllowedMethods": {
"Quantity": 2,
"Items": [
"HEAD",
"GET"
],
"CachedMethods": {
"Quantity": 2,
"Items": [
"HEAD",
"GET"
]
}
},
"SmoothStreaming": false,
"Compress": true,
"LambdaFunctionAssociations": {
"Quantity": 0
},
"FunctionAssociations": {
"Quantity": 0
},
"FieldLevelEncryptionId": "",
"CachePolicyId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"GrpcConfig": {
"Enabled": false
}
},
"CacheBehaviors": {
"Quantity": 0
},
"CustomErrorResponses": {
"Quantity": 0
},
"Comment": "Test",
"Logging": {
"Enabled": false,
"IncludeCookies": false,
"Bucket": "",
"Prefix": ""
},
"PriceClass": "PriceClass_All",
"Enabled": true,
"ViewerCertificate": {
"CloudFrontDefaultCertificate": true,
"SSLSupportMethod": "vip",
"MinimumProtocolVersion": "TLSv1",
"CertificateSource": "cloudfront"
},
"Restrictions": {
"GeoRestriction": {
"RestrictionType": "none",
"Quantity": 0
}
},
"WebACLId": "arn:aws:wafv2:us-east-1:xxxxxxxxxxxx:global/webacl/CreatedByCloudFront-xxxxx/xxxxxxxxxxxxxxx",
"HttpVersion": "http2",
"IsIPV6Enabled": true,
"ContinuousDeploymentPolicyId": "",
"Staging": false
}
}
生成したファイルを編集し、オリジンの追加を実施
オリジンを追加する場合は、Itemsの中にオリジンを追記します。
追加した後でOriginsのQuantityがオリジン数となっているため、ここを1から2へ変更します。
また、ETagの値(ETVPDKIKX0DER)はディストリビューション更新の際に使用するため、控えておきます。
"Origins": {
"Quantity": 2,
"Items": [
{
"Id": "replica-tokyo-XXXXXXXXXXXX",
"DomainName": "replica-tokyo-XXXXXXXXXXXX.s3.ap-northeast-1.amazonaws.com",
"OriginPath": "",
"CustomHeaders": {
"Quantity": 0
},
"S3OriginConfig": {
"OriginAccessIdentity": "",
"OriginReadTimeout": 30
},
"ConnectionAttempts": 3,
"ConnectionTimeout": 10,
"OriginShield": {
"Enabled": false
},
"OriginAccessControlId": "XXXXXXXXX"
},
{
"Id": "dev-bucket-XXXXXXXXXXX.s3.ap-northeast-1.amazonaws.com-XXXXXXXX",
"DomainName": "dev-bucket-XXXXXXXXXXX.s3.ap-northeast-1.amazonaws.com",
"OriginPath": "",
"CustomHeaders": {
"Quantity": 0
},
"S3OriginConfig": {
"OriginAccessIdentity": "",
"OriginReadTimeout": 30
},
"ConnectionAttempts": 3,
"ConnectionTimeout": 10,
"OriginShield": {
"Enabled": false
},
"OriginAccessControlId": "XXXXXXXXX"
}
]
}
次に、ETag と DistributionConfig の項目、および先頭と末尾の {} を削除します。

update-distributionコマンドでCloudFrontを更新
次のコマンドを実施し、ディストリビューションの更新を行います。 --if-matchにて先ほど控えておいたETagの値を指定しています。
aws cloudfront update-distribution --id E27QKR4J3AR9HQ --distribution-config file://distribution.json --if-match ETVPDKIKX0DER
コマンドが成功すると、ディストリビューションの情報がプロンプトに返ってきます。

問題なくオリジンの追加ができていました。

おまけ
jqが使える環境の場合は、以下のコマンドでディストリビューションを取得すると、
ETag と DistributionConfig の項目、および先頭と末尾の {}がないデータを出力できます。
aws cloudfront get-distribution-config --id E27QKR4J3AR9HQ | jq .DistributionConfig > distribution.json
終わりに
CLIでのオリジンの追加はあまりやらない操作かと思いますが、誰かの助けになればと思います。
この記事は私が書きました
山内 宏紀
記事一覧CloudFormationが好きです。 使っているギターはSGです。