Вызовите функцию Google Cloud из облачных задач Google с помощью oidc_token. - PullRequest
0 голосов
/ 24 января 2020

[ОБНОВЛЕНИЕ] Я нашел, где была проблема. Мне нужно было создать учетную запись для задач service- [project-number] @ gcp-sa-cloudtasks.iam.gserviceaccount.com

У меня проблема с вызовом Google Cloud Function из Google Cloud Task. Эта проблема появляется, только если я использую параметр oidc_token.

Я использовал учебник по облачным задачам Google из здесь . Я использую ту же учетную запись службы для создания задачи и как oidc_token значение. Я добавил роль владельца в эту учетную запись.

Вот код:

from google.cloud import tasks_v2
from google.protobuf import timestamp_pb2

client = tasks_v2.CloudTasksClient()

project = '[Project]'
queue = 'fooqueue2'
location = 'asia-east2'
url = f'https://asia-east2-{project}.cloudfunctions.net/helloworld'
payload = None
in_seconds = 0

# Construct the fully qualified queue name.
parent = client.queue_path(project, location, queue)

# Construct the request body.
task = {
    'http_request': {
        'http_method': 'POST',
        'url': url,
        'oidc_token': {
            'service_account_email': f"{project}@appspot.gserviceaccount.com"
        }

    }
}


print(list(client.list_tasks(parent)))
response = client.create_task(parent, task)
print('Created task {}'.format(response.name))

, тогда при получении задач я вижу

last_attempt {
  schedule_time {
    seconds: 1579860668
    nanos: 184117000
  }
  dispatch_time {
    seconds: 1579860668
    nanos: 185066000
  }
  response_time {
    seconds: 1579860668
    nanos: 206251000
  }
  response_status {
    code: 2
    message: "UNKNOWN(2): HTTP status code 0"
  }
}

Функция доступна для всех пользователей. Я добавил в этот service_account_email сообщение владельца, активатора облачных функций, создателя токенов учетной записи службы, агента службы облачных задач.

...