问题描述
我有一个模板,它设置了一个包含一些 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 中是否有可能存在“竞争条件”?如果是这样;我该如何解决?