Задача лизинга приложения в вычислительном движке
Я пытаюсь арендовать задачу механизма приложений из очереди извлечения в экземпляре механизма вычислений, но он продолжает выдавать эту ошибку:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "you are not allowed to make this api call"
}
],
"code": 403,
"message": "you are not allowed to make this api call"
}
}
Это код, который я использую:
import httplib2, json, urllib
from oauth2client.client import AccessTokenCredentials
from apiclient.discovery import build
def FetchToken():
METADATA_SERVER = ('http://metadata/computeMetadata/v1/instance/service-accounts')
SERVICE_ACCOUNT = 'default'
http = httplib2.Http()
token_uri = '%s/%s/token' % (METADATA_SERVER, SERVICE_ACCOUNT)
resp, content = http.request(token_uri, method='GET',
body=None,
headers={'Metadata-Flavor': 'Google'})
print token_uri
print content
if resp.status == 200:
d = json.loads(content)
access_token = d['access_token'] # Save the access token
credentials = AccessTokenCredentials(d['access_token'],
'my-user-agent/1.0')
autho = credentials.authorize(http)
print autho
return autho
else:
print resp.status
task_api = build('taskqueue', 'v1beta2')
lease_req = task_api.tasks().lease(project='project-name',
taskqueue='pull-queue',
leaseSecs=30,
numTasks=1)
result = lease_req.execute(http=FetchToken()) ####ERRORS HERE
item = result.items[0]
print item['payload']
Это похоже на проблему аутентификации, но она выдает мне ту же самую ошибку, если я делаю тот же самый запрос на аренду, используя придуманное имя проекта, поэтому я не могу быть уверен.
Я также запустил экземпляр с включенной задачей.
Любая помощь будет принята с благодарностью
1 ответ
На случай, если кто-то еще столкнется с такой проблемой, я объясню, как она работает сейчас. Во-первых, я использую другой (более короткий) метод аутентификации:
from oauth2client import gce
credentials = gce.AppAssertionCredentials('')
http = httplib2.Http()
http=credentials.authorize(http)
credentials.refresh(http)
service = build('taskqueue', 'v1beta2', http=http)
Во-вторых, причина, по которой мой запрос на аренду был отклонен, заключается в том, что в queue.yaml адрес электронной почты моей учетной записи был задан как адрес писателя. В документации упоминается, что электронная почта, заканчивающаяся на @gmail.com, не будет иметь прав на электронную почту пользователя, если она установлена в качестве писателя электронной почты. Не упоминается, что это распространяется на электронные письма, заканчивающиеся на @ developer.gserviceaccount.com.