公開 URL から Cloud Storage に転送する

Storage Transfer Service は、パブリック URL のリストから Cloud Storage バケットにファイルをコピーできます。

転送を作成するときに、転送するオブジェクトの URL と詳細を含むタブ区切り値(TSV)ファイルへのリンクを指定します。TSV ファイルは、一般公開されている HTTP または HTTPS の場所でホストすることも、Cloud Storage バケットに保存することもできます。

このページでは、URL リストを作成し、ジョブ作成コマンドに渡す方法について説明します。

ソースファイルの要件

  • URL は一般公開されており、HTTP または HTTPS プロトコルを使用している必要があります。
  • 各オブジェクトをホストするサーバーが次の条件を満たしていること。
    • robots.txt でオブジェクトへのアクセスを拒否してはなりません。
    • Range リクエストのサポート
    • 各レスポンスで Content-Length ヘッダーを返すこと。

URL リストの形式

URL リストは、次の要件を満たしている必要があります。

  • ファイルはタブ区切りの値としてフォーマットする必要があります。
  • URL は UTF-8 の辞書順で並べる必要があります。
  • 最初の行には TsvHttpData-1.0 を指定する必要があります。
  • 最初の行の後に、行ごとに 1 つのオブジェクトを指定します。
  • 各行には URL を含める必要があります。また、ファイルサイズとオブジェクトの Base64 でエンコードされた MD5 チェックサムを含めることもできます。

次に、転送する 2 つのオブジェクトを指定する TSV ファイルのサンプルを示します。このページではタブがスペースとしてレンダリングされていますが、独自のファイルでは、フィールド間にタブを使用してください。

TsvHttpData-1.0
https://example.com/myfile.pdf    1357    wHENa08V36iPYAsOa2JAdw==
https://example2.com/images/dataset1/flower.png    2468    R9acAaveoPd2y8nniLUYbw==

各行には次の情報が含まれます。

  • 転送元オブジェクトの HTTP または HTTPS URL。
  • (省略可)オブジェクトのサイズ(バイト単位)。

    指定されたサイズが、フェッチされたときのオブジェクトの実際のサイズと一致することを確認します。Cloud Storage が受け取ったオブジェクトのサイズが指定されたサイズと一致しない場合、オブジェクトの転送は失敗となります。

  • (省略可)オブジェクトの Base64 でエンコードされた MD5 チェックサム。

    指定された MD5 チェックサムが、転送されたバイトから計算された MD5 チェックサムと一致することを確認します。Cloud Storage が受け取ったオブジェクトの MD5 チェックサムが、指定された MD5 チェックサムと一致しない場合、オブジェクトの転送は失敗となります。

オブジェクトのサイズと MD5 チェックサム値は省略可能ですが、データの整合性を確保するために含めることを強くおすすめします。

URL リストのホスティング

URL リストは、次のいずれかの場所にホストできます。

  • 一般公開されている URL。
  • Storage Transfer Service のサービス エージェントにアクセス権が付与されている Cloud Storage バケット。

一般公開 URL

一般公開 URL に URL リストを保存する場合は、次の要件が適用されます。

  • URL は http:// または https:// で始まる必要があります。
  • URL リストを返すときに、サーバーは HTTP レスポンスに強力な Etag ヘッダーを設定する必要があります。

たとえば、リストを Cloud Storage バケットに保存し、オブジェクトを一般公開で共有して、そのオブジェクトへのリンクを取得できます。

Cloud Storage バケット

リストを公開場所に保存しないようにするには、Cloud Storage バケットに保存し、Storage Transfer Service のサービス エージェントにアクセス権を付与します。

サービス エージェントには、次の権限を付与する必要があります。

  • オブジェクトに対する storage.object.get 権限。これは、バケットに roles/storage.legacyObjectReader ロールを付与するか、カスタムロールを使用して付与できます。
  • バケットに対する storage.buckets.get 権限。これは、roles/storage.legacyBucketReader ロールを付与するか、カスタムロールで付与できます。

サービス エージェントに権限を付与するには:

サービス エージェントのメールアドレスを確認する

  1. googleServiceAccounts.get リファレンス ページに移動します。

    [Try this method] というインタラクティブ パネルが開きます。

  2. パネルの [Request parameters] にプロジェクト ID を入力します。ここで指定するプロジェクトは Storage Transfer Service の管理に使用しているプロジェクトで、これは、URL リスト バケットのプロジェクトとは異なる場合があります。

  3. [実行] をクリックします。

サービス エージェントのメールアドレスが accountEmail の値として返され、project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com の形式を使用します。

この値をコピーします。

必要なロールを付与する

URL リストを含むバケットのサービス エージェントに roles/storage.objectViewer ロールと roles/storage.bucketViewer ロールを付与するには、バケットでの IAM ポリシーの設定と管理の手順に沿って操作します。

追加するプリンシパルは、サービス エージェントのメールアドレスです。必要な場合は、プリンシパル ID は serviceAccount です。例: serviceAccount:project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com

URL リスト転送ジョブを作成する

転送ジョブを作成するときに URL リストを指定するには、次の操作を行います。

Google Cloud コンソール

転送ジョブを作成するの手順に沿って操作します。

ソースを選択する際は、次の点にご注意ください。

  1. [参照元の種類] で、[URL リスト] を選択し、[次のステップ] をクリックします。

  2. [TSV ファイルの URL] で、タブ区切りの値(TSV)ファイルの URL を指定します。URL は、HTTP/HTTPS アドレス(https://example.com/urllist.tsv など)または Cloud Storage パス(gs://my-bucket/urllist.tsv など)です。

gcloud CLI

新しい転送ジョブを作成するには、gcloud transfer jobs create コマンドを使用します。

gcloud transfer jobs create \
  SOURCE DESTINATION

URL リストの転送の場合、SOURCE の値は TSV ファイルの URL です。URL は、HTTP/HTTPS アドレス(https://example.com/urllist.tsv など)または Cloud Storage パス(gs://my-bucket/urllist.tsv など)です。

gcloud CLI を使用して転送を作成する方法については、転送ジョブを作成するをご覧ください。

REST

REST API を使用して URL リスト転送ジョブを作成するには、listUrl フィールドに TSV ファイルの URL を指定します。

{
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "httpDataSource": {
      "listUrl": "URL"
    },
    "gcsDataSink": {
      "bucketName": "DESTINATION_BUCKET"
    }
  },
  "status": "ENABLED"
}

URL の値は、HTTP/HTTPS アドレス(https://example.com/urllist.tsv など)または Cloud Storage パス(gs://my-bucket/urllist.tsv など)です。

REST API を使用して転送を作成する方法については、REST API リファレンスをご覧ください。