代码之家  ›  专栏  ›  技术社区  ›  Evert

检索元数据[重复]

  •  0
  • Evert  · 技术社区  · 8 年前

    我想访问 Metadata Service 来自应用程序引擎标准应用程序。我试着做了一次尝试 http://metadata.google.internal/computeMetadata/v1/project/attributes 然后回来了 DNS lookup failed :

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

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

    0 回复  |  直到 9 年前
        1
  •  8
  •   jcjones1515    8 年前

    一些友好的人在街上 GCP slack channel 指给我看 RuntimeConfig API 用于在谷歌云中跨多种服务共享配置。这解决了我一直在寻找的共享配置的问题。

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

    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
  •  2
  •   Community Mohan Dere    9 年前

    不,您不能从GAE标准实例访问(特定于GCE的)元数据,因为它不是GCE VM/实例。从…起 Getting metadata (我的重点):

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

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

    但一般来说,通过在每个需要它的服务/模块目录中对同一文件(最好放在app dir中)进行符号链接,可以在GAE服务/模块之间共享文件。参见以下示例: Sharing entities between App Engine modules 这里: https://stackoverflow.com/a/34111170/4495081

    只要flex服务/模块以与标准服务/模块相同的方式使用相同的文件内容,这种技术也应该适用于它们,这意味着您可以通过共享 appengine_config.py 例如,文件。