Amazon S3

Fastly では、Amazon S3 のパブリックバケットとプライベートバケットをオリジンとして使用することができます。

Amazon S3 をオリジンとして使用する

S3 のデータバケットを Fastly で利用できるようにするには、以下の手順に従います。

新規サービスを作成する

新規サービスを作成する手順に従ってください。

  1. 新しいドメインとホストを作成する場合、以下を行います:

    • Create a domain ページの Domain Name フィールドに、URL として使用するホスト名を入力します (例 : cdn.example.com)。
    • Origins ページの Host フィールドに、ホストの適切なアドレスを <BUCKET>.s3.<REGION>.amazonaws.com の形式に沿って入力します。ガイドとして、AWS 一般参照ドキュメントの Amazon S3 エンドポイントにあるテーブルを使用してください。例えば、お客様のバケット名が fastlytestbucket で、リージョンが us-east-2 の場合、お客様のホスト名は fastlytestbucket.s3.us-east-2.amazonaws.com となります。
    ヒント

    ほとんどのお客様は、オリジンシールドに指定する相互接続場所に近いリージョンを選択します。

  2. Edit this host ページで ホストの詳細を編集する場合、以下を行ってください。

    • まだ入力されていない場合は、Name フィールドに分かりやすい任意のサービスの名前を入力します。
    • Address フィールドに、お客様の地域の適切なアドレスが入力されていることを確認してください (例 : fastlytestbucket.s3.us-east-2.amazonaws.com)。この情報はホスト作成時に入力されたものです。
  3. トランスポートレイヤーセキュリティ (TLS) のセクションでホストの情報を編集する場合、以下を行ってください。

    • Enable TLS? のデフォルトを Yes に設定し、Fastly とオリジンサーバー間の接続を保護します。
      ヒント

      Amazon S3 を使用して静的Webサイトをホストしている場合は、Enable TLS? をデフォルト設定ではなく、No に設定する必要があります。Amazon は、静的 Web サイトのホスト機能が有効になった S3 バケットへの TLS 接続をサポートしていませんFastly の TLS サービスオプションを通じて、Fastly とクライアント間の接続を保護することができます。

    • SNI hostname フィールドで、Match the SNI hostname to the Certificate hostname のチェックボックスを選択します。ホスト作成時に入力したアドレスが表示されます。
    • Certificate hostname のフィールドに、fastlytestbucket.s3.us-east-2.amazonaws.comを入力します。
  4. Advanced options のOverride hostフィールドに、ホストの適切なアドレスを入力します (例:fastlytestbucket.s3.us-east-2.amazonaws.com)。この情報はホスト作成時に入力されたものです。Amazon S3 のプライベートバケットを使用している場合は、このフィールドを空白にしてください。

DNS マッピングの検証

デフォルトでは、yourdomain.global.prod.fastly.net という DNS マッピングが作成されます。上記の例では、cdn.example.com.global.prod.fastly.net となります。この URL をブラウザで入力し、動作を確認します。

DNS のエイリアスを作成する

指定したドメイン名の DNS エイリアスを作成します (例: に対する cdn.example.comglobal-nossl.fastly.net CNAME)。

結果を検証する

Fastly は、明示的な Cache-Control ヘッダーのないコンテンツを1時間にわたってキャッシュします。キャッシュヘッダーを送信しているかどうかは、curl コマンドを使用して確認することができます。例:

$ curl -I opscode-full-stack.s3.amazonaws.com
HTTP/1.1 200 OK
x-amz-id-2: ZpzRp7IWc6MJ8NtDEFGH12QBdk2CM1+RzVOngQbhMp2f2ZyalkFsZd4qPaLMkSlh
x-amz-request-id: ABV5032583242618
Date: Fri, 18 Mar 2012 17:15:38 GMT
Content-Type: application/xml
Transfer-Encoding: chunked
Server: AmazonS3

この例では、Cache-Controlヘッダーが設定されていないため、デフォルトのTime to Live(TTL)が適用されます。

