6.3. CloudFrontディストリビューションの作成¶
作業の目的 [why]¶
CloudFrontディストリビューション"<CloudFrontディストリビューション名>"を作成します。
完了条件/事前条件 [設計者用情報]
完了条件 [after]
主処理は、以下を満たしたときに成功したものとします。
- 完了条件1
- 設定ファイルに記述されたWebsiteをオリジンとするCloudFrontディストリビューションが存在する。
事前条件 [before]
主処理の実施は、以下の状態であることを前提とします。
- 事前条件1
- 設定ファイル用ディレクトリ"${HOME}/tmp/conf-handson-cli"が存在する。
- 事前条件2
- 設定ファイル"${HOME}/tmp/conf-handson-cli/cloudfront-distribution-create-2019-04-30.json"が存在する。
作業対象 [what]¶
- CloudFrontサービス
標準時間(合計)¶
8分
パラメータ設定¶
パラメータ設定の標準時間: | 2分 |
---|
作業に必要なモノ・情報 [resource]¶
作業開始には、以下が全て揃っていることが必要です。
リソース1: 設定ファイル用ディレクトリ
- 今回は"${HOME}/tmp/conf-handson-cli"を設定ファイル用ディレクトリとします。
ディレクトリが存在することを確認します。
コマンド:
ls -d ${HOME}/tmp/conf-handson-cli
結果(例:存在する場合):
${HOME}/tmp/conf-handson-cli
存在しない場合は作成します。
コマンド:
mkdir -p ${HOME}/tmp/conf-handson-cli
リソース2: 設定ファイル
- cloudfrontディストリビューションを作成するための設定ファイルです。
- 今回は"${HOME}/tmp/conf-handson-cli/cloudfront-distribution-create-2019-04-30.json"とします。
パラメータの指定¶
作業に必要なパラメータを変数に格納をします。
0.2. 設定ファイルの指定¶
変数の設定:
FILE_INPUT="${DIR_CONF}/cloudfront-distribution-create-$(date +%Y-%m-%d).json" \ && echo ${FILE_INPUT}
結果(例):
${HOME}/tmp/conf-handson-cli/cloudfront-distribution-create-2019-04-30.json
パラメータの保存¶
設定されている変数の保存先となるファイル名を指定します。
変数の設定:
DIR_PARAMETER="${HOME}/tmp/parameter-handson-cli" FILE_PARAMETER="${DIR_PARAMETER}/$(date +%Y-%m-%d)-cloudfront-distribution-create.env" \ && echo ${FILE_PARAMETER}
結果(例):
${HOME}/tmp/parameter-handson-cli/2019-04-30-cloudfront-distribution-create.env
各変数に正しいパラメータ値が格納されていることを確認しながら保存します。
変数の確認:
cat << EOF > ${FILE_PARAMETER} # 0.0. AWS_DEFAULT_REGION:"ap-northeast-1" AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" # 0.1. DIR_CONF:"${HOME}/tmp/conf-handson-cli" DIR_CONF="${DIR_CONF}" # 0.2. FILE_INPUT:"${HOME}/tmp/conf-handson-cli/cloudfront-distribution-create-2019-04-30.json" FILE_INPUT="${FILE_INPUT}" EOF cat ${FILE_PARAMETER}
下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。
タスクの実施¶
課題
(未検証)
タスク標準時間: | 6分 |
---|
1. 前処理¶
処理対象の状態確認¶
主処理の実施は、以下の状態であることを前提とします。
前提と異なることが判明した場合、直ちに処理を中止します。
事前条件1: 設定ファイル用ディレクトリ"${HOME}/tmp/conf-handson-cli"が存在する。
「設定ファイル用ディレクトリ"${HOME}/tmp/conf-handson-cli"が存在する。」ことを確認します。
コマンド:
ls -d ${DIR_CONF}
結果(例):
${HOME}/tmp/conf-handson-cli
事前条件2: 設定ファイル"${HOME}/tmp/conf-handson-cli/cloudfront-distribution-create-2019-04-30.json"が存在する。
「設定ファイル"${HOME}/tmp/conf-handson-cli/cloudfront-distribution-create-2019-04-30.json"が存在する。」ことを確認します。
コマンド:
ls ${FILE_INPUT}
結果(例):
${HOME}/tmp/conf-handson-cli/cloudfront-distribution-create-2019-04-30.json
事前条件3: 設定ファイルに記述されたWebsiteをオリジンとするCloudFrontディストリビューションが存在しない。
「設定ファイルに記述されたWebsiteをオリジンとするCloudFrontディストリビューションが存在しない。」ことを確認します。
変数の設定:
CFRONT_DEFAULT_TARGET=$( \ cat ${FILE_INPUT} \ | jp.py 'DistributionConfig.DefaultCacheBehavior.TargetOriginId' \ | sed 's/\"//g' \ ) \ && echo ${CFRONT_DEFAULT_TARGET}
変数の設定:
CFRONT_ORIGIN_DOMAIN_NAME=$( \ cat ${FILE_INPUT} \ | jp.py "DistributionConfig.Origins.Items[?Id == \`${CFRONT_DEFAULT_TARGET}\`].DomainName" \ | sed 's/\"//g' \ | sed 's/\[//' \ | sed 's/\]//' \ ) \ && echo ${CFRONT_ORIGIN_DOMAIN_NAME}
コマンド:
aws cloudfront list-distributions \ --query "DistributionList.Items[?contains(Origins.Items[].DomainName, \`${CFRONT_ORIGIN_DOMAIN_NAME}\`)].DomainName"
結果(例):
null
2. 主処理¶
CloudFrontディストリビューションの作成¶
変数の確認:
cat << ETX # FILE_INPUT:"${HOME}/tmp/conf-handson-cli/cloudfront-distribution-create-2019-04-30.json" FILE_INPUT="${FILE_INPUT}" ETX
コマンド(cli-input-json):
aws cloudfront create-distribution \ --cli-input-json file://${FILE_INPUT}
結果(例):
{ "Distribution": { "Status": "InProgress", "DomainName": "d1fxioaf8yk47h.cloudfront.net", "InProgressInvalidationBatches": 0, "DistributionConfig": { "Comment": "", "CacheBehaviors": { "Quantity": 0 }, "IsIPV6Enabled": true, "Logging": { "Bucket": "", "Prefix": "", "Enabled": false, "IncludeCookies": false }, "WebACLId": "", "Origins": { "Items": [ { "OriginPath": "", "CustomOriginConfig": { "OriginSslProtocols": { "Items": [ "TLSv1", "TLSv1.1", "TLSv1.2" ], "Quantity": 3 }, "OriginProtocolPolicy": "http-only", "OriginReadTimeout": 30, "HTTPPort": 80, "HTTPSPort": 443, "OriginKeepaliveTimeout": 5 }, "CustomHeaders": { "Quantity": 0 }, "Id": "S3-Website-handson-cli.<ドメイン名>.s3-website-ap-northeast-1.amazonaws.com", "DomainName": "handson-cli.<ドメイン名>.s3-website-ap-northeast-1.amazonaws.com" } ], "Quantity": 1 }, "DefaultRootObject": "", "PriceClass": "PriceClass_All", "Enabled": true, "DefaultCacheBehavior": { "TrustedSigners": { "Enabled": false, "Quantity": 0 }, "LambdaFunctionAssociations": { "Quantity": 0 }, "TargetOriginId": "S3-Website-handson-cli.<ドメイン名>.s3-website-ap-northeast-1.amazonaws.com", "ViewerProtocolPolicy": "redirect-to-https", "ForwardedValues": { "Headers": { "Quantity": 0 }, "Cookies": { "Forward": "none" }, "QueryStringCacheKeys": { "Quantity": 0 }, "QueryString": false }, "MaxTTL": 31536000, "SmoothStreaming": false, "DefaultTTL": 86400, "AllowedMethods": { "Items": [ "HEAD", "GET" ], "CachedMethods": { "Items": [ "HEAD", "GET" ], "Quantity": 2 }, "Quantity": 2 }, "MinTTL": 0, "Compress": false }, "CallerReference": "20170808120550", "ViewerCertificate": { "CloudFrontDefaultCertificate": true, "MinimumProtocolVersion": "SSLv3", "CertificateSource": "cloudfront" }, "CustomErrorResponses": { "Quantity": 0 }, "HttpVersion": "http2", "Restrictions": { "GeoRestriction": { "RestrictionType": "none", "Quantity": 0 } }, "Aliases": { "Quantity": 0 } }, "ActiveTrustedSigners": { "Enabled": false, "Quantity": 0 }, "LastModifiedTime": "2019-04-30T01:23:45.678Z", "Id": "E36MP417B2RXEE", "ARN": "arn:aws:cloudfront::401286648550:distribution/E36MP417B2RXEE" }, "ETag": "EZU8BUUJ9BS9L", "Location": "https://cloudfront.amazonaws.com/2017-03-25/distribution/E36MP417B2RXEE" }
3. 後処理¶
3.1. 完了条件の確認¶
主処理は、以下を満たしたときに成功したものとします。
完了条件1: 設定ファイルに記述されたWebsiteをオリジンとするCloudFrontディストリビューションが存在する。
「設定ファイルに記述されたWebsiteをオリジンとするCloudFrontディストリビューションが存在する。」ことを確認します。
コマンド:
aws cloudfront list-distributions \ --query "DistributionList.Items[?contains(Origins.Items[].DomainName, \`${CFRONT_ORIGIN_DOMAIN_NAME}\`)].DomainName"
結果(例)
[ "<CloudFrontドメイン名>" ]
ディストリビューションIDの取得
コマンド:
CFRONT_DIST_ID=$( \ aws cloudfront list-distributions \ --query "DistributionList.Items[?DefaultCacheBehavior.TargetOriginId == \`${CFRONT_DEFAULT_TARGET}\`].Id" \ --output text \ ) \ && echo ${CFRONT_DIST_ID}
結果(例):
<CloudFrontディストリビューションID>
コマンド:
CFRONT_DIST_STATUS=$( aws cloudfront get-distribution \ --id ${CFRONT_DIST_ID} \ --query 'Distribution.Status' \ --output text \ ) \ && echo ${CFRONT_DIST_STATUS}
結果(例):
Deployed