[英]Cloudformation: The resource you requested does not exist
我有一个 cloudformation 堆栈,它有一个 Lambda function 作为触发器映射到 SQS 队列。
发生的事情是我不得不删除映射并再次手动创建它,因为我想更改batch size
。 现在,当我想更新映射时,cloudformation 会抛出错误, The resource you requested does not exist.
信息。
资源映射代码如下所示:
"EventSourceMapping":{
"Properties":{
"BatchSize":5,
"Enabled":"true",
"EventSourceArn":{
"Fn::GetAtt":[
"ProcessorQueue",
"Arn"
]
},
"FunctionName":{
"Fn::GetAtt":[
"ProcessorLambda",
"Arn"
]
}
},
"Type":"AWS::Lambda::EventSourceMapping"
}
我知道我已经删除了最初创建的映射 cloudformation 并手动添加了它,这是导致问题的原因。 我该如何解决? 因为我现在无法推送任何更新。
请帮忙
你所做的,在我看来,是一个错误。 当您使用 Cloud Formation 时,您不应该手动应用更改。 你可以,也许这很好,因为一旦创建堆栈,人们可能不关心堆栈。 但是由于您正在尝试更新堆栈,这告诉我您希望保留堆栈并定期更新它。
要缩小问题范围,首先要明确手动创建的映射与您的云形成堆栈不同步。 因此,从云形成的角度来看,是否保留该映射并不重要。 我想知道,如果您保留手动创建的映射并从 Cloud Formation 创建一个新映射会发生什么? 也许它会抱怨,因为您会对同一对 (lambda,queue) 进行重复映射。 尝试这个:
EventSourceMapping
资源。 这一步基本上是清理丢失的引用。 应用更改集。EventSourceMapping
添加回您的堆栈。如果您在步骤 2 中遇到错误,例如“此映射已存在”,则必须从控制台中删除手动创建的映射。 然后重试第 2 步。
您现在可能知道您不应该手动删除资源。 如果更改了 CF,则可以在不更改 CF 中未更改的资源的情况下更新它。 您可以尝试使用完全相同的物理名称替换资源https://aws.amazon.com/premiumsupport/knowledge-center/failing-stack-updates-deleted/另一种选择是从 CF 中删除资源,更新,然后将其添加回来并再次更新 - 来自同一个文档。
虽然上面的评论是有效的,但我发现有趣的是,没有人提到更简单的选项:使用 SAM 命令( sam build
/ sam deploy
)。 可以理解的是,在开发过程和设计架构过程中,可能会出现缺陷和需要在控制台手动输入的情况,因此每次遇到类似问题时都会参考一些内容。
sam build/deploy
,CloudFormation 堆栈将识别出模板中不再存在的资源并将其删除。每次都有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.