より詳細なキャッシュ制御

異なる種類のアセット (JavaScript ファイルや画像など) のキャッシュ方法をより細かくコントロールする必要がある場合は、キャッシュの鮮度に関するドキュメントをご覧ください。

Amazon S3 のプライベートバケットの使用方法

Amazon S3 のプライベートバケットを Fastly で使用するには、Amazon のヘッダーベースの認証のバージョン4を実装する必要があります。これは カスタム VCL を使用して行うことができます。まずは AWS から以下の情報を入手します。

項目説明
バケット名AWS S3 のバケット名。バケットからアイテムをダウンロードする際に、各オブジェクトの URL パスやホスト名に記載される文字列です。
地域お客様のバケットが存在する場所の AWS 地域コード (例 : us-east-1)。
アクセスキーバケットに対して少なくとも読み取り権限を持つ IAM アカウントの AWS アクセスキー文字列。
シークレットキー上記のアクセスキーとペアになっている AWS のシークレットアクセスキー。

これらの情報が得られれば、VCLで適切なヘッダー値を計算することで、ヘッダー認証を使用して S3 バケットに対して認証を行うように Fastly サービスを設定することができます。

重要

サービスの設定で、オリジンの Override host フィールドを空白にすることを検討してください。この設定を行うと、ここで示したスニペットのホストヘッダーが上書きされ、送信される情報を認証する署名が無効になる可能性があります。

まず、レギュラー VCL スニペット を作成します。AWS protected origin のような意味のある名前を付けます。スニペットを作成する際に、within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を選択します。次に、VCL フィールドに以下のコードを入力します (特定の値は、お客様自身の AWS バケットに関連するものに変更するようにしてください)。

1declare local var.awsAccessKey STRING;
2declare local var.awsSecretKey STRING;
3declare local var.awsS3Bucket STRING;
4declare local var.awsRegion STRING;
5declare local var.canonicalHeaders STRING;
6declare local var.signedHeaders STRING;
7declare local var.canonicalRequest STRING;
8declare local var.canonicalQuery STRING;
9declare local var.stringToSign STRING;
10declare local var.dateStamp STRING;
11declare local var.signature STRING;
12declare local var.scope STRING;
13set var.awsAccessKey = "YOUR_AWS_ACCESS_KEY"; # Change this value to your own data
14set var.awsSecretKey = "YOUR_AWS_SECRET_KEY"; # Change this value to your own data
15set var.awsS3Bucket = "YOUR_AWS_BUCKET_NAME"; # Change this value to your own data
16set var.awsRegion = "YOUR_AWS_BUCKET_REGION"; # Change this value to your own data
17if (req.method == "GET" && !req.backend.is_shield) {
18 set bereq.http.x-amz-content-sha256 = digest.hash_sha256("");
19 set bereq.http.x-amz-date = strftime({"%Y%m%dT%H%M%SZ"}, now);
20 set bereq.http.host = var.awsS3Bucket ".s3." var.awsRegion ".amazonaws.com";
21 set bereq.url = querystring.remove(bereq.url);
22 set bereq.url = regsuball(urlencode(urldecode(bereq.url.path)), {"%2F"}, "/");
23 set var.dateStamp = strftime({"%Y%m%d"}, now);
24 set var.canonicalHeaders = ""
25 "host:" bereq.http.host LF
26 "x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF
27 "x-amz-date:" bereq.http.x-amz-date LF
28 ;
29 set var.canonicalQuery = "";
30 set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date";
31 set var.canonicalRequest = ""
32 "GET" LF
33 bereq.url.path LF
34 var.canonicalQuery LF
35 var.canonicalHeaders LF
36 var.signedHeaders LF
37 digest.hash_sha256("")
38 ;
39 set var.scope = var.dateStamp "/" var.awsRegion "/s3/aws4_request";
40 set var.stringToSign = ""
41 "AWS4-HMAC-SHA256" LF
42 bereq.http.x-amz-date LF
43 var.scope LF
44 regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "")
45 ;
46 set var.signature = digest.awsv4_hmac(
47 var.awsSecretKey,
48 var.dateStamp,
49 var.awsRegion,
50 "s3",
51 var.stringToSign
52 );
53 set bereq.http.Authorization = "AWS4-HMAC-SHA256 "
54 "Credential=" var.awsAccessKey "/" var.scope ", "
55 "SignedHeaders=" var.signedHeaders ", "
56 "Signature=" + regsub(var.signature,"^0x", "")
57 ;
58 unset bereq.http.Accept;
59 unset bereq.http.Accept-Language;
60 unset bereq.http.User-Agent;
61 unset bereq.http.Fastly-Client-IP;
62}

