在管道中,是否可以访问另一个项目中的Google云端存储桶?

时间:2015-02-13 17:10:07

标签: google-cloud-dataflow

在管道中,是否可以在另一个云项目中从/向云存储文件执行TextIO?

使用" my-project:output.output_table"可以在另一个项目中访问BigQuery表。并正确设置服务帐户。

但是,使用TextIO,我无法找到一种方法来指定项目ID以及我的文件模式" gs://some/inputData.txt"。

1 个答案:

答案 0 :(得分:4)

是的,这是可能的。您需要确保存在适当的访问权限(计算引擎帐户,cloudservices帐户,详见下文)。

要更改存储区权限,您可以使用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>

请注意,云存储存储桶存在于全局命名空间中:https://cloud.google.com/storage/docs/bucket-naming#requirements

权限详情

当您在本地运行Cloud Dataflow时(使用DirectPipelineRunner),您的管道将作为您使用gcloud可执行文件配置的Google Cloud帐户运行(使用gcloud auth登录)。因此,本地运行的Cloud Dataflow SDK操作可以访问您的Google Cloud帐户可以访问的文件和资源。

当Cloud Dataflow管道在云中运行时(使用DataflowPipelineRunner或BlockingDataflowPipelineRunner),它将作为cloudservices帐户运行([project-number] @ cloudservices.gserviceaccount.com)。创建Cloud Dataflow项目时会自动创建此帐户,并且默认具有对项目资源的读/写访问权限。 cloudservices帐户执行“元数据”操作:不在本地客户端或Google Compute Engine工作人员上运行的操作,例如确定输入大小,访问云存储文件以及启动Compute Engine工作程序。例如,如果您的项目是云存储桶的所有者(具有对存储桶的读/写访问权限),则与您的项目关联的云服务帐户也具有对存储桶的所有者(读/写)访问权限。

Google Compute Engine(GCE)实例(或工作人员)执行在云中执行Dataflow SDK操作的工作。这些工作人员使用您项目的Google Compute Engine服务帐户来访问管道的文件和其他资源。当您为项目启用Google Compute Engine API时,会自动创建GCE服务帐户(-compute@developer.gserviceaccount.com)(来自Google Developers Console API和项目的auth页面)。