Есть ли способ сделать 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, за который я бы не стал платить.
Я перепробовал много подходов, но, похоже, нет полных руководств. Любая помощь высоко ценится!