DigitalOcean Spaces

DigitalOcean Spaces のパブリックおよびプライベートバケットをオリジンとして使用できます。

DigitalOcean Spaces をオリジンとして使用する

Fastly で DigitalOcean Spaces を使用するには、以下の手順に従ってください。

新規サービスを作成する

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

  1. 新しいドメインとホストを作成する場合、以下を行います。
    • Create a domain ページの Domain Name フィールドに、URL として使用するホスト名を入力します (例: cdn.example.com)。
    • Origins ページの Host フィールドに、ホストの適切なアドレスを <SPACE>.<REGION>.digitaloceanspaces.com の形式に沿って入力します。例えば、お客様のスペース名が test123で、リージョンが nyc3 の場合、お客様のホスト名は test123.nyc3.digitaloceanspaces.com となります。
  2. Edit this host ページでホストの詳細を編集する場合、以下にご注意ください。
    • まだ入力していない場合は、Name フィールドに分かりやすいサービスの名前を入力します。
    • Address フィールドに、お客様のホストの適切なアドレスが入力されていることを確認してください (例: test123.nyc3.digitaloceanspaces.com)。この情報はホスト作成時に入力したものです。
  3. ホストのトランスポート・レイヤー・セキュリティ (TLS) エリア情報を編集する際、以下にご注意ください。
    • Enable TLS? はデフォルト設定の Yes のままにし、Fastly とオリジン間の接続を保護します。
    • Certificate hostname フィールドに、Address フィールドに表示されるアドレスを入力します (例: test123.nyc3.digitaloceanspaces.com)。
    • SNI hostname フィールドで、Match the SNI hostname to the Certificate hostname のチェックボックスを選択します。ホスト作成時に入力したアドレスが表示されます。
  4. Advanced optionsOverride host フィールドに、ホストの適切なアドレスを入力します (例: test123.nyc3.digitaloceanspaces.com)。この情報はホスト作成時に入力したものです。

結果をテストする

デフォルトでは、yourdomain.global.prod.fastly.net という DNS マッピングが作成されます。上記の例では、cdn.example.com.global.prod.fastly.net となります。指定したドメイン名の DNS エイリアスを作成します (例: global-nossl.fastly.netに対する CNAME cdn.example.com)。

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

1
2
3
4
5
6
7
8
$ curl -I opscode-full-stack.nyc3.digitaloceanspaces.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

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

より詳細なキャッシュコントロール

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

プライベート DigitalOcean Spaces の使用

Fastly でプライベート DigitalOcean Space を使うためには、以下の手順に従ってください。

設定前の注意点

正しい Space が指定され、オリジンがポート443に設定され、Spaces のデータが Fastly で利用可能であることを確認してください。これは、認証前に行う必要があります。

設定にはアクセスキー、シークレットキー、Space 名が必要になります。DigitalOcean Spaces 認証ヘッダーは、以下の形式を利用します。

1
  Authorization: AWS `_AWSAccessKeyId_`:`_Signature_`

DigitalOcean のウェブサイトから、以下の情報が必要です。

  1. アクセスキーシークレットキー
  2. お客様の Space

プライベート DigitalOcean Space 使用のための Fastly の設定

Fastly でプライベート DigitalOcean Space を使用するために、Date ヘッダー (認証署名で使用するため) と Authorization ヘッダーの、2つのヘッダーを作成します。

Date ヘッダーの作成

  1. Fastly コントロールパネルにログインします。
  2. All services ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
  3. Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
  4. Content をクリックします。Content ページが表示されます。
  5. Create header ボタンをクリックします。Create a header ページが表示されます。

    ヘッダーページから Date ヘッダーを作成

  6. Create a header フィールドに次の要領で入力します。
    • Name フィールドに Date と入力します。
    • Type メニューから Request を、Action メニューから Set を選択します。
    • Destination フィールドに http.Date と入力します。
    • Source フィールドに now と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 10 と入力します。
  7. Create ボタンをクリックします。Content ページに新しい Date ヘッダーが表示されます。これは後で Authorization ヘッダーの署名で使用します。

Authorization ヘッダーの作成

