在管道中,是否可以在另一个云项目中从/向云存储文件执行 TextIO?
使用“my-project:output.output_table”并正确设置服务帐户似乎可以访问另一个项目中的 BigQuery 表。
但是,使用 TextIO,我无法找到一种方法来指定项目 ID 以及我的文件模式“gs://some/inputData.txt”。
在管道中,是否可以在另一个云项目中从/向云存储文件执行 TextIO?
使用“my-project:output.output_table”并正确设置服务帐户似乎可以访问另一个项目中的 BigQuery 表。
但是,使用 TextIO,我无法找到一种方法来指定项目 ID 以及我的文件模式“gs://some/inputData.txt”。
是的,这是可能的。您需要确保存在适当的访问权限(计算引擎帐户、云服务帐户,详见下文)。
要更改存储桶权限,您可以使用 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),它将作为云服务帐户 ([project-number]@cloudservices.gserviceaccount.com) 运行。此帐户在创建 Cloud Dataflow 项目时自动创建,并且默认具有对项目资源的读/写访问权限。cloudservices 帐户执行“元数据”操作:那些不在本地客户端或 Google Compute Engine 工作人员上运行的操作,例如确定输入大小、访问 Cloud Storage 文件和启动 Compute Engine 工作人员。例如,如果您的项目是 Cloud Storage 存储桶的所有者(具有对该存储桶的读/写访问权限),则与您的项目关联的云服务帐户也具有对该存储桶的所有者(读/写)访问权限。
Google Compute Engine (GCE) 实例(或工作人员)执行在云中执行 Dataflow SDK 操作的工作。这些工作人员使用您项目的 Google Compute Engine 服务帐户来访问您的管道文件和其他资源。GCE 服务帐户 (-compute@developer.gserviceaccount.com) 会在您为项目启用 Google Compute Engine API 时自动创建(来自项目的 Google Developers Console API 和身份验证页面)。