我想覆盖数据流工作人员使用的默认 SA,例如
[email protected]
,如果您不指定任何内容,则默认创建和使用默认 SA。但我想要自己的服务帐户,因此添加
gcloud dataflow flex-template run "flexing" \
--project=$(PROJECT)\
--template-file-gcs-location=$(JSON_PATH) \
--service-account-email=$(MY_SA) \
--region=europe-west1 \
--parameters=source=$(MY_SOURCE) \
--temp-location=$(TEMP_LOCATION) \
--staging-location=$(STAGING_LOCATION)
这将按预期启动数据流作业,但随后失败并显示
Unable to open template file: gs://..../template_launches/..../operation_result.."
。由于我的图像位于另一个项目中,我知道默认 SA 将会失败(因为它在另一个项目上没有 artifact.reader)。
在日志资源管理器中查看似乎也是这种情况,因为我认为这意味着它会回退到默认值?
我找到我的 SA 的唯一地方是 request.ServiceAccounts.email
-在 Google Cloud Console 中检查您的 IAM 权限
-找到您的服务帐户:格式为
[电子邮件受保护]-查看角色,探索每个角色详情页面查看
-在角色页面验证角色
-确保 Flex 模板和服务帐户与您的数据流位于同一区域
-检查 Google Cloud Console 中的作业配置设置,它可能具有可以覆盖您的命令行规范的默认设置。
-确保您在命令行中正确传递
compute.instances.insert.authenticationInfo.principalEmail = [email protected]
参数,示例如下:
–service-account
gcloud dataflow flex-template run JOB\_NAME
--template-file-gcs-location gs://YOUR\_TEMPLATE\_LOCATION
以下是运行具有特定 SA 的 Flex 模板的命令示例,可能会对您有所帮助:
--parameters serviceAccount=YOUR\_SERVICE\_ACCOUNT\_EMAIL,otherParam=value
gcloud dataflow flex-template run JOB\_NAME
--template-file-gcs-location gs://YOUR\_TEMPLATE\_LOCATION