

# 標準ディストリビューションの開始方法 (AWS CLI)
<a name="get-started-cli-tutorial"></a>

このセクションの手順では、AWS CLI を使用して、CloudFront で次のことを含む基本的な設定をセットアップする方法について説明します。
+ ディストリビューションオリジンとして使用する Amazon S3 バケットを作成します。
+ オブジェクトの元のバージョンを S3 バケットに保存します。
+ オリジンアクセスコントロール (OAC) を使用して、認証済みのリクエストを Amazon S3 オリジンに送信します。OAC は CloudFront を介してリクエストを送信することで、ビューワーが S3 バケットに直接アクセスできないようにします。OAS の詳細については、「[Amazon S3 オリジンへのアクセスを制限する](private-content-restricting-access-to-s3.md)」を参照してください。
+ オブジェクトの URL で CloudFront ドメイン名を使用します (例: `https://d111111abcdef8.cloudfront.net/index.html`)。
+ オブジェクトを、デフォルトの 24 時間 (最小時間は 0 秒) にわたって、CloudFront エッジロケーションに保存します。

大半のオプションはカスタマイズ可能です。CloudFront ディストリビューションのオプションをカスタマイズする方法の詳細については、「[ディストリビューションを作成する](distribution-web-creating-console.md)」を参照してください。

## 前提条件
<a name="get-started-cli-prereqs"></a>

この作業を開始する前に、必ず「[AWS アカウント のセットアップ](setting-up-cloudfront.md)」のステップを完了してください。

AWS CLI をインストールし、 認証情報を使用して設定します。詳細については、*AWS CLI ユーザーガイド*の[AWS CLI の開始](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)を参照してください。



## Amazon S3 バケットを作成する
<a name="get-started-cli-create-bucket"></a>

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 リージョンには、地理的に近いリージョンを選択することをお勧めします。これによりレイテンシーとコストが削減されますが、別のリージョンを選択することもできます。規制要件に対応する場合などは、別のリージョンを選択することがあります。

## コンテンツをバケットにアップロードする
<a name="get-started-cli-upload-content"></a>

このチュートリアルでは、基本的な「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) を作成する
<a name="get-started-cli-create-oac"></a>

このチュートリアルでは、オリジンアクセスコントロール (OAC) を作成します。OAC は、認証済みのリクエストを Amazon S3 オリジンに安全に送信するのに役立ちます。OAC の詳細については、「[Amazon S3 オリジンへのアクセスを制限する](private-content-restricting-access-to-s3.md)」を参照してください。

```
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"
```

## 標準ディストリビューションを作成する
<a name="get-started-cli-create-classic"></a>

`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 バケットを本番環境で使用する前に、特定のニーズに合うように設定してください。本番環境でのアクセス権の設定方法については、「[コンテンツへのセキュアなアクセスの設定とアクセスの制限](SecurityAndPrivateContent.md)」を参照してください。

## S3 バケットポリシーを更新する
<a name="get-started-cli-update-bucket-policy"></a>

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
```

## ディストリビューションのデプロイを確認します。
<a name="get-started-cli-confirm-deployment"></a>

ディストリビューションを作成した後、デプロイが完了するまでに時間がかかります。ディストリビューションステータスが `InProgress` から `Deployed` に変わったら、次のステップに進みます。

```
aws cloudfront get-distribution --id $DISTRIBUTION_ID --query 'Distribution.Status'
```

または、`wait` コマンドを使用してディストリビューションのデプロイを待機することもできます。

```
aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
```

## CloudFront を介してコンテンツにアクセスする
<a name="get-started-cli-access-content"></a>

CloudFront からコンテンツにアクセスするには、CloudFront ディストリビューションのドメイン名と、コンテンツのメインページを組み合わせます CloudFront ドメイン名の例を独自のドメイン名に置き換えます。

```
https://d111111abcdef8.cloudfront.net/index.html
```

前のステップに従い、HTML ファイルを作成した場合は、**[Hello world\$1]** と記載されたウェブページが表示されるはずです。

この S3 バケットに追加のコンテンツをアップロードした場合、CloudFront ディストリビューションのドメイン名と S3 バケット内のオブジェクトへのパスを組み合わせることで、CloudFront からコンテンツにアクセスできます。例えば、`new-page.html` という名前の新しいファイルを S3 バケットのルートにアップロードした場合、URL は次のようになります。

`https://d111111abcdef8.cloudfront.net/new-page.html`.

## クリーンアップ
<a name="get-started-cli-cleanup"></a>

学習目的のためだけにディストリビューションと 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
   ```

1. ディストリビューションが無効になるまで待ちます。

   ```
   aws cloudfront wait distribution-deployed --id $DISTRIBUTION_ID
   ```

1. ディストリビューションを削除します。

   ```
   # 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
```