また、AWS がレスポンスに追加するヘッダーを削除することもできます。そのためには、別の VCL スニペットを作成します。Strip AWS response headers のような意味のある名前を付けます。スニペットを作成する際、within subroutine を選択して配置を指定し、サブルーチンタイプとして fetch を選択します。そして、VCL フィールドに以下のコードを入力します:

1unset beresp.http.x-amz-id-2;
2unset beresp.http.x-amz-request-id;
3unset beresp.http.x-amz-delete-marker;
4unset beresp.http.x-amz-version-id;

S3 オブジェクトへのリダイレクトと S3 レスポンスのキャッシング

VCL スニペットを使用して、Fastly は、S3 オブジェクトへのリダイレクトをフォローし、レスポンスをキャッシュすることができます。

S3 オブジェクトへのリダイレクトをフォローするように Fastly を設定するには、以下の手順に従います:

  1. Fastly コントロールパネルにログインします。
  2. Home ページから、適切なサービスを選択します。検索ボックスで ID、名称、ドメインによる検索が行えます。
  3. Edit configuration をクリックし、アクティブなバージョンをクローンするオプションを選択します。
  4. VCL Snippets をクリックします。

  5. Create Snippet をクリックします。

    Redirect to S3 redirect via a receive VCL Snippet

  6. Name フィールドに、適切な名前 (例:S3 redirect - recv) を入力します。

  7. Type (placement of the snippet) のセクションで、within subroutine を選択します。

  8. Select subroutine メニューから、recv (vcl_recv を選択します。

  9. VCL フィールドに、以下の条件を追加します:

    1if (req.http.redir != "true") {
    2 set req.backend = Main_Origin;
    3} else {
    4 set req.backend = s3_backend;
    5 set req.http.host = "s3.amazonaws.com";
    6}
    重要

    上記の条件では、Main_Origins3_backendのプレースホルダ―を、これらのリダイレクトを適用するサービスのバックエンドの実際の名前に置き換えてください。正確な名前を確認するには、配信ページに移動し、サービスを表示しているときに、サービス名のすぐ下に表示される Show VCL をクリックします。

  10. Create をクリックしてスニペットを作成します。

  11. Create Snippet を再度クリックします。

    Redirect to S3 redirect via a deliver VCL Snippet

  12. Name フィールドに、適切な名前 (例:S3 redirect - deliver) を入力します。

  13. Type (placement of the snippet) のセクションで、within subroutine を選択します。

  14. Select subroutine メニューから、deliver (vcl_deliver) を選択します。

  15. VCL フィールドに、以下の条件を追加します:

    1if (resp.status == 302 || resp.status == 301) {
    2 set req.http.redir = "true";
    3 set req.url = regsub(resp.http.Location, "http://s3.amazonaws.com/(.*)$", "/\1");
    4 set req.http.Fastly-Force-Shield = "yes";
    5 restart;
    6}
  16. Create をクリックしてスニペットを作成します。

  17. Activate をクリックして設定への変更をデプロイします。

このページでは、サードパーティが提供するサービスとの統合について説明しています。詳細については、統合に関する注意事項をご覧ください。


翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。