我一直致力于使用Cloud Endpoints v2的小型Google App Engine(标准环境)项目。我的代码主要基于Google提供的quickstart。
一切都运行良好,但是我在几周没看过它之后今天重新部署了,当我尝试呼叫端点时,我收到以下错误:
错误:连接到服务器时出错:URL的DNS查找失败:metadata.google.internal
之前没有发生这种情况。当Python导入端点包时似乎正在发生。
我的端点没有做任何花哨的事情 - 我没有从示例EchoApi更改源代码。无论我是尝试通过API Explorer还是通过Curl访问API,错误都会在GCP Logging控制台中结束。
我在部署期间没有遇到任何错误。
编辑#1
进一步的信息:
错误源自我在google-endpoints
文件夹中包含的lib
包中附带的Google代码。
文件。具体而言,错误发生在google/api/control/wsgi.py
的第54行。
基本上,它正在使用urllib2向metadata.google.internal
发出请求。
我猜这个地址只能从Google Cloud中获取,无论出于何种原因,托管我的应用的实例都无法对其进行DNS查找。
编辑:#2
再挖一点。
似乎错误源自google-endpoints-api-management软件包。 10月19日承诺对该软件包的更改似乎引入了额外的平台报告。系统会查询metadata.google.internal以检查代码是否在Google容器引擎中运行,然后它会爆炸,因为元数据地址无法解析。
google-endpoints包只需要google-endpoints-api-management> = 1.0.0b1。在我的结尾,在版本1.0.0b2上工作正常,但后来我构建了一个新的lib文件夹,它导致了1.0.0b5,并且事情进展顺利。 b2和b5之间所需的包没有变化,所以我想我暂时可能只能降级到b2。尚未尝试过。
向Google Dev发送了一封电子邮件。也许他会提出进一步的提示。
编辑:2016-11-07
测试将google-endpoints-api-management软件包降级为1.0.0b2。似乎工作,kludgy修复原样。如果您正在使用lib文件夹,则以下内容将清除较新的容易出错的wsgi.py文件并放回旧文件:
pip install -t lib google-endpoints-api-management==1.0.0b2 --upgrade
不漂亮,但它可能会让你恢复营业。
另一方面,Google工程师立即回复说他很快就会看到这个问题。幸运的是,端点v2最终将退出测试阶段,因为到目前为止我真的很喜欢它。
答案 0 :(得分:2)
这将在即将发布的google-endpoints-api-management软件包补丁中修复(将为1.0.0b6)。它可能会在11月6日星期一的某个时间发布。
如果您想立即继续测试并且此错误阻止了您,则可以返回1.0.0b4直到1.0.0b6出来。该版本的所有内容仍然可以正常工作。
感谢您引起我们的注意!我们正在努力在测试期间消除所有这些皱纹,为我们的首次发布做准备。
编辑:1.0.0b6已经发布并解决了这个问题。感谢您在我们的测试阶段耐心等待!
答案 1 :(得分:0)
(代表OP发布解决方案)。
Google已发布google-endpoints-api-management软件包的1.0.0b6版本来解决此问题。它解决了我的问题。对于遇到此问题的任何人,请清理您的lib文件夹并重新安装google-endpoints包。这将带来新的google-endpoints-api-management软件包。
感谢Brad对Google的快速行动。