Object Storage の操作

Fastly Object Storage を使用するには、次の手順を実行します。

  1. バケットを作成します。

  2. AWS CLI などの S3 互換 API を使用してバケットやオブジェクトを操作する際の認証情報として利用するアクセスキーを作成します。

  3. Fastly サービスを設定し、バケットからコンテンツを配信します。

  4. バケットに、ファイルをアップロードします。

  5. オブジェクトを取得できることを確認するためのテストを実施します。

事前の注意点

Fastly Object Storage を使用する際の前提条件、制限事項、および注意事項を必ずご確認ください。

バケットを作成

Fastly コンソールからバケットを作成するには、以下の手順を実行します。

  1. Fastly コンソールにログインしてください。
  2. Resources > Object Storage に移動します。

  3. Add bucket をクリックします。

  4. Bucket name フィールドに、バケットの名前を入力します。バケット名には小文字、数字、ピリオド、ハイフンを使用でき、一意である必要があります。

重要 : バケット名は fst または fastly で始めることはできません。

  1. Select a region メニューから、コマンドを実行する対象として Fastly Object Storage region を選択します。

  2. Create をクリックします。

バケットを作成したら、バケットにリクエストを行う際の認証に使用するアクセスキーを作成します。

アクセスキーを作成

アクセスキーは、バケットへのアップロードなど、さまざまなバケットオペレーションを実行する際に、バケットへのリクエストを認証するために使用されます。これらのオペレーションに対するアクセスレベルは、選択したアクセスキープロパティの組み合わせによって決まります。

ヒント : コントロールパネルで作成されたアクセスキーは、バケットレベルではなくアカウントレベルで Fastly Object Storage へのアクセスを許可します。バケットレベルでアクセスを許可するアクセスキーを作成する必要がある場合は、Fastly API を使用してください。

アクセスキーのプロパティアクセス許可アクセスキーの権限考慮事項
フルアクセス + 読み取りおよび書き込み権限アカウント内の現在および将来のすべてのバケットへのアクセスと、それらのバケットの読み取りと変更が可能read-write-adminバケットの作成を可能にする唯一のキータイプ
フルアクセス + 読み取り権限アカウント内の現在および将来のすべてのバケットへのアクセスと、それらのバケットの読み取りが可能read-only-admin
制限付きアクセス + 読み取りおよび書き込み権限特定のバケットへのアクセスと、それらのバケットのコンテンツの読み取りと変更が可能read-write-objectsバケットが事前に作成されている必要がある
制限付きアクセス + 読み取り権限特定のバケットへのアクセスと、それらのバケットのコンテンツの読み取りが可能read-only-objectsバケットが事前に作成されている必要がある

アクセスキーを作成するには、次の手順に従ってください。

  1. Fastly コンソールにログインしてください。
  2. Resources > Object Storage に移動します。

  3. Create key をクリックします。

  4. Description フィールドに、キーの説明を入力します。

  5. Bucket access フィールドで、キーに現在および将来のバケットへの Full access (フルアクセス) を許可するか、特定のバケットへの Limited access (制限付きアクセス) を許可するかを選択します。

    • Full access : 現在および将来のすべてのバケットへのアクセスを許可します。

    • Limited access : 特定のバケットへのアクセスを許可します。このオプションを選択した場合は、メニューを使用して、そのキーがアクセスできる特定のバケットを選択してください。

  6. Scope フィールドで、キーに許可するアクセスのレベルを選択します。最初に作成したキーには、読み取りと書き込みのアクセスが必要です。

    • Read: 既存および将来のバケットの読み取りを許可します。

    • Read and write: 既存および将来のバケットの読み取りと書き込みを許可します。

  7. Create をクリックします。

  8. アクセスキーと秘密鍵の詳細をメモします。シークレットキーは再度確認することができないため、安全な場所に保存してください。

アクセスキーが作成されたら、Fastly サービスを設定します。これにより、バケットからコンテンツを配信できます。

Object Storage キーの管理

Object Storage のアクセスキーが1つ以上作成されると、Resources > Object Storage で、アカウントで作成されたすべての Object Storage アクセスキーの詳細を確認できます。Object Storage ページに、以下の詳細が表示されます。

  • Access Key ID : S3 互換 API から返されたアクセスキー ID です。

  • Description : アクセスキーの説明です。

  • Scope : アクセスキーで許可されるアクセスのレベルです。

  • Buckets : キーがアクセスを許可するバケットです。

  • Created on : アクセスキーが作成された日付です。

キーは編集できません。削除のみ可能です。アクティブなアプリケーションで使用されているアクセスキーを削除すると、予期しない動作が発生することがあります。

