Cloudformation:您请求的资源不存在

Red*_*tle 2 amazon-web-services

我有一个 cloudformation 堆栈,它有一个 Lambda 函数,该函数被映射为 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"
    }
Run Code Online (Sandbox Code Playgroud)

我知道我已经删除了最初创建的映射 cloudformation 并手动添加了它,这导致了问题。我该如何解决?因为我现在无法推送任何更新。

请帮忙

Per*_*osh 6

你所做的,在我看来,是一个错误。当您使用 Cloud Formation 时,您不应该手动应用更改。你可以,也许这很好,因为一旦创建堆栈,人们可能不关心堆栈。但是由于您正在尝试更新堆栈,这告诉我您希望保留堆栈并定期更新它。

要缩小问题范围,首先要明确手动创建的映射与您的云形成堆栈不同步。因此,从云形成的角度来看,是否保留该映射并不重要。我想知道,如果您保留手动创建的映射并从 Cloud Formation 创建一个新映射会发生什么?也许它会抱怨,因为您会对同一对 (lambda,queue) 进行重复映射。尝试这个:

  1. 为您的堆栈创建一个更改,您可以在其中EventSourceMapping从脚本中完全删除资源。这一步基本上是清理丢失的引用。应用更改集。
  2. 然后,这就是我认为您可能会遇到某种问题的地方,再次添加回EventSourceMapping您的堆栈。

如果您在步骤 2 中遇到错误,例如“此映射已存在”,则必须从控制台中删除手动创建的映射。然后重试第 2 步。