簡體   English   中英

Cloudformation:您請求的資源不存在

[英]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) 進行重復映射。 嘗試這個:

  1. 為您的堆棧創建一個更改,從腳本中完全刪除EventSourceMapping資源。 這一步基本上是清理丟失的引用。 應用更改集。
  2. 然后,這就是我認為您可能會遇到某種問題的地方,再次將EventSourceMapping添加回您的堆棧。

如果您在步驟 2 中遇到錯誤,例如“此映射已存在”,則必須從控制台中刪除手動創建的映射。 然后重試第 2 步。

您現在可能知道您不應該手動刪除資源。 如果更改了 CF,則可以在不更改 CF 中未更改的資源的情況下更新它。 您可以嘗試使用完全相同的物理名稱替換資源https://aws.amazon.com/premiumsupport/knowledge-center/failing-stack-updates-deleted/另一種選擇是從 CF 中刪除資源,更新,然后將其添加回來並再次更新 - 來自同一個文檔。

雖然上面的評論是有效的,但我發現有趣的是,沒有人提到更簡單的選項:使用 SAM 命令( sam build / sam deploy )。 可以理解的是,在開發過程和設計架構過程中,可能會出現缺陷和需要在控制台手動輸入的情況,因此每次遇到類似問題時都會參考一些內容。

  1. 簡單地注釋掉造成問題的代碼塊,在其上運行sam build/deploy ,CloudFormation 堆棧將識別出模板中不再存在的資源並將其刪除。
  2. 現在,由於資源不再存在於體系結構中(之前已手動刪除),因此通過該步驟並成功更新堆棧將沒有問題。
  3. 然后簡單地取消注釋,進行任何必要的更改(如果有的話)並部署。

每次都有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM