1

パイプライン内で、別のクラウド プロジェクトのクラウド ストレージ ファイルとの間で TextIO を実行できますか?

「my-project:output.output_table」とサービス アカウントを適切に設定することで、別のプロジェクトの BigQuery テーブルにアクセスできるようです。

ただし、TextIO では、ファイル パターン「gs://some/inputData.txt」と組み合わせてプロジェクト ID を指定する方法を見つけることができませんでした。

4

1 に答える 1

4

はい、可能です。適切なアクセス権が存在することを確認する必要があります (コンピューティング エンジン アカウント、クラウドサービス アカウント、詳細は後述)。

バケットの権限を変更するには、gsutil を使用できます。次のアカウントを追加します。

  • [プロジェクト番号]@cloudservices.gserviceaccount.com
  • Google Compute Engine サービス アカウント

次のコマンドを使用できます。

gsutil acl ch -r -u <email address of service account>:FC gs://<BUCKET>

バケットの権限を確認するには:

gsutil getacl  gs://<your bucket>

Cloud Storage バケットはグローバル名前空間に存在することに注意してください: https://cloud.google.com/storage/docs/bucket-naming#requirements

権限の詳細:

Cloud Dataflow をローカルで (DirectPipelineRunner を使用して) 実行すると、パイプラインは gcloud 実行可能ファイルで構成した Google Cloud アカウントとして実行されます (gcloud auth login を使用)。したがって、ローカルで実行される Cloud Dataflow SDK オペレーションは、Google Cloud アカウントがアクセスできるファイルとリソースにアクセスできます。

Cloud Dataflow パイプラインがクラウドで実行される場合 (DataflowPipelineRunner または BlockingDataflowPipelineRunner を使用)、cloudservices アカウント ([プロジェクト番号]@cloudservices.gserviceaccount.com) として実行されます。このアカウントは、Cloud Dataflow プロジェクトの作成時に自動的に作成され、デフォルトでプロジェクトのリソースへの読み取り / 書き込みアクセス権を持ちます。cloudservices アカウントは、入力サイズの決定、Cloud Storage ファイルへのアクセス、Compute Engine ワーカーの起動など、ローカル クライアントや Google Compute Engine ワーカーでは実行されない「メタデータ」操作を実行します。たとえば、プロジェクトが Cloud Storage バケットの所有者である (バケットへの読み取り/書き込みアクセス権がある) 場合、プロジェクトに関連付けられている cloudservices アカウントにもバケットへの所有者 (読み取り/書き込み) アクセス権があります。

Google Compute Engine (GCE) インスタンス (またはワーカー) は、クラウドで Dataflow SDK 操作を実行する作業を実行します。これらのワーカーは、プロジェクトの Google Compute Engine サービス アカウントを使用して、パイプラインのファイルやその他のリソースにアクセスします。プロジェクトで Google Compute Engine API を有効にすると、GCE サービス アカウント (-compute@developer.gserviceaccount.com) が自動的に作成されます (プロジェクトの Google Developers Console API および認証ページから)。

于 2015-02-13T18:06:25.430 に答える