Amazon-Ec2

是否可以在亞馬遜 cloudformation 中強制重新創建 EC2::Instance 或 RDS::DBInstance?

  • March 29, 2018

是否可以使用 cloudformation 堆棧強制重新創建 EC2 或 RDS 實例?

我的堆棧卡在一個點,只需銷毀和創建資源即可修復它,而不是我必須刪除整個堆棧才能繼續工作。

編輯:

這個問題打擊了我兩次。首先,我創建了一個帶有一些預設值的 AWS::RDS::Instance,然後嘗試將其降級為“EngineVersion”:“5.5”。更改它應該會發生一些中斷,但是 mysql 實例不能從 5.6 降級到 5.5,因此堆棧處於 UPDATE_FAILED 狀態,我無法在沒有討厭的技巧的情況下重新創建 RDS。

另一種情況是我有幾個“AWS::EC2::Instance”,它從它的“UserData”下載並執行一個腳本,顯然如果 Y 更改下載的腳本我必須重新創建實例,並且沒有辦法這樣做。我再一次使用同樣討厭的技巧來重新創建機器。

討厭的把戲:

我沒有使用一台機器的自動縮放組,而是解決了更改屬性中的可用區的兩個問題……但給我留下了不好的印象

對於實例儲存支持的 EC2 實例,一個技巧是向包含版本號、日期或類似內容的使用者數據腳本添加註釋,然後在您希望重新創建實例時更改:

{
   "Resources" : {
       "MyEC2Instance" : {
           "Type" : "AWS::EC2::Instance",
           "Properties" : {
               // ... other properties ...
               "UserData": { 
                   "Fn::Base64" : {
                       "Fn::Join" : [ ":", [
                       "#!/bin/bash\n",
                       "# Version: 1.0\n",
                       // ... rest of user data ...
                   ]]}
           }
       }
   }
}

任何更改都UserData將導致實例被替換(即重新生成)。但是,使用者數據腳本的行為應該是相同的,因為唯一的修改是註釋。請注意,這不適用於 EBS 支持的實例。

對於 RDS,您可以拍攝目前 RDS 實例的數據庫快照DBSnapshotIdentifier,然後修改您的模板以使用該快照:

{
   "Resources" : {
       "MyDB" : {
       "Type" : "AWS::RDS::DBInstance",
       "Properties" : {
           // ... other properties ...
           "DBSnapshotIdentifier": "<db snapshot ID>"
       }
   }    
}

無論何時DBSnapshotIdentifier更改,數據庫實例都會被替換。使用快照還可以讓您保留創建快照時的數據。(如果擦除數據,可以創建一個空快照並將其作為輸入傳遞。或者刪除並重新創建整個 CloudFormation 堆棧。)

更通用的方法是更改​​資源的邏輯名稱。從 修改CloudFormation 文件中的堆棧模板:

對於大多數資源,更改資源的邏輯名稱相當於刪除該資源並用新資源替換它。依賴於重命名資源的任何其他資源也需要更新,並可能導致它們被替換。其他資源需要您更新屬性(不僅僅是邏輯名稱)才能觸發更新。

引用自:https://serverfault.com/questions/539959