Как я могу проверить lambda в локальном использовании python?

Есть ли способ, которым я могу проверить aws лямбда в локальном? Я знаю, что есть пакет, имя которого является "localstack", но похоже, что не так много людей, которые его пробовали.

Ответ 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 автоматически отключаются. Макет сохраняет состояние ведер и ключей.

Ответ 4

[Это изменило кучу с момента первоначального вопроса]

Дразнить сервисы AWS сложно, потому что они меняются. В идеале вы используете сервис Live в своей среде разработки. Проблема с живыми сервисами заключалась в необходимости развертывания в... ждать... тестирования каждого изменения.

Если вам нужно только разработать или отладить саму лямбда-функцию, локальный вызов AWS SAM CLI является хорошим выбором.

Если вам также нужно вызывать другие сервисы, такие как S3, Dynamodb и т.д., CLI Stackery является расширением CLI AWS SAM, созданным для разработки с использованием живых облачных ресурсов с разрешениями на облачное хранилище.

CLI Stackery не зависит от языка и бесплатен, но вот быстрый запуск Python без сервера и некоторые другие ресурсы.