我在CloudFormation模板中定义一个导出,以便在另一个模板中使用。
我可以看到导出是在AWS控制台中创建的,但是第二个堆栈找不到它。
错误:
UPDATE_ROLLBACK_IN_PROGRESS with reason: No export named sandbox06-ODM-KinesisStreamArn foundtemplate.yml
Resources:
KinesisStream:
Type: AWS::Kinesis::Stream
Properties:
ShardCount: 1
RetentionPeriodHours: 24
Name: !Sub ${Environment}-${Application}
Outputs:
Topic:
Value: !Ref Topic
KinesisStreamArn:
Value: !GetAtt KinesisStream.Arn
Export:
Name: !Sub ${Environment}-${Domain}-KinesisStreamArnfirehose.yml
KinesisFirehoseRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service: firehose.amazonaws.com
Action: sts:AssumeRole
Path: /
Policies:
- PolicyName: KinesisFirehosePolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- kinesis:*
- s3:*
- s3-object-lambda:*
Resource:
- !Sub "${Bucket.Arn}/*"
- Fn::ImportValue: !Sub "${Environment}-${Domain}-KinesisStreamArn"nested_template.yml
OperationalData:
Type: AWS::Serverless::Application
Properties:
Parameters:
Environment: !Ref Environment
Domain: OperationalData
Application: odm
BucketPrefix: pie
WhiteListCidr: !Ref WhiteListCidr
VpcId:
Fn::ImportValue: !Sub vpc-${Environment}-VPCID
VpcCidr:
Fn::ImportValue: !Sub vpc-${Environment}-VPCCIDR
Subnets:
Fn::ImportValue: !Sub vpc-${Environment}-PrivateSubnets
Location: ./data/odm/template.yml
Tags:
Environment: !Ref Environment
Domain: odm
Application: !Ref Application
Developer: !Ref Developer
DevOpsAdmin: !Ref DevOpsAdmin
Repository: !Ref Repository
Team: !Ref Team
DataEngineeringData:
Type: AWS::Serverless::Application
Properties:
Parameters:
Environment: !Ref Environment
Domain: DataEngineeringData
Application: data-engineering
Location: ./data/data-engineering/template.yml
Tags:
Environment: !Ref Environment
Domain: DataEngineeringData
Application: data-engineering
Developer: !Ref Developer
DevOpsAdmin: !Ref DevOpsAdmin
Repository: !Ref Repository
Team: !Ref Team有什么问题吗?
发布于 2021-10-14 16:04:12
第二个堆栈找不到它
这是因为默认情况下,嵌套的CloudFormation堆栈是并行创建的。
这意味着,如果您的一个子堆栈--例如包含KinesisFirehoseRole的堆栈--从另一个子堆栈(例如包含KinesisStream的堆栈)导入输出,则堆栈创建将失败。
这是因为在并行创建它们时,CloudFormation如何确保导出值在另一个创建的子堆栈正在导入时已经导出?
若要修复此问题,请在包含KinesisFirehoseRole**.**的堆栈上使用 属性。
这应该指向包含KinesisStream的堆栈,因为KinesisFirehoseRole对它有依赖关系。
DependsOn将此依赖关系显式化,并将确保正确的堆栈创建顺序。
像这样的事情应该有效:
Stack-Containing-Kinesis-Firehose-Role:
Type: AWS::CloudFormation::Stack
DependsOn: Stack-Containing-Kinesis-Stream-Resource-Which-Outputs-KinesisStreamArn
...https://stackoverflow.com/questions/69573472
复制相似问题