Достижение местоположения S3 на AWS лямбда-функции - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть AWS лямбда-функция, которая должна получить файл в корзине S3, моя установка выглядит следующим образом:

#lambda function

def test(event=None, context=None):
    item = 'https://s3.console.aws.amazon.com/s3/object/bucket/file.json'
    print(item)

Когда я ее запускаю, я получаю:

"errorMessage": "[Errno 2] Нет такого файла или каталога: 'https://s3.console.aws.amazon.com/s3/object/bucket/file.json'"

Я также пытался использовать этот путь:

s3://bucket/file.json

РЕДАКТИРОВАТЬ

Добавление фактического кода:

df = None
SCOPES = ['https://www.googleapis.com/auth/analytics.readonly']
KEY_FILE_LOCATION = 'arn:aws:s3:::gadsinfo/client_secrets.json'
VIEW_ID = '111'

def test(event=None, context=None):
    def initialize_analyticsreporting():
        '''Initializes an Analytics Reporting API V4 service object.

        Returns:
        An authorized Analytics Reporting API V4 service object.
        '''
        credentials = ServiceAccountCredentials.from_json_keyfile_name(
            KEY_FILE_LOCATION, SCOPES)

        # Build the service object.
        analytics = build('analyticsreporting', 'v4', credentials=credentials)

        return analytics

Сообщение об ошибке

Файл "/ var /task/test.py ", строка 21, в initialize_analyticsreporting KEY_FILE_LOCATION, SCOPES) Файл" /var/task/oauth2client/service_account.py ", строка 219, в from_json_keyfile_name с открытым (имя файла, 'r') как file_objr: FileNot: FileNot: [Errno 2] Нет такого файла или каталога: 'arn: aws: s3 ::: gadsinfo / client_secrets. json'

Строка 21 - это строка credentials = ....

Но получите то же сообщение об ошибке. Как я могу найти файл в S3?

1 Ответ

1 голос
/ 15 апреля 2020

Ожидается, что вызову ServiceAccountCredentials.from_json_keyfile_name() будет предоставлено имя файла на локальном диске , а не ссылка на объект Amazon S3.

Если функция Lambda получила достаточные разрешения через свою роль IAM, она может сначала загрузить этот файл на локальный диск :

import boto3

s3_client = boto3.client('s3')
s3_client.download_file('gadsinfo', 'client_secrets.json', '/tmp/client_secrets.json')

credentials = ServiceAccountCredentials.from_json_keyfile_name(
            '/tmp/client_secrets.json', SCOPES)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...