You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google App Engine同步服务启动失败:Metadata Service错误求助

Google App Engine同步服务Metadata Service错误排查

问题概述

部署在Google App Engine上的同步服务启动时触发Metadata Service相关错误,导致服务无法正常初始化。以下是相关配置、代码片段及错误日志:

配置文件 sync.yml

service: sync
instance_class: F2
automatic_scaling:
  max_instances: 1
runtime: python312
app_engine_apis: true
entrypoint: gunicorn -b :$PORT sync:app

#inbound_services:
#- warmup

libraries:
- name: jinja2
  version: latest
 - name: ssl
   version: latest

# taskqueue and cron tasks can access admin urls

handlers:
- url: /.*
  script: sync.app
  secure: always
  redirect_http_response_code: 301

env_variables:
  MEMCACHE_USE_CROSS_COMPATIBLE_PROTOCOL: "True"
  NDB_USE_CROSS_COMPATIBLE_PICKLE_PROTOCOL: "True"
  DEFERRED_USE_CROSS_COMPATIBLE_PICKLE_PROTOCOL: "True"
  CURRENT_VERSION_TIMESTAMP: "1677721600"

代码片段 sync.py

import google.appengine.api

client = ndb.Client()
def ndb_wsgi_middleware(wsgi_app):
    def middleware(environ, start_response):
        with client.context():
            return wsgi_app(environ, start_response)

    return middleware

(注:原代码中的:disappointed_face:为输入错误,已修正为合法语法)

错误日志

app.wsgi_app = ndb_wsgi_middleware(google.appengine.api.wrap_wsgi_app(app.wsgi_app))
2024-05-17 04:04:53 sync[20240515t183736] File "/layers/google.python.pip/pip/lib/python3.12/site-packages/google/cloud/ndb/_datastore_query.py", line 373, in _next_batch
2024-05-17 04:04:53 sync[20240515t183736] response = yield _datastore_run_query(query)
2024-05-17 04:04:53 sync[20240515t183736] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-17 04:04:53 sync[20240515t183736] File "/layers/google.python.pip/pip/lib/python3.12/site-packages/google/cloud/ndb/tasklets.py", line 319, in _advance_tasklet
2024-05-17 04:04:53 sync[20240515t183736] yielded = self.generator.throw(type(error), error, traceback)
2024-05-17 04:04:53 sync[20240515t183736] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-05-17 04:04:53 sync[20240515t183736] File "/layers/google.python.pip/pip/lib/python3.12/site-packages/google/cloud/ndb/_datastore_query.py", line 1030, in _datastore_run_query
2024-05-17 04:04:53 sync[20240515t183736] response = yield _datastore_api.make_call(

2024-05-17 04:04:45 sync[20240515t183736] google.api_core.exceptions.RetryError: Maximum number of 3 retries exceeded while calling <function make_call..rpc_call at 0x3e956b7625c0>, last exception: 503 Getting metadata from plugin failed with error: Failed to retrieve http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true from the Google Compute Engine metadata service. Compute Engine Metadata server unavailable

错误解读

日志核心错误为Compute Engine Metadata server unavailable,说明服务尝试访问Metadata Service获取默认服务账号元数据时,连续3次重试均返回503状态码。该失败导致NDB客户端无法完成身份认证,进而无法连接Datastore,最终引发服务启动失败。

Metadata Service 说明

Metadata Service是Google Cloud提供的内部专属服务,仅能在Google Cloud内部环境(如App Engine、Compute Engine、GKE等)通过http://metadata.google.internal访问,核心作用包括:

  • 为运行中的实例提供自身元数据(实例ID、区域、服务账号信息等)
  • 应用无需硬编码认证凭证,通过该服务获取临时授权令牌,实现对Datastore、Cloud Storage等其他Google Cloud服务的访问

解决方向

  • 重试部署:Metadata Service偶尔会出现临时故障,重新部署服务可能恢复正常
  • 检查网络配置:若配置了VPC访问控制,需确认未阻断对metadata.google.internal的请求(App Engine标准环境默认允许访问)
  • 验证服务账号权限:确保默认服务账号拥有Datastore的访问权限(如roles/datastore.user或更高权限)
  • 调整NDB配置:必要时可显式指定服务账号密钥文件(不推荐在App Engine环境中硬编码),或调整客户端重试参数

官方文档参考

  • Google Cloud Metadata Service文档:涵盖服务功能、访问方式及可用元数据字段
  • App Engine标准环境服务账号文档:说明服务账号的使用与权限配置
  • Cloud NDB客户端文档:指导NDB在App Engine环境中的正确配置

内容的提问来源于stack exchange,提问作者ffejrekaburb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:09:52