как разработать и протестировать python AWS-lambda на локальной машине, которая зависит от S3 bucket - PullRequest
0 голосов
/ 21 января 2019

Есть ли способ сделать python aws-lambda на локальной машине, который может читать и записывать данные из корзины S3. Я могу заставить это работать на лямбде на веб-странице AWS со следующим кодом без проблем.

import json

def lambda_handler(event, context):
    # TODO implement
    now = datetime.datetime.now()
    cur_day = "{}{}{}".format(now.strftime('%d'),now.strftime('%m'),now.year)
    print(cur_day)
    my_contents = get_data_from_s3_file('myBucket', 'myFile')
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

def get_data_from_s3_file(bucket, my_file):
    """Read the contents of the file as a string and split by lines"""
    my_data = s3.get_object(Bucket=bucket, Key=my_file)
    my_text = my_data['Body'].read().decode('utf-8').split('\n')

    return my_text

Проблема в том, что это ужасная среда для написания и отладки кода, поэтому я хотел бы сделать это на своей локальной машине. Я установил AWS-CLI и установил приложение, которое позволяет запускать лямбда-код в локальной среде с именем «python-lambda-local», как показано здесь .

pip install python-lambda-local
python-lambda-local -l lib/ -f lambda_handler -t 5 pythonLambdaLocalTest.py event.json

Файл 'pythonLambdaLocalTest.py' содержит тот же код, который я запускал на AWS из консоли - здесь преимущество заключается в том, что я могу использовать IDE, например код Visual Studio, для его написания. Если я запускаю его без вызова 'get_data_from_s3_file', то кажется, что код работает нормально на локальной машине, и 'cur_day' выводится на консоль. Однако, если я запускаю полный скрипт и пытаюсь подключиться к корзине, я получаю следующую ошибку:

raise EndpointConnectionError(endpoint_url=request.url, error=e)
botocore.exceptions.EndpointConnectionError: Could not connect to the 
endpoint URL: "https://myBucket/myfile"

У кого-нибудь есть способ подключения к s3 с локальной машины? Я уверен, что должен быть способ использовать aws-cli? или модель приложения без сервера (sam)? Однако я не могу найти никаких руководств, которые достаточно полны, чтобы следовать.

Я также попытался загрузить файл .yaml из консоли и поместить его в локальный каталог и запустить:

sam local start-api -t pythonLambdaLocalTest.yaml

и я получаю:

2019-01-21 16:56:30 Found credentials in shared credentials file: ~/.aws/credentials
Error: Template does not have any APIs connected to Lambda functions

Это говорит о том, что потенциально API может подключить мою локальную машину к корзине aws s3, но у меня очень мало опыта в настройке такого рода вещей, и я борюсь с жаргоном. Любая помощь по запуску этого подхода будет здорово? Я недавно начал использовать докер, так что какой-то подход к этому тоже подойдет?

Я также попробовал этот подход здесь и могу видеть мои лямбда-функции, перечисленные в коде Visual Studio, но я не могу видеть или редактировать какой-либо код, и нет очевидной ссылки, чтобы сделать так что - большая часть поддержки, кажется, находится вокруг node.js, а мои лямбды - это python.

Я также понимаю, что cloud9 - это вариант, но, похоже, для него требуется работающий экземпляр EC2, за который я бы не стал платить.

Я перепробовал много подходов, но, похоже, нет полных руководств. Любая помощь высоко ценится!

...