首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在CloudFormation中使用嵌套堆栈时会出现"No Export“错误?

为什么在CloudFormation中使用嵌套堆栈时会出现"No Export“错误?
EN

Stack Overflow用户
提问于 2021-10-14 15:31:21
回答 1查看 1.1K关注 0票数 1

我在CloudFormation模板中定义一个导出,以便在另一个模板中使用。

我可以看到导出是在AWS控制台中创建的,但是第二个堆栈找不到它。

错误:

代码语言:javascript
复制
UPDATE_ROLLBACK_IN_PROGRESS with reason: No export named sandbox06-ODM-KinesisStreamArn found

template.yml

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
  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

有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 16:04:12

第二个堆栈找不到它

这是因为默认情况下,嵌套的CloudFormation堆栈是并行创建的。

这意味着,如果您的一个子堆栈--例如包含KinesisFirehoseRole的堆栈--从另一个子堆栈(例如包含KinesisStream的堆栈)导入输出,则堆栈创建将失败。

这是因为在并行创建它们时,CloudFormation如何确保导出值在另一个创建的子堆栈正在导入时已经导出?

若要修复此问题,请在包含KinesisFirehoseRole**.**的堆栈上使用 属性。

这应该指向包含KinesisStream的堆栈,因为KinesisFirehoseRole对它有依赖关系。

DependsOn将此依赖关系显式化,并将确保正确的堆栈创建顺序。

像这样的事情应该有效:

代码语言:javascript
复制
Stack-Containing-Kinesis-Firehose-Role:
   Type: AWS::CloudFormation::Stack
   DependsOn: Stack-Containing-Kinesis-Stream-Resource-Which-Outputs-KinesisStreamArn
   ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69573472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档