【问题标题】:How to make the environment variables reach Dataflow workers as environment variables in python sdk如何使环境变量作为python sdk中的环境变量到达Dataflow工作人员
【发布时间】:2017-03-10 04:41:52
【问题描述】:

我用 python sdk 编写自定义接收器。我尝试将数据存储到 AWS S3。要连接 S3,需要一些凭证、密钥,但出于安全原因,最好在代码中设置。我想让环境变量作为环境变量到达 Dataflow 工作人员。 我该怎么做?

【问题讨论】:

    标签: google-cloud-platform google-cloud-dataflow apache-beam


    【解决方案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/…
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 2019-09-02
    • 2018-12-02
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2021-11-07
    相关资源
    最近更新 更多