#amazon-web-services #amazon-s3 #aws-lambda #amazon-cloudformation
#amazon-веб-сервисы #amazon-s3 #aws-lambda #amazon-облачная информация
Вопрос:
Заранее спасибо. Я пытаюсь создать сегмент s3 и лямбда-функцию. Цель состоит в том, чтобы выполнить лямбда-функцию, когда мы загружаем что-либо в корзину s3. Я пробовал разные методы, но, похоже, они не работают. Любая помощь приветствуется.
Resources:
s3bucketvideo:
Type: AWS::S3::Bucket
DependsOn: S3InvokeLambdaPermission
Properties:
BucketName: s3bucketvideo
NotificationConfiguration:
LambdaConfigurations:
- Event: 's3:ObjectCreated:*'
Function: !GetAtt VideoToImageLambda.Arn
S3InvokeLambdaPermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:InvokeFunction
FunctionName: !Ref VideoToImageLambda
Principal: s3.amazonaws.com
SourceArn: !GetAtt s3bucketvideo.Arn
cflambdarole:
Type: AWS::IAM::Role
Properties:
RoleName: cflambdarole
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AWSLambda_FullAccess
- arn:aws:iam::aws:policy/AWSLambdaExecute
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
VideoToImageLambda:
Type: AWS::Lambda::Function
Properties:
FunctionName: VideoToImageLambda
Timeout: 120
Role:
Fn::GetAtt:
- cflambdarole
- Arn
Runtime: python3.9
Handler: script.hprint
Code:
S3Bucket: s3-neuralopsdev
S3Key: script.zip
Ответ №1:
Одним из быстрых решений является использование SourceAccount вместо SourceArn в разрешении:
SourceAccount: !Ref 'AWS::AccountId'
После создания стека вы также можете добавить SourceArn и выполнить обновление.
Это также обсуждается здесь.
Комментарии:
1. Большое спасибо за ответ. Я использовал SourceAccount , и он создал стек, но без триггера уведомления. Возможно ли это сделать только в create_stack? Я проверил источник, который вы вставили. Это что-то связанное с пользовательским уведомлением.
2. Я считаю, что вам нужен пользовательский ресурс, чтобы сделать это только в create_stack. Я также думаю, что уведомление должно быть создано только с помощью SourceAccount — хотя это было бы слишком открыто.
3. Спасибо за ваш ответ. Уведомление не создается с помощью SourceAccount . В нем говорится, что мне нужно будет написать новую лямбда-функцию для моего пользовательского ресурса. Я не знаю о том, как создать функцию для пользовательского ресурса.
Ответ №2:
Просто обновление. Я создал стек без уведомления о корзине, а затем обновил стек уведомлением о корзине для быстрого решения. Это сделало свое дело.