【发布时间】:2021-09-27 13:23:49
【问题描述】:
说明: 在将 AWS::Serverless::Function 定义为 AWS::S3::Bucket 的触发器时,目前无法对访问受限的预定义策略进行 SAM。
例如,让我们看看下面的模板:
Resources:
BlobsBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "blobs-${AWS::AccountId}-${AWS::Region}"
ProcessBlobFunction:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: blobsprjct/
Handler: processBlob.lambda_handler
Runtime: python3.8
Policies:
- S3ReadPolicy:
BucketName: !Sub "blobs-${AWS::AccountId}-${AWS::Region}"
- AmazonRekognitionFullAccess
Events:
BlobsBucket:
Type: S3
Properties:
Bucket: !Ref BlobsBucket
Events: s3:ObjectCreated:*
这将失败:
错误:无法为堆栈创建变更集:blob,例如:Waiter ChangeSetCreateComplete failed: Waiter 遇到终端故障 状态:对于表达式“状态”,我们匹配预期路径:“失败” 状态:失败。原因:资源之间的循环依赖: [ProcessBlobFunction, ProcessBlobFunctionBlobsBucketPermission, BlobsBucket]
所有资源都说要设置 BucketName - 我已经拥有它,我还添加了权限(不确定它是否需要,导致错误保持更大 1 分)
AllowS3ToCallLambdaPermission:
Type: AWS::Lambda::Permission
Properties:
Action: 'lambda:InvokeFunction'
FunctionName: !Ref ProcessBlobFunction
Principal: s3.amazonaws.com
SourceArn: !GetAtt BlobsBucket.Arn
这将失败:
错误:无法为堆栈创建变更集:blob,例如:Waiter ChangeSetCreateComplete failed: Waiter 遇到终端故障 状态:对于表达式“状态”,我们匹配预期路径:“失败” 状态:失败。原因:资源之间的循环依赖: [ProcessBlobFunction, ProcessBlobFunctionBlobsBucketPermission, AllowS3ToCallLambdaPermission, BlobsBucket]
我被卡住了,很长时间都找不到解决办法。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudformation