微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

部署 CFN 模板时资源之间的竞争条件?

如何解决部署 CFN 模板时资源之间的竞争条件?

我有一个模板,它设置了一个包含一些 Kinesis 流的堆栈、几个用于从 CloudWatch 订阅和处理事件的 Lambda,等等。

使用 this documentation 作为参考,我将目的地的定义添加到我的模板中:

  LogDestination:
Properties:
  DestinationName:
    Ref: DestinationName
  DestinationPolicy:
    Fn::Sub:
      - |-
        {
            "Version": "2012-10-17","Statement": [
                {
                    "Effect": "Allow","Principal": {
                        "AWS": ["${AWS::AccountId}"]
                    },"Action": "logs:PutSubscriptionFilter","Resource": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:destination:${DestinationName}"
                }
            ]
        }
      - DestinationName:
          Ref: DestinationName
  RoleArn:
    Fn::GetAtt:
      - KinesisRole
      - Arn
  TargetArn:
    Fn::GetAtt:
      - LogStream
      - Arn
Type: AWS::Logs::Destination

现在,我的问题是: 当我尝试从头开始部署整个模板时,由于目标无效/不存在,它失败并显示状态 400(“无效参数”)。

然而;如果我在没有 LogDestination 的情况下部署堆栈,然后将 LogDestination 作为第二个更改集部署,它会起作用。

那么在 CloudFormation 中是否有可能存在“竞争条件”?如果是这样;我该如何解决

解决方法

在 CloudFormation 中可能存在竞争条件。 DependsOn 可用于在同一堆栈操作中显式订购资源供应(Ref/GetAtt/Sub 也隐式订购资源供应)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。