【发布时间】:2017-03-10 04:41:52
【问题描述】:
我用 python sdk 编写自定义接收器。我尝试将数据存储到 AWS S3。要连接 S3,需要一些凭证、密钥,但出于安全原因,最好在代码中设置。我想让环境变量作为环境变量到达 Dataflow 工作人员。 我该怎么做?
【问题讨论】:
标签: google-cloud-platform google-cloud-dataflow apache-beam
我用 python sdk 编写自定义接收器。我尝试将数据存储到 AWS S3。要连接 S3,需要一些凭证、密钥,但出于安全原因,最好在代码中设置。我想让环境变量作为环境变量到达 Dataflow 工作人员。 我该怎么做?
【问题讨论】:
标签: google-cloud-platform google-cloud-dataflow apache-beam
一般来说,如果您不想硬编码,您应该使用PipelineOptions 向工作人员传输信息 - 请参阅Creating Custom Options。然后,在构建管道时,只需从您的 PipelineOptions 对象中提取参数并将它们放入您的转换中(例如放入您的 DoFn 或接收器中)。
但是,对于像凭证这样敏感的东西,在命令行参数中传递敏感信息可能不是一个好主意。我会推荐一种更安全的方法:将凭证放入 GCS 上的文件中,并将文件的 name 作为PipelineOption 传递。然后在需要凭据时以编程方式从 GCS 读取文件,使用 GcsIO。
【讨论】:
argparse docs.python.org/2.7/library/argparse.html,这样可以轻松访问和使用 sys.argv 中的 CLI 参数。您无法在数据流容器内设置环境变量,但 PipelineOptions 可用于所有工作节点,您无需在此处执行任何特殊操作。添加您自己的 CLI 参数的示例:github.com/apache/beam/blob/master/sdks/python/apache_beam/…
known_args, pipeline_args = parser.parse_known_args(argv) 也看到这个列表从 argv 解析的所有内置梁参数PipelineOptions(options=argv)cloud.google.com/dataflow/docs/guides/…