Object Storage アクセスキーを削除するには、以下の手順に従ってください。

  1. Fastly コンソールにログインしてください。
  2. Resources > Object Storage に移動します。

  3. 削除するアクセスキーの右側にあるゴミ箱アイコンゴミ箱アイコンをクリックします。

  4. Confirm and Delete をクリックします。

Fastly サービスを設定する

バケットを作成したら、バケットからコンテンツを配信する Fastly サービスを作成して設定できます。

  1. Fastly CDN サービスを作成し、ドメインを追加する手順に従ってください。

  2. Fastly サービスの設定から、オリジン > ホストに進んでください。

  3. ホスト名フィールドに、Fastly Object Storage のリージョンエンドポイントの名前を入力します (例: us-east-1.object.fastlystorage.app)。

  4. Add をクリックします。

  5. 鉛筆のアイコン鉛筆アイコンをクリックして、ホストを編集します。

  6. オーバーライドホストフィールドに、同じ Fastly Object Storage のリージョンエンドポイントを入力します (例: us-east-1.object.fastlystorage.app)。

  7. Update をクリックします。

  8. VCL にアクセスして VCL Snippets をクリックします。

  9. Add snippet をクリックします。

  10. 以下の要領で、Add VCL snippet の各フィールドに入力します。

    • Type のセクションで、Regular を選択し、通常の VCL スニペットを作成します。

    • VCL スニペットの名前を入力します。

    • Placement で、Within subroutine を選択します。

    • サブルーチンメニューから、miss (vcl_miss) を選択します。

    • Priority フィールドはデフォルトのままにしておきます。

    • VCL エディターに、プライベート Fastly Object Storage オリジンへのリクエストを認証するために必要な AWS V4 署名を生成する次のコードを貼り付けます。

      重要: プレースホルダー変数 var.fosAccessKey、var.fosSecretKey、var.fosBucket、var.fosRegion は必ず独自の値に置き換えてください。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      # vcl_miss
      # This snippet signs the backend request to your private Fastly Object Store.
      declare local var.fosAccessKey STRING;
      declare local var.fosSecretKey STRING;
      declare local var.fosBucket STRING;
      declare local var.fosRegion STRING;
      declare local var.fosHost STRING;
      declare local var.canonicalHeaders STRING;
      declare local var.signedHeaders STRING;
      declare local var.canonicalRequest STRING;
      declare local var.canonicalQuery STRING;
      declare local var.stringToSign STRING;
      declare local var.dateStamp STRING;
      declare local var.signature STRING;
      declare local var.scope STRING;
      # --- UPDATE THESE VALUES ---
      set var.fosAccessKey = "YOUR_FOS_ACCESS_KEY";
      set var.fosSecretKey = "YOUR_FOS_SECRET_KEY";
      set var.fosBucket = "my-fos-bucket"; # The name of your bucket
      set var.fosRegion = "us-east-1"; # The Fastly Object Storage region to send requests
      # --------------------------
      set var.fosHost = var.fosRegion ".object.fastlystorage.app";
      if (req.method == "GET" && !req.backend.is_shield) {
      set bereq.http.x-amz-content-sha256 = digest.hash_sha256("");
      set bereq.http.x-amz-date = strftime({"%Y%m%dT%H%M%SZ"}, now);
      set bereq.http.host = var.fosHost;
      # The request to FOS must include the bucket name in the path.
      set bereq.url = "/" var.fosBucket bereq.url;
      set bereq.url = querystring.remove(bereq.url);
      set bereq.url = regsuball(urlencode(urldecode(bereq.url.path)), {"%2F"}, "/");
      set var.dateStamp = strftime({"%Y%m%d"}, now);
      set var.canonicalHeaders = ""
      "host:" bereq.http.host LF
      "x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF
      "x-amz-date:" bereq.http.x-amz-date LF
      ;
      set var.canonicalQuery = "";
      set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date";
      set var.canonicalRequest = ""
      "GET" LF
      bereq.url.path LF
      var.canonicalQuery LF
      var.canonicalHeaders LF
      var.signedHeaders LF
      digest.hash_sha256("")
      ;
      set var.scope = var.dateStamp "/" var.fosRegion "/s3/aws4_request";
      set var.stringToSign = ""
      "AWS4-HMAC-SHA256" LF
      bereq.http.x-amz-date LF
      var.scope LF
      regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "")
      ;
      set var.signature = digest.awsv4_hmac(
      var.fosSecretKey,
      var.dateStamp,
      var.fosRegion,
      "s3",
      var.stringToSign
      );
      set bereq.http.Authorization = "AWS4-HMAC-SHA256 "
      "Credential=" var.fosAccessKey "/" var.scope ", "
      "SignedHeaders=" var.signedHeaders ", "
      "Signature=" + regsub(var.signature,"^0x", "")
      ;
      # Unset headers not needed by the origin
      unset bereq.http.Accept;
      unset bereq.http.Accept-Language;
      unset bereq.http.User-Agent;
      unset bereq.http.Fastly-Client-IP;
      }
  11. Add をクリックして、VCL スニペットを作成します。

  12. Activate メニューから、Activate on Production を選択して、設定の変更をデプロイします。

