gpt4 book ai didi

amazon-web-services - 使用 CloudFormation 更新现有日志组

转载 作者:行者123 更新时间:2023-12-03 07:10:31 24 4
gpt4 key购买 nike

我有一个 lambda,它有一个日志组,例如 LG-1,其保留设置为永不过期(默认)。我需要将永不过期更改为 1 个月。我正在使用 CloudFormation 执行此操作。由于日志组已经存在,当我尝试使用模板中的更改再次部署 lambda 时:

LambdaFunctionLogGroup:
Type: 'AWS::Logs::LogGroup'
DependsOn: MyLambda
Properties:
RetentionInDays: 30
LogGroupName: !Join
- ''
- - /aws/lambda/
- !Ref MyLambda

更新失败并出现错误:

[LogGroup Name] already exists.

一种可能的解决方案是删除日志组,然后使用新的更改再次创建它,如上所示,效果非常好。

但我需要在不删除日志组的情况下执行此操作,因为这将导致删除我以前拥有的所有日志。

有什么可行的解决方法吗?

最佳答案

@ttulka 回答:

".. it is impossible to manipulate resources from CF which already exist out of the stack."

但实际上问题比这更普遍,并且适用于在堆栈内部创建的资源。它与 AWS CloudFormation 资源 "Replacement policy" 有关。 。对于某些资源,CloudFormation“更新”资源的方式是创建新资源,然后删除旧资源(这称为 "Replacement" 更新策略)。这意味着在一段时间内,您拥有两个相同类型的资源,并且同时存在许多相同的属性。但是,如果某个资源属性必须是唯一的,那么如果两个资源的该属性值相同,则它们不能同时存在,所以...CloudFormation 就会崩溃。

AWS::Logs::LogGroup.LogGroupName属性(property)就是这样的属性(property)之一。 AWS::CloudWatch::Alarm.AlarmName另一个例子。

解决方法是取消设置名称,以便使用随机名称,执行更新,然后将名称设置回可预测的固定值并再次更新。


Rant:这是一个确实不应该存在的恼人问题。 IE。 AWS CF 应该足够聪明,不必使用这种奇怪的笨重的资源替换实现。但是...这就是适合您的 AWS CF...

关于amazon-web-services - 使用 CloudFormation 更新现有日志组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55137756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com