我面临一个问题,无法通过 API 为我的 App Engine 项目创建域映射。每当我尝试映射自定义域并自动配置 SSL 证书时,都会遇到 500 错误,并显示消息“遇到内部错误。”
我正在使用 Python Flask 应用程序和
googleapiclient
库与 App Engine API 进行交互。我的应用程序的其余部分仍然运行良好。
这是我的代码片段:
def create_domain_mapping(domain_name):
try:
credentials = get_credentials()
if not credentials:
logging.error("Failed to retrieve credentials.")
return None
app_id = os.getenv('app_id')
if not app_id:
logging.error("App ID is not set.")
return None
service = build('appengine', 'v1', credentials=credentials)
app_name = f"apps/{app_id}"
domain_body = {
"name": "apps/{app_id}/domainMapping/{domain_name}",
"id": domain_name
# "sslSettings": {
# "sslManagementType": "AUTOMATIC"
#}
}
response = service.apps().domainMappings().create(appsId=app_name, body=domain_body).execute()
logging.info(f"SUCCESS - Domain mapping response : {response}")
return response
except Exception as e:
logging.error(f"Failed to provision SSL : {e}")
return None
对于这个问题,我已经采取了以下步骤来排查:
验证服务帐户权限:确保服务帐户具有必要的 App Engine 管理员和项目查看者角色。
检查App Engine日志:没有其他相关错误消息。
已测试的网络连接: 已确认与 Google Cloud 服务的网络连接。
检查配额: 已验证我没有超出任何 App Engine 配额。
重写了 API 调用:尝试了 API 调用的不同变体来创建域映射。在下面的代码中,我什至注释掉了 SSL 配置只是为了测试域映射。
DNS 设置: 我已确保我尝试映射的域在 DNS 中也具有正确的 A/CNAME 记录,因此它指向我的应用程序
GCloud 中的手动映射:我已手动添加域以查看是否存在问题并且成功运行。
其他错误:当 API 调用中包含 SSL 数据时,我还会收到错误:“信息:Compute Engine 元数据服务器对 Universe/universe_domain 的调用返回了 404,原因:找不到 404 页面”。我没有在我的应用程序中的任何地方显式调用此路径。
Google 说 googleapiclient 库处于维护模式,他们建议您切换到云客户端库。对于域映射,这将是 appengine 管理库
This 是示例代码模板的链接,用于使用 python 的 appengine-admin 库创建域映射。有效负载应该像this