サービスの設定が完了したら、有効化する前にファイルをバケットにアップロードします。

Object Storage のバケットとオブジェクトを管理する

AWS CLI などの S3 Compatible API を使用して、バケットやオブジェクトの管理や操作、ファイルのアップロードも可能です。

どの方法を選択する場合でも、リクエストを以下の地域 Object Storage エンドポイントのいずれかに送信する必要があります。

地域S3 エンドポイント場所
us-west-1us-west-1.object.fastlystorage.appオレゴン州
us-central-1us-central-1.object.fastlystorage.appテキサス州
us-east-1us-east-1.object.fastlystorage.appバージニア州
uk-east-1uk-east-1.object.fastlystorage.appロンドン
eu-west-1eu-west-1.object.fastlystorage.appパリ
eu-centraleu-central.object.fastlystorage.appアムステルダム
eu-south-1eu-south-1.object.fastlystorage.appミラノ
jp-central-1jp-central-1.object.fastlystorage.app東京
au-east-1au-east-1.object.fastlystorage.appシドニー

これらのエンドポイントは AWS のリージョンとは異なります。LocationConstraint を含む、該当するすべての地域オプションを正しい Object Storage のリージョン名に設定してください。そうしないと InvalidRequest エラーが表示されることがあります。

ヒント: 必要なデータのみを移行して移行元プロバイダーからのデータ転送料金を削減する方法については、Fastly Object Storage のオンデマンド移行ガイドをご覧ください。

AWS CLI を使用する

AWS CLI を使用するには、まず Fastly Object Storage を S3 バックエンドとして使用するための Amazon Web Services (AWS) CLI 設定ガイドをご覧ください。

バケットが作成されたら、AWS CLI から以下のコマンドを実行することでファイルをアップロードできます。--profileフラグを使って、どの Fastly Object Storage リージョンに対してコマンドを実行するかを示します。

以下のコマンドは、my-photo.jpgという名前のファイルをmy-bucketバケットにアップロードします。

aws s3 cp my-photo.jpg s3://my-bucket/my-photo.jpg --profile fastly-us-east-1

ヒント: このコマンドの詳細については、AWS CLI ドキュメントを参照してください。

AWS CLI を通じてバケットやオブジェクトを扱う一般的なコマンドについては、AWS CLI ドキュメントを参照してください。

S3 互換 API を使用する

Object Storage は、S3 互換 API による特定の処理オペレーションをサポートしています。オペレーションは2つのグループに分類され、それぞれ料金が異なります。オペレーションの請求方法に関する詳細については、Object Storage のプロダクトページを参照してください。

クラス A オペレーション

クラス B オペレーション

S3 互換 API を使用する前に、以下の点に注意してください。

  • S3 互換 API を使用するには、すべてのバケットへの完全なアクセス権限と、読み取りおよび書き込みスコープを持つアクセスキーを使用する必要があります。

  • リクエストは以下のいずれかの Object Storage のリージョンエンドポイントに送信する必要があり、AWS V4 署名の credential scope 部分と一致するリージョンを含める必要があります。

    • us-west-1.object.fastlystorage.app

    • us-central-1.object.fastlystorage.app

    • us-east-1.object.fastlystorage.app

    • uk-east-1.object.fastlystorage.app

    • eu-west-1.object.fastlystorage.app

    • eu-central.object.fastlystorage.app

    • eu-south-1.object.fastlystorage.app

    • jp-central-1.object.fastlystorage.app

    • au-east-1.object.fastlystorage.app

    ヒント: Object Storage のリージョンエンドポイントは、AWS のリージョンとは異なります。LocationConstraint を含む、すべての地域オプションを正しい Object Storage のリージョン名に設定してください。そうしないと InvalidRequest エラーが表示されることがあります。

  • Object Storage では、ホスト名にバケット名を使用することはサポートされていません (例: https://my-bucket.us-east.object.fastlystorage.app)。

オブジェクトを取得する

Web ブラウザを開き、対象のオブジェクトの URL にアクセスして、Fastly CDN 経由でオブジェクトを取得できるかどうかをテストします。オブジェクトのパスは https://<your-domain>/<object-name> である必要があります。例えば、https://example.com/my-photo.jpg になります。

処理が成功すると、Fastly エッジから画像が表示されます。