ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

CLIでのCloudFrontオリジンの追加

この記事を共有する

目次

皆さんこんにちは、サービスGの山内です!
先日CLIを使ってCloudFrontのオリジンを追加することがありました。
追加方法が特殊だったため、このブログで紹介します。

概要

以下の順序でオリジンの追加を実行します。

  1. get-distribution-configコマンドでディストリビューションの設定ファイルを生成
  2. 生成したファイルを編集し、オリジンの追加を実施
  3. update-distributionコマンドでCloudFrontを更新

手順

get-distribution-configコマンドでディストリビューションの設定ファイルを生成

テスト用に作成した以下のディストリビューションを操作していきます。

01.png

こちらのコマンドを実行し、ディストリビューションの設定ファイルを生成します。

  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 の項目、および先頭と末尾の {} を削除します。 02.png

update-distributionコマンドでCloudFrontを更新

次のコマンドを実施し、ディストリビューションの更新を行います。 --if-matchにて先ほど控えておいたETagの値を指定しています。

aws cloudfront update-distribution --id E27QKR4J3AR9HQ --distribution-config file://distribution.json --if-match ETVPDKIKX0DER

コマンドが成功すると、ディストリビューションの情報がプロンプトに返ってきます。
03.png

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

おまけ

jqが使える環境の場合は、以下のコマンドでディストリビューションを取得すると、
ETag と DistributionConfig の項目、および先頭と末尾の {}がないデータを出力できます。

 aws cloudfront get-distribution-config --id E27QKR4J3AR9HQ | jq .DistributionConfig > distribution.json

終わりに

CLIでのオリジンの追加はあまりやらない操作かと思いますが、誰かの助けになればと思います。

この記事は私が書きました

山内 宏紀

記事一覧

CloudFormationが好きです。 使っているギターはSGです。

山内 宏紀

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。