Если каждый раз, когда вы модифицируете лямбда-программу, вам приходится создавать zip-пакет и загружать его в фоновый режим aws, чтобы увидеть, как работает ситуация, это слишком неэффективно.
Самое интересное, что есть инструмент sam cli, который можно использовать для локальной отладки лямбда-программ.
Installation
помещение
Для локального запуска бессерверных программ с помощью sam cli необходимо установить и запустить docker. sam cli подключается к процессу docker с помощью переменной среды DOCKER_HSOT.
- macOS: Docker for Mac
- Windows: Docker for Windows
- Linux: yum install docker
Установите sam-cli с помощью pip
Подсчитано, что документацию по aws никто не обновлял, или есть только инструкции по установке sam cli на npm.Старый sam cli устанавливается npm. Итак, здесь я рекомендую использовать последнюю версию sam cli, которая устанавливается вместе с pip.
требуется питон 2.7
pip install --user aws-sam-cli
Проверьте, прошла ли установка успешно
sam --version SAM CLI, version 0.3.0
Usage
Продолжайте использовать пример срабатывания события S3 из предыдущей статьи, если вы ее не читали, рекомендуем сначала прочитать.Разрабатывайте бессерверные программы с помощью aws lambda
1. Пример кода
from __future__ import print_function
import json
import urllib
import boto3
print('Loading function')
s3 = boto3.client('s3')
def lambda_handler(event, context):
# Get the object from the event and show its content type
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key'].encode('utf8'))
try:
response = s3.get_object(Bucket=bucket, Key=key)
print("CONTENT TYPE: " + response['ContentType'])
return response['ContentType']
except Exception as e:
print(e)
print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
raise e
2. Исходный каталог
3. Создайте тестовые случаи
sam local generate-event s3 --region us-east-1 --bucket test4lambda --key lambda-test.txt > event.json
Корзина S3 (test4lambda) и ключ (lambda-test.txt) должны быть созданы заранее.
Создайте следующий вариант использования
{
"Records": [
{
"eventVersion": "2.0",
"eventName": "ObjectCreated:Put",
"eventTime": "1970-01-01T00:00:00.000Z",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3",
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"key": "lambda-test.txt",
"sequencer": "0A1B2C3D4E5F678901",
"size": 1024
},
"bucket": {
"ownerIdentity": {
"principalId": "EXAMPLE"
},
"name": "test4lambda",
"arn": "arn:aws:s3:::test4lambda"
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1"
}
]
}
4. Напишите файл конфигурации yaml
Конечно, вам не нужно писать его вручную, вы можете экспортировать его в лямбда-фон.
4.1 Экспорт функций
4.2 Загрузите файл AWS SAM
4.3 Полученный файл конфигурации выглядит следующим образом
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: >-
An Amazon S3 trigger that retrieves metadata for the object that has been
updated.
Resources:
myTest1:
Type: 'AWS::Serverless::Function'
Properties:
Handler: lambda_function.lambda_handler
Runtime: python2.7
CodeUri: .
Description: >-
An Amazon S3 trigger that retrieves metadata for the object that has
been updated.
MemorySize: 128
Timeout: 3
Role: 'arn:aws:iam::851829110870:role/service-role/lambdaTest'
Events:
BucketEvent1:
Type: S3
Properties:
Bucket:
Ref: Bucket1
Events:
- 's3:ObjectCreated:*'
Tags:
'lambda-console:blueprint': s3-get-object-python
Bucket1:
Type: 'AWS::S3::Bucket'
4.4 Последние три документа:
бегать
sam local invoke myTest1 -e event.json -t myTest1.yaml
Даже предложил "тайм-аут через 3 секунды"
Решение: найдите поле Timeout в myTest1.yaml и измените его на 30.
Запустите его снова и успешно выведите «text/plain», что является результатом оператора печати в коде Python.
Эпилог
Локальная лямбда-среда отладки завершена. У sam есть еще много функций, больше обучения, вы можете выполнить следующие две команды
➜ sam --help
Usage: sam [OPTIONS] COMMAND [ARGS]...
AWS Serverless Application Model (SAM) CLI
The AWS Serverless Application Model extends AWS CloudFormation to provide
a simplified way of defining the Amazon API Gateway APIs, AWS Lambda
functions, and Amazon DynamoDB tables needed by your serverless
application. You can find more in-depth guide about the SAM specification
here: https://github.com/awslabs/serverless-application-model.
Options:
--debug Turn on debug logging
--version Show the version and exit.
--help Show this message and exit.
Commands:
init Initialize a serverless application with a...
package Package an AWS SAM application. This is an alias for 'aws
cloudformation package'.
local Run your Serverless application locally for...
validate Validate an AWS SAM template.
deploy Deploy an AWS SAM application. This is an alias for 'aws
cloudformation deploy'.
➜ sam local generate-event --help
Usage: sam local generate-event [OPTIONS] COMMAND [ARGS]...
Generate an event
Options:
--help Show this message and exit.
Commands:
api Generates a sample Amazon API Gateway event
dynamodb Generates a sample Amazon DynamoDB event
kinesis Generates a sample Amazon Kinesis event
s3 Generates a sample Amazon S3 event
schedule Generates a sample scheduled event
sns Generates a sample Amazon SNS event