循环依赖问题意味着两个或多个资源互相依赖,但无法将其中一个资源创建、更新或删除,直到其他资源也被创建、更新或删除。在AWS CloudFormation中,这种情况很常见,尤其是在AWS S3和AWS Lambda资源之间。以下是解决此问题的一些方法:
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-bucket
Policy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref Bucket
PolicyDocument:
Statement:
- Effect: Allow
Principal: '*'
Action: 's3:GetObject'
Resource: !Sub 'arn:aws:s3:::${Bucket}/*'
MyFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: my-function
Handler: index.handler
Role: !GetAtt [ LambdaExecutionRole, Arn ]
Code:
S3Bucket: !Ref Bucket
S3Key: function.zip
S3ObjectVersion: 1.0.0
S3Stack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: https://s3.amazonaws.com/example-bucket/s3-stack.yaml
MyFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: my-function