標準ディストリビューションの開始方法 (AWS CLI)
このセクションの手順では、AWS CLI を使用して、CloudFront で次のことを含む基本的な設定をセットアップする方法について説明します。
-
ディストリビューションオリジンとして使用する Amazon S3 バケットを作成します。
-
オブジェクトの元のバージョンを S3 バケットに保存します。
オリジンアクセスコントロール (OAC) を使用して、認証済みのリクエストを Amazon S3 オリジンに送信します。OAC は CloudFront を介してリクエストを送信することで、ビューワーが S3 バケットに直接アクセスできないようにします。OAS の詳細については、「Amazon S3 オリジンへのアクセスを制限する」を参照してください。
オブジェクトの URL で CloudFront ドメイン名を使用します (例:
https://d111111abcdef8.cloudfront.net/index.html
)。-
オブジェクトを、デフォルトの 24 時間 (最小時間は 0 秒) にわたって、CloudFront エッジロケーションに保存します。
大半のオプションはカスタマイズ可能です。CloudFront ディストリビューションのオプションをカスタマイズする方法の詳細については、「ディストリビューションを作成する」を参照してください。
前提条件
この作業を開始する前に、必ず「AWS アカウント のセットアップ」のステップを完了してください。
AWS CLI をインストールし、 認証情報を使用して設定します。詳細については、AWS CLI ユーザーガイドのAWS CLI の開始を参照してください。
Amazon S3 バケットを作成する
Amazon S3 バケットは、ファイル (オブジェクト) やフォルダのコンテナです。CloudFront では、S3 バケットがソースである場合、ほとんどのタイプのファイルを配信できます。たとえば、CloudFront では、テキスト、画像、ビデオを配信できます。Amazon S3 に保存できるデータ量に上限はありません。
このチュートリアルでは、S3 バケットを作成し、基本的なウェブページを作成するために使用する HTML ファイルをアップロードします。
aws s3 mb s3://
amzn-s3-demo-bucket
/ --regionus-east-1
amzn-s3-demo-bucket
をグローバルに一意のバケット名に置き換えます。AWS リージョンには、地理的に近いリージョンを選択することをお勧めします。これによりレイテンシーとコストが削減されますが、別のリージョンを選択することもできます。規制要件に対応する場合などは、別のリージョンを選択することがあります。
コンテンツをバケットにアップロードする
このチュートリアルでは、基本的な「Hello World」ウェブページのサンプルコンテンツファイルをダウンロードして抽出します。
# Create a temporary directory mkdir -p ~/cloudfront-demo # Download the sample Hello World files curl -o ~/cloudfront-demo/hello-world-html.zip https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/samples/hello-world-html.zip # Extract the zip file unzip ~/cloudfront-demo/hello-world-html.zip -d ~/cloudfront-demo/hello-world
これにより、index.html
ファイルと css
フォルダを含むディレクトリが作成されます。これらのファイルを S3 バケットにアップロードします。
aws s3 cp ~/cloudfront-demo/hello-world/ s3://
amzn-s3-demo-bucket
/ --recursive>
オリジンアクセスコントロール (OAC) を作成する
このチュートリアルでは、オリジンアクセスコントロール (OAC) を作成します。OAC は、認証済みのリクエストを Amazon S3 オリジンに安全に送信するのに役立ちます。OAC の詳細については、「Amazon S3 オリジンへのアクセスを制限する」を参照してください。
aws cloudfront create-origin-access-control \ --origin-access-control-config Name="
oac-for-s3
",SigningProtocol=sigv4,SigningBehavior=always,OriginAccessControlOriginType=s3
出力の OAC ID を環境変数として保存します。値の例は実際に使用する OAC ID に置き換えます。これは次のステップで使用します。
OAC_ID="
E1ABCD2EFGHIJ
"
標準ディストリビューションを作成する
distribution-config.json
という名前のディストリビューション設定ファイルを作成します。サンプルバケット名を、ユーザーのバケット名の Id
、DomainName
および TargetOriginId
値を使用して置き換えます。
cat > distribution-config.json << EOF { "CallerReference": "cli-example-$(date +%s)", "Origins": { "Quantity": 1, "Items": [ { "Id": "S3-
amzn-s3-demo-bucket
", "DomainName": "amzn-s3-demo-bucket
.s3.amazonaws.com", "S3OriginConfig": { "OriginAccessIdentity": "" }, "OriginAccessControlId": "$OAC_ID" } ] }, "DefaultCacheBehavior": { "TargetOriginId": "S3-amzn-s3-demo-bucket
", "ViewerProtocolPolicy": "redirect-to-https", "AllowedMethods": { "Quantity": 2, "Items": ["GET", "HEAD"], "CachedMethods": { "Quantity": 2, "Items": ["GET", "HEAD"] } }, "DefaultTTL": 86400, "MinTTL": 0, "MaxTTL": 31536000, "Compress": true, "ForwardedValues": { "QueryString": false, "Cookies": { "Forward": "none" } } }, "Comment": "CloudFront distribution for S3 bucket", "Enabled": true } EOF
標準ディストリビューションを作成します。
aws cloudfront create-distribution --distribution-config file://distribution-config.json
出力のディストリビューション ID とドメイン名を環境変数として保存します。値の例 は実際に使用する値に置き換えます。これらは、このチュートリアルで後ほど使用します。
DISTRIBUTION_ID="
EABCD1234XMPL
" DOMAIN_NAME="d111111abcdef8.cloudfront.net
"
このチュートリアルのディストリビューションと S3 バケットを本番環境で使用する前に、特定のニーズに合うように設定してください。本番環境でのアクセス権の設定方法については、「コンテンツへのセキュアなアクセスの設定とアクセスの制限」を参照してください。
S3 バケットポリシーを更新する
S3 バケットポリシーを更新して、CloudFront がオブジェクトにアクセスできるようにします。サンプルバケット名をユーザーのバケット名に置き換えます。
# Get your AWS account ID ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text) # Create the bucket policy cat > bucket-policy.json << EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipal", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::$ACCOUNT_ID:distribution/$DISTRIBUTION_ID" } } } ] } EOF # Apply the bucket policy aws s3api put-bucket-policy \ --bucketamzn-s3-demo-bucket
\ --policy file://bucket-policy.json
ディストリビューションのデプロイを確認します。
ディストリビューションを作成した後、デプロイが完了するまでに時間がかかります。ディストリビューションステータスが InProgress
から Deployed
に変わったら、次のステップに進みます。
aws cloudfront get-distribution --id $DISTRIBUTION_ID --query 'Distribution.Status'
または、wait
コマンドを使用してディストリビューションのデプロイを待機することもできます。
aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
CloudFront を介してコンテンツにアクセスする
CloudFront からコンテンツにアクセスするには、CloudFront ディストリビューションのドメイン名と、コンテンツのメインページを組み合わせます CloudFront ドメイン名の例を独自のドメイン名に置き換えます。
https://
d111111abcdef8.cloudfront.net
/index.html
前のステップに従い、HTML ファイルを作成した場合は、[Hello world!] と記載されたウェブページが表示されるはずです。
この S3 バケットに追加のコンテンツをアップロードした場合、CloudFront ディストリビューションのドメイン名と S3 バケット内のオブジェクトへのパスを組み合わせることで、CloudFront からコンテンツにアクセスできます。例えば、new-page.html
という名前の新しいファイルを S3 バケットのルートにアップロードした場合、URL は次のようになります。
https://d111111abcdef8.cloudfront.net/new-page.html
.
クリーンアップ
学習目的のためだけにディストリビューションと S3 バケットを作成した場合は、削除して料金が発生しないようにします。まず、ディストリビューションを無効にして削除します。
標準ディストリビューションを無効にして削除するには (AWS CLI)
まず、ディストリビューションを無効にします。
# Get the current configuration and ETag ETAG=$(aws cloudfront get-distribution-config --id $DISTRIBUTION_ID --query 'ETag' --output text) # Create a modified configuration with Enabled=false aws cloudfront get-distribution-config --id $DISTRIBUTION_ID | \ jq '.DistributionConfig.Enabled = false' > temp_disabled_config.json # Update the distribution to disable it aws cloudfront update-distribution \ --id $DISTRIBUTION_ID \ --distribution-config file://<(jq '.DistributionConfig' temp_disabled_config.json) \ --if-match $ETAG
ディストリビューションが無効になるまで待ちます。
aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
ディストリビューションを削除します。
# Get the current ETag ETAG=$(aws cloudfront get-distribution-config --id $DISTRIBUTION_ID --query 'ETag' --output text) # Delete the distribution aws cloudfront delete-distribution --id $DISTRIBUTION_ID --if-match $ETAG
S3 バケットを削除するには (AWS CLI)
S3 バケットとコンテンツを削除します。サンプルバケット名を独自のバケット名に置き換えます。
# Delete the bucket contents aws s3 rm s3://
amzn-s3-demo-bucket
--recursive # Delete the bucket aws s3 rb s3://amzn-s3-demo-bucket
このチュートリアル用に作成されたローカルファイルをクリーンアップするには、次のコマンドを実行します。
# Clean up local files rm -f distribution-config.json bucket-policy.json temp_disabled_config.json rm -rf ~/cloudfront-demo
必要に応じて、このチュートリアル用に作成した OAC を削除できます。
# Get the OAC ETag OAC_ETAG=$(aws cloudfront get-origin-access-control --id $OAC_ID --query 'ETag' --output text) # Delete the OAC aws cloudfront delete-origin-access-control --id $OAC_ID --if-match $OAC_ETAG