パイプライン内で、別のクラウド プロジェクトのクラウド ストレージ ファイルとの間で TextIO を実行できますか?
「my-project:output.output_table」とサービス アカウントを適切に設定することで、別のプロジェクトの BigQuery テーブルにアクセスできるようです。
ただし、TextIO では、ファイル パターン「gs://some/inputData.txt」と組み合わせてプロジェクト ID を指定する方法を見つけることができませんでした。
パイプライン内で、別のクラウド プロジェクトのクラウド ストレージ ファイルとの間で TextIO を実行できますか?
「my-project:output.output_table」とサービス アカウントを適切に設定することで、別のプロジェクトの BigQuery テーブルにアクセスできるようです。
ただし、TextIO では、ファイル パターン「gs://some/inputData.txt」と組み合わせてプロジェクト ID を指定する方法を見つけることができませんでした。
はい、可能です。適切なアクセス権が存在することを確認する必要があります (コンピューティング エンジン アカウント、クラウドサービス アカウント、詳細は後述)。
バケットの権限を変更するには、gsutil を使用できます。次のアカウントを追加します。
次のコマンドを使用できます。
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 および認証ページから)。