如何使环境变量作为python sdk中的环境变量到达Dataflow工作人员
Posted
技术标签:
【中文标题】如何使环境变量作为python sdk中的环境变量到达Dataflow工作人员【英文标题】:How to make the environment variables reach Dataflow workers as environment variables in python sdk 【发布时间】:2017-03-10 04:41:52 【问题描述】:我用 python sdk 编写自定义接收器。我尝试将数据存储到 AWS S3。要连接 S3,需要一些凭证、密钥,但出于安全原因,最好在代码中设置。我想让环境变量作为环境变量到达 Dataflow 工作人员。 我该怎么做?
【问题讨论】:
【参考方案1】:一般来说,如果您不想硬编码,您应该使用PipelineOptions
向工作人员传输信息 - 请参阅Creating Custom Options。然后,在构建管道时,只需从您的 PipelineOptions
对象中提取参数并将它们放入您的转换中(例如放入您的 DoFn
或接收器中)。
但是,对于像凭证这样敏感的东西,在命令行参数中传递敏感信息可能不是一个好主意。我会推荐一种更安全的方法:将凭证放入 GCS 上的文件中,并将文件的 name 作为PipelineOption
传递。然后在需要凭据时以编程方式从 GCS 读取文件,使用 GcsIO。
【讨论】:
所以没有办法通过环境变量设置PipelineOptions? 更新...我肯定是通过环境变量设置管道选项...只需通过实际数据流作业中的管道选项访问它们,而不是期望它们是那里的环境变量 @AndrewCassidy,您能否详细说明一下 - 您究竟如何将环境变量传递/设置到数据流上的工作节点,以及如何在代码中使用访问它? @Timur 您将变量作为 CLI 参数传递到数据流作业中,并在代码中使用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/…以上是关于如何使环境变量作为python sdk中的环境变量到达Dataflow工作人员的主要内容,如果未能解决你的问题,请参考以下文章