【问题标题】:Is there a way to access the Google Cloud metadata service from AppEngine Standard for runtime configuration?有没有办法从 AppEngine Standard 访问 Google Cloud 元数据服务以进行运行时配置?
【发布时间】:2017-04-21 16:25:22
【问题描述】:

我想从 App Engine 标准应用程序访问 Metadata Service。我尝试对http://metadata.google.internal/computeMetadata/v1/project/attributes 进行urlfetch 并返回DNS lookup failed:

    logging.info(urlfetch.fetch('http://metadata.google.internal/computeMetadata/v1/project/attributes/').content)

这可能吗?我想在同一个项目中的 App Engine Flex 和标准代码之间共享配置。

【问题讨论】:

  • 向我们展示您使用的代码
  • 已编辑以在上面添加代码
  • 这是什么语言?蟒蛇?

标签: google-app-engine google-cloud-platform


【解决方案1】:

GCP slack channel 上的一些友好人士将我指向RuntimeConfig API,以便在 Google Cloud 中跨多种类型的服务共享配置。这解决了我正在寻找的共享配置的问题。

对于那些好奇的人,你必须:

  1. Enable the API in API Manager 用于您的谷歌云项目
  2. 运行一些gcloud 命令:

    gcloud beta deployment-manager runtime-configs create foo-credentials
    gcloud beta deployment-manager runtime-configs variables set "bar-variable-name" "baz-value"  --config-name "foo-credentials"```
    
  3. 将 python google-cloud-runtimeconfig 库添加到您的项目中(我是通过 pip 完成的)

  4. 添加一些python代码在运行时获取变量:

    config_client = runtimeconfig.Client()
    config = config_client.config('foo-credentials')
    bar = config.get_variable('bar-variable-name')```
    

【讨论】:

    【解决方案2】:

    不,您无法从 GAE 标准实例访问(GCE 特定)元数据,因为它不是 GCE 虚拟机/实例。来自Getting metadata(强调我的):

    您可以通过发出请求来查询元数据服务器的内容 从虚拟机实例中到以下根 URL。 使用http://metadata.google.internal/computeMetadata/v1/ URL 向元数据服务器发出请求。

    您看到的metadata.google.internal 的 DNS 故障可能表明它是一个特殊的主机 DNS 条目,仅在 GCE 网络或机器内部可用。

    但一般来说,可以通过在每个需要它的服务/模块目录中对同一个文件(理想情况下放置在应用程序目录中)进行符号链接来跨 GAE 服务/模块共享文件。在此处查看示例:Sharing entities between App Engine modules 和此处:https://stackoverflow.com/a/34111170/4495081

    只要弹性服务/模块使用与标准相同的文件内容,这种技术也应该适用于它们,这意味着您可以通过共享 @987654326 来共享配置@文件,例如。

    【讨论】:

    • 感谢@Dan,这也是我的怀疑——我认为服务之间的符号链接技巧(虽然很酷)在 App Engine flex 和 App Engine 标准之间不起作用?
    • 我还没有玩过 flex env,所以我无法确定。但也许值得一试?
    • @Dan 的事情是我有几个独立的服务,它们不是来自一个通用代码库,但我希望它们能够共享元数据以进行配置。在它们之间有符号链接没有意义,因为在某些情况下它们甚至不知道彼此
    • @jcjones1515:我提到符号链接只是考虑让相关配置在模块之间同步(重复信息容易出错)。当然,这必须在您的实际项目环境中进行完整性检查。
    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多