標準ディストリビューションの開始方法 (AWS CLI) - Amazon CloudFront

標準ディストリビューションの開始方法 (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/ --region us-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 という名前のディストリビューション設定ファイルを作成します。サンプルバケット名を、ユーザーのバケット名の IdDomainName および 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 \ --bucket amzn-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)
  1. まず、ディストリビューションを無効にします。

    # 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
  2. ディストリビューションが無効になるまで待ちます。

    aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
  3. ディストリビューションを削除します。

    # 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