Python 3.x GCP应用程序引擎API不可用,使用py 3
我正在尝试使用一个服务帐户从AppEngine使用AdminSDK API,该帐户具有域范围的授权,允许它模拟管理员 我找到了好几本这样做的指南,但没有一本像我预期的那样有效 下面的代码已部署到App Engine Standard中 main.pyPython 3.x GCP应用程序引擎API不可用,使用py 3,python-3.x,google-app-engine,google-cloud-platform,google-admin-sdk,Python 3.x,Google App Engine,Google Cloud Platform,Google Admin Sdk,我正在尝试使用一个服务帐户从AppEngine使用AdminSDK API,该帐户具有域范围的授权,允许它模拟管理员 我找到了好几本这样做的指南,但没有一本像我预期的那样有效 下面的代码已部署到App Engine Standard中 main.py from flask import Flask from google.auth import app_engine import google.auth try: import googleclouddebugger goog
from flask import Flask
from google.auth import app_engine
import google.auth
try:
import googleclouddebugger
googleclouddebugger.enable()
except ImportError:
pass
SCOPES = ['https://www.googleapis.com/auth/admin.directory.user']
app = Flask(__name__)
@app.route('/')
def hello():
credentials, project = google.auth.default()
appIdentity = app_engine.app_identity
credentials = app_engine.Credentials(scopes=SCOPES)
ret = "Expired:{}".format(credentials.expired)
ret += "\nvalid:{}".format(credentials.valid)
return 'Hello World!\n'+ret
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)
app.yaml
runtime: python37
代码credentials=app\u引擎。由于app\u引擎,凭据(scopes=scopes)
将向应用程序发送500条错误消息。app\u标识始终为none
"Traceback (most recent call last):
File "/env/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/env/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/env/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/env/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/env/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/env/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/srv/main.py", line 52, in hello
credentials = app_engine.Credentials(scopes=SCOPES)
File "/env/lib/python3.7/site-packages/google/auth/app_engine.py", line 107, in __init__
'The App Engine APIs are not available.')
OSError: The App Engine APIs are not available."
正如您看到的错误报告中所示,应用程序引擎API不可用
,但GCP项目中没有相同名称的API
下面是我在项目中启用的所有API,以实现项目的要求。当然,错误仍然会出现
这是一个测试环境,如果有人需要访问,请询问,我很乐意为您提供GCP项目的查看器权限
感谢您的时间:)您使用的是python37运行时(第二代标准环境),它与应用程序引擎API不兼容(只有python27/1代是兼容的)。发件人:
Python 3中没有专有的应用程序引擎API。这
第节列出了建议的更换件
来自google.auth import app_engine的实际上不可用,因为它们是基于其中一个专有的
要在python37运行时中进行身份验证,请遵循一节。基本上与应用程序标识API不同,在应用程序标识API中,您只需调用一次Credentials()
,然后使用应用程序标识访问服务,在python37中,您可以使用相应的服务APIClient()
调用(或等效调用)对所需的每个服务进行身份验证:
如果要使用的服务帐户不是应用程序的默认服务帐户,则需要指定它:
您可以通过执行以下任一操作来覆盖此默认流:
- 设置
GOOGLE\u应用程序\u凭据
环境变量。如果设置了此变量,云服务将使用
变量,而不是默认的服务帐户
- 为云服务实例化
客户端
对象时指定凭据。例如,如果您的应用程序正在调用中的云服务
一个不同的项目,你可能需要
非常感谢你。如果之后我需要从appengine服务帐户开始使用域范围的委派,您有什么建议吗?我搜索了几次,但似乎唯一的方法是使用服务帐户json密钥作为SA进行身份验证,然后模拟另一个帐户。你知道从che.Client()方法开始做这件事的方法吗?不幸的是,我没有在这个区域玩过。但我无意中发现,这听起来可能有关联。
# If you don't specify credentials when constructing the client, the
# client library will look for credentials in the environment.
storage_client = storage.Client()