gpt4 book ai didi

amazon-web-services - 解决 AWS CloudFormation 中的循环依赖问题

转载 作者:行者123 更新时间:2023-12-05 03:05:55 24 4
gpt4 key购买 nike

以下 AWS CloudFormation 给出了循环依赖错误。我的理解是,依赖关系如下所示:rawUploads ->generatePreview ->previewPipeline ->rawUploads。虽然rawUploads看起来并不依赖于generatePreview,但我猜CF需要知道创建存储桶时要触发什么lambda,即使触发器是在lambda中定义的CloudFormation 模板的一部分。

我在网上找到了一些讨论类似问题的资源,但它似乎不适用于此处。 https://aws.amazon.com/premiumsupport/knowledge-center/unable-validate-circular-dependency-cloudformation/

打破这个循环依赖链我有什么选择?可编写脚本的解决方案是可行的,但手动更改的多个部署不适合我的用例。

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
rawUploads:
Type: 'AWS::S3::Bucket'
previewAudioFiles:
Type: 'AWS::S3::Bucket'

generatePreview:
Type: AWS::Serverless::Function
Properties:
Handler: generatePreview.handler
Runtime: nodejs6.10
CodeUri: .
Environment:
Variables:
PipelineId: !Ref previewPipeline
Events:
BucketrawUploads:
Type: S3
Properties:
Bucket: !Ref rawUploads
Events: 's3:ObjectCreated:*'

previewPipeline:
Type: Custom::ElasticTranscoderPipeline
Version: '1.0'
Properties:
ServiceToken:
Fn::Join:
- ":"
- - arn:aws:lambda
- Ref: AWS::Region
- Ref: AWS::AccountId
- function
- aws-cloudformation-elastic-transcoder-pipeline-1-0-0
Name: transcoderPipeline
InputBucket:
Ref: rawUploads
OutputBucket:
Ref: previewAudioFiles

最佳答案

一种方法是为 S3 存储桶提供显式名称,以便稍后您可以简单地使用存储桶名称,而不是依赖 Ref:bucketname。如果您想要自动生成存储桶名称,那么这显然是有问题的,在这种情况下,谨慎的做法是从某些前缀加上(唯一的)堆栈名称生成存储桶名称,例如:

InputBucket: !Join ["-", ['rawuploads', Ref: 'AWS::StackName']]

另一种选择是使用单个 CloudFormation 模板,但分两个阶段 - 第一个阶段创建基础资源(以及任何非循环引用),然后将剩余的引用添加到模板中并进行堆栈更新。显然,这并不理想,所以我更喜欢第一种方法。

当您需要引用 ARN 时,您还可以使用第一种技术,例如:

!Join ['/', ['arn:aws:s3:::logsbucket', 'AWSLogs', Ref: 'AWS:AccountId', '*']]

使用此技术时,您可能还需要考虑使用 DependsOn因为您已经删除了有时会导致问题的隐式依赖项。

关于amazon-web-services - 解决 AWS CloudFormation 中的循环依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50158593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com