#python-3.x #amazon-web-services #amazon-s3 #aws-sam
#python-3.x #amazon-web-services #amazon-s3 #aws-sam
Вопрос:
Я добавляю событие S3 в свой файл sam.yaml для запуска лямбда-функции при добавлении файла в корзину.
Триггер для этих функций, которые я буду создавать, будет для существующих сегментов S3. Смогу ли я создать триггеры для существующих сегментов с помощью SAM или мне нужно будет создавать триггеры вручную?
Однако я получаю следующую ошибку
Resource with id [ApiGatewayLambdaS3Event] is invalid. property BucketName not defined for resource of type S3
Вот мой шаблон.файл yaml, который я создал со всеми лямбда-функциями и триггерами, которые я пытаюсь создать.
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: CD Demo Lambda
Resources:
CDDemoLambda:
Type: 'AWS::Serverless::Function'
Properties:
Handler: lambda_function.lambda_handler
Runtime: python3.6
CodeUri: ./FunctionOne
FunctionName: CDDemoLambda
Description: 'Lambda function for CD Demo Test'
MemorySize: 128
Timeout: 30
Events:
getAZsAPI:
Type: Api
Properties:
Path: /getazs
Method: get
HelloWorld:
Type: 'AWS::Serverless::Function'
Properties:
AutoPublishAlias: qaTest
Handler: qa-hello-world.lambda_handler
Runtime: python3.6
CodeUri: ./FunctionTwo
FunctionName: HelloWorld
Description: 'Hello WOrld'
ApiGatewayLambda:
Type: 'AWS::Serverless::Function'
Properties:
AutoPublishAlias: apigateway
Handler: lambdafunctionthree.lambda_handler
Runtime: python3.6
FunctionName: ApiGatewayLambda
CodeUri: ./FunctionThree
Description: 'Hello WOrld'
Какие изменения мне нужно внести, чтобы добавить триггер события S3, который будет создан вместе с моей лямбда-функцией.
Ответ №1:
Из документации
Вы можете дополнительно смешивать и сопоставлять, какие события вы хотите, чтобы ваш лямбда-код вызывался.
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: CD Demo Lambda
Resources:
CDDemoLambda:
Type: 'AWS::Serverless::Function'
Properties:
Handler: lambda_function.lambda_handler
Runtime: python3.6
CodeUri: ./FunctionOne
FunctionName: CDDemoLambda
Description: 'Lambda function for CD Demo Test'
MemorySize: 128
Timeout: 30
Events:
getAZsAPI:
Type: Api
Properties:
Path: /getazs
Method: get
SrcBucket:
Type: 'AWS::S3::Bucket'
HelloWorld:
Type: 'AWS::Serverless::Function'
Properties:
AutoPublishAlias: qaTest
Handler: qa-hello-world.lambda_handler
Runtime: python3.6
CodeUri: ./FunctionTwo
FunctionName: HelloWorld
Description: 'Hello WOrld'
Policies:
S3ReadPolicy:
BucketName: !Ref SrcBucket
Events:
CreateThumbnailEvent:
Type: S3
Properties:
Bucket: !Ref SrcBucket
Events: s3:ObjectCreated:*
LambdaInvokePermission:
Type: 'AWS::Lambda::Permission'
Properties:
FunctionName: !GetAtt HelloWorld.Arn
Action: 'lambda:InvokeFunction'
Principal: 's3.amazonaws.com'
SourceAccount: !Sub ${AWS::AccountId}
SourceArn: !GetAtt SrcBucket.Arn
ApiGatewayLambda:
Type: 'AWS::Serverless::Function'
Properties:
AutoPublishAlias: apigateway
Handler: lambdafunctionthree.lambda_handler
Runtime: python3.6
FunctionName: ApiGatewayLambda
CodeUri: ./FunctionThree
Description: 'Hello WOrld'
Комментарии:
1. привет, спасибо, действительно ценю это. смогу ли я использовать свое существующее ведро или мне нужно указать новое имя ведра?