Получение токена доступа к Google Cloud для API Cloud SQL для импорта CSV в облачной функции - PullRequest
1 голос
/ 18 марта 2020

Я ищу python 3 пример того, как получить токен доступа, чтобы я мог импортировать CSV-файл из GCS в Cloud SQL из функции Google Cloud.

Это из Облачная функция, поэтому ожидается, что учетная запись службы, под которой он работает, или учетная запись службы экземпляра Cloud SQL будет иметь доступ, если ему будет предоставлен доступ, но это не так.

Response HTTP Response Body: {
 "error": {
 "code": 401,
 "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
 "errors": [
 {
 "message": "Login Required.",
 "domain": "global",
 "reason": "required",
 "location": "Authorization",
 "locationType": "header"
 }
 ],
 "status": "UNAUTHENTICATED"
 }
}

Ниже приведена код, любопытно, если у кого-нибудь есть пример кода о том, как я могу заставить его аутентифицироваться.

response = requests.post(
            url="https://www.googleapis.com/sql/v1beta4/projects/redacted-project/instances/redacted-instance/import",
            headers={"Content-Type": "application/json; charset=utf-8"
            },
            data=json.dumps({
                "importContext": {
                    "fileType": "CSV",
                    "csvImportOptions": {
                        "table": "service_data"
                    },
                    "uri": "gs://redacted-bucket/log/" + blob.name + "",
                    "database": "redacted-db"
                }
            })
        )
        print('Response HTTP Status Code: {status_code}'.format(status_code=response.status_code))
        print('Response HTTP Response Body: {content}'.format(content=response.content))

Ответы [ 3 ]

1 голос
/ 18 марта 2020

Вы должны использовать google-api-python-client для создания службы для этого API вместо того, чтобы пытаться сделать запрос напрямую. Это позволит ему выбрать служебную учетную запись по умолчанию для облачной функции:

from googleapiclient.discovery import build
service = build('sql', 'v1beta4')
...

Подробнее здесь: https://github.com/googleapis/google-api-python-client/blob/master/docs/start.md

0 голосов
/ 18 марта 2020

1. Из своих облачных функций Google получите токены авторизации, запросив у сервера метаданных предположение, что ваша облачная функция работает под учетной записью службы по умолчанию, то есть с учетной записью службы App Engine по умолчанию и имеет роль Editor.

* 1003. *

2.Использование клиентских библиотек google-api-python-client:

def import_table(request):

    from googleapiclient.discovery import build
    service = build('sqladmin', 'v1beta4')

    body = {'importContext': {'fileType': 'CSV',
        'csvImportOptions': {'table': 'your_table'},
        'uri': 'gs://temprun/your_dump_file',
        'database': 'your_database'}}

    service.instances().import_(project='your_project', instance='your_instance', body=body).execute()

    return "Table was imported"

В случае успеха тело ответа содержит экземпляр операции.

{'kind': 'sql#operation',
 'targetLink': 'https://sqladmin.googleapis.com/sql/v1beta4/projects/your-project/instances/instance',
 'status': 'PENDING',
 'user': 'youraccount,
 'insertTime': '2020-03-18T09:02:55.437Z',
 'operationType': 'IMPORT',
 'importContext': {'uri': 'gs://yourbucket/dumpfile',
  'database': 'yourdatabase',
  'kind': 'sql#importContext',
  'fileType': 'CSV',
  'csvImportOptions': {'table': 'sql-table}},
 'name': 'cdcd53d4-96fe-41cf-aee4-12cf6ec6394e',
 'targetId': 'instance_name',
 'selfLink': 'https://sqladmin.googleapis.com/sql/v1beta4/projects/project/operations/cdcd53d4-96fe-41cf-aee4-12cf6ec6394e',
 'targetProject': 'your-project'}
0 голосов
/ 18 марта 2020

В облачных функциях Google вы можете получать токены авторизации, запрашивая у сервера метаданных .

Однако существует более простой вариант: использовать клиентскую библиотеку Cloud SQL. . Это автоматически получит авторизационные токены для вас.

Оба эти параметра будут проходить аутентификацию с учетной записью службы PROJECT_ID@appspot.gserviceaccount.com. Возможно, вам потребуется предоставить разрешения этой учетной записи, если вы выполняете межпроектные вызовы и т. Д. c.

...