次に、以下の仕様で Authorization ヘッダーを作成します。

  1. Create header ボタンを再度クリックして、新しいヘッダーを作成します。Create a header ページが表示されます。

    ヘッダーページから Authorization ヘッダーを作成する

  2. Create a header フィールドに次の要領で入力します。
    • Name フィールドに Spaces Authorization と入力します。
    • Type メニューから Request を、Action メニューから Set を選択します。
    • Destination フィールドに http.Authorization と入力します。
    • Ignore if set メニューから No を選択します。
    • Priority フィールドに 20 と入力します。
  3. Source 欄には、ヘッダー認証情報を次の形式で入力します。

    1
    
    "AWS <DigitalOcean access key>:" digest.hmac_sha1_base64("<DigitalOcean secret key>", if(req.method == "HEAD", "GET", req.method) LF LF LF req.http.Date LF "/<Space name>" req.url.path)
    

    <DigitalOcean access key><DigitalOcean secret key ID>、および <Space name> は、先ほど収集した情報に置き換えます。例:

    1
    
     "AWS JKCAUEFV2ONFFOFMSSLA:" digest.hmac_sha1_base64("P2WPSu68Bfl89j72vT+bXYZB7SjlOwhT4whqt27", if(req.method == "HEAD", "GET", req.method) LF LF LF req.http.Date LF "/test123" req.url.path)
    
  4. Create ボタンをクリックします。新しい Authorization ヘッダーが Content ページに表示されます。

Source フィールドの詳細

Authorization ヘッダーの Source フィールドを詳しく見てみましょう。基本的な形式はこちらです。

AWS<Access Key><Signature Function><key><message>

以下の情報が含まれています。

要素 説明
AWS アクセスキーの前に配置された定数です。この値は常に AWS です。
access key DigitalOcean アカウントからのアクセスキー。この例では JKCAUEFV2ONFFOFMSSLA を使用しています。
signature function 署名のキーとメッセージを検証するためのアルゴリズム。この例では digest.hmac_sha1_base64(<key>, <message>) を使用しています。
key DigitalOcean アカウント からのシークレットキー。この例では P2WPSu68BfI89j72vT+bXYZB7SjIOwhT4whqt27 を使用しています。
message StringToSign の UTF-8 エンコーディングです。メッセージの各部分の内訳は以下の表をご覧ください。

Authorization ヘッダーの Source フィールドに含まれるメッセージは、このような基本的な形式になっています。

<HTTP-verb></n><Content-MD5>/n<Content-Type></n><Date></n><CanonicalizedAmzHeader></n><CanonicalizedResource>

以下の情報が含まれています。

要素 説明
HTTP-verb REST 動詞。この例では req.method を使用しています。HEAD を GET に書き換えるのは、オリジンにリクエストを送る前に Varnish が内部的に行っているからです。
/n 改行表示の定数。この値は常に /n です。
Content-MD5 メッセージの整合性チェックとして使用される content-md5 ヘッダー値。空欄であることが多いです。この例では、LF (ラインフィード) を使用しています。
Content-Type MIME-type を指定するための Content-type ヘッダーの値。空欄であることが多いです。この例では LF を使用しています。
Date 日付と時間のタイムスタンプ。上記の手順で最初に別のヘッダーとして作成した req.http.Date を使用しています。
CanonicalizedAmzHeader Spaces の実装をカスタマイズする x-amz ヘッダー。空欄であることが多いです。この例では LF を使用しています。
CanonicalizedResource DigitalOcean Space 名。この例では "/test123" を使用しています。

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

カスタム VCL を使用することで、Fastly は Spaces オブジェクトへのリダイレクトに従い Spaces レスポンスと301または302 レスポンスを別々にキャッシュすることができます。

Fastly VCL とカスタム VCL の組み合わせに関する手順を必ずお読みください。Fastly のデフォルト設定を上書きしない場合は、VCL ボイラープレート全体を含めることが重要です。

Fastly を Spaces オブジェクトへのリダイレクトに従うように設定するには、カスタム VCL に以下の VCL を挿入します。

vcl_recv 内

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub vcl_recv {

  if (req.http.redir != "true") {
    set req.backend = Main_Origin;
  } else {
    set req.backend = spaces_backend;
    set req.http.host = "nyc3.digitaloceanspaces.com";
  }

#FASTLY recv

  if (req.method != "HEAD" && req.method != "GET" && req.method != "FASTLYPURGE") {
    return(pass);
  }

  return(lookup);

}

vcl_deliver 内

1
2
3
4
5
6
7
8
9
10
11
12
13
sub vcl_deliver {

  if (resp.status == 302 || resp.status == 301) {
    set req.http.redir = "true";
    set req.url = regsub(resp.http.Location, "http://nyc3.digitaloceanspaces.com/(.*)$", "/\1");
    set req.http.Fastly-Force-Shield = "yes";
    restart;
  }

#FASTLY deliver

  return(deliver);
}

Main_Originspaces_backend は、リダイレクトを適用するサービスのバックエンドの名を必ず設定してください。正確な名前は、VCL にて確認できます。サービス表示中に、ページ上部の VCL ボタンをクリックします。

カスタム VCL にこれらの VCL スニペットを追加したら、VCL ファイルをアップロードし、新しいサービスージョンをアクティブにして変更を適用します。

This article describes an integration with a service provided by a third party. See our note on integrations for details.
Back to Top