我正在 CloudFormation 模板中定義要在另一個模板中使用的匯出。
我可以看到正在 AWS 控制臺中創建匯出,但是,第二個堆疊找不到它。
錯誤:
UPDATE_ROLLBACK_IN_PROGRESS with reason: No export named sandbox06-ODM-KinesisStreamArn found
template.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}-KinesisStreamArn
firehose.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
問題是什么?
uj5u.com熱心網友回復:
第二個堆疊找不到它
這是因為默認情況下,嵌套的 CloudFormation 堆疊是并行創建的。
這意味著如果您的一個子堆疊 - 例如包含的堆疊KinesisFirehoseRole- 正在從另一個子堆疊匯入輸出 - 例如包含KinesisStream的堆疊 - 那么堆疊創建將失敗。
這是因為當它們并行創建時,CloudFormation 如何確保在創建的另一個子堆疊匯入匯出值時已匯出匯出值?
要解決此問題,請使用DependsOn包含KinesisFirehoseRole.
這應該指向包含KinesisStreamasKinesisFirehoseRole依賴于它的堆疊。
DependsOn 使這種依賴性顯式,并確保正確的堆疊創建順序。
這樣的事情應該作業:
Stack-Containing-Kinesis-Firehose-Role:
Type: AWS::CloudFormation::Stack
DependsOn: Stack-Containing-Kinesis-Stream-Resource-Which-Outputs-KinesisStreamArn
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/319062.html
上一篇:如何列出已停止的AWSRDS實體
