Есть ли способ, которым я могу проверить aws лямбда в локальном? Я знаю, что есть пакет, имя которого является "localstack", но похоже, что не так много людей, которые его пробовали.
Как я могу проверить lambda в локальном использовании python?
Ответ 1
Вы можете запускать свои лямбда-функции так же, как вы запускаете любой python script, например.
if __name__ == "__main__":
event = []
context = []
lambda_handler(event, context)
Если вы используете виртуальные среды, это поможет вам установить все необходимые зависимости для вашей лямбда-функции наряду с правильной версией python.
Есть ли какие-либо дополнительные услуги, которые вам нужны, которые присутствуют в локальном стеке, который у вас локально отсутствует?
Ответ 2
Я думаю, что Moto, библиотека, которая позволяет вашим тестам легко макетировать сервисы AWS, может быть очень полезна.
Представьте, что у вас есть следующий код Python, который вы хотите протестировать:
import boto3
class MyModel(object):
def __init__(self, name, value):
self.name = name
self.value = value
def save(self):
s3 = boto3.client('s3', region_name='us-east-1')
s3.put_object(Bucket='mybucket', Key=self.name, Body=self.value)
Подумайте, как бы вы это проверили в прошлом.
Теперь посмотрим, как вы можете проверить это с помощью Moto:
import boto3
from moto import mock_s3
from mymodule import MyModel
@mock_s3
def test_my_model_save():
conn = boto3.resource('s3', region_name='us-east-1')
# We need to create the bucket since this is all in Moto 'virtual' AWS account
conn.create_bucket(Bucket='mybucket')
model_instance = MyModel('steve', 'is awesome')
model_instance.save()
body = conn.Object('mybucket', 'steve').get()['Body'].read().decode("utf-8")
assert body == b'is awesome'
Когда декоратор завершает тест, все вызовы s3 автоматически отключаются. Макет сохраняет состояние ведер и ключей.
Ответ 3
Я использовал Python Lambda Local в pip, https://pypi.python.org/pypi/python-lambda-local
Надеюсь, это поможет вам.
Ответ 4
[Это изменило кучу с момента первоначального вопроса]
Дразнить сервисы AWS сложно, потому что они меняются. В идеале вы используете сервис Live в своей среде разработки. Проблема с живыми сервисами заключалась в необходимости развертывания в... ждать... тестирования каждого изменения.
Если вам нужно только разработать или отладить саму лямбда-функцию, локальный вызов AWS SAM CLI является хорошим выбором.
Если вам также нужно вызывать другие сервисы, такие как S3, Dynamodb и т.д., CLI Stackery является расширением CLI AWS SAM, созданным для разработки с использованием живых облачных ресурсов с разрешениями на облачное хранилище.
CLI Stackery не зависит от языка и бесплатен, но вот быстрый запуск Python без сервера и некоторые другие ресурсы.