是否可以在亞馬遜 cloudformation 中強制重新創建 EC2::Instance 或 RDS::DBInstance?
是否可以使用 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 文件中的堆棧模板:
對於大多數資源,更改資源的邏輯名稱相當於刪除該資源並用新資源替換它。依賴於重命名資源的任何其他資源也需要更新,並可能導致它們被替換。其他資源需要您更新屬性(不僅僅是邏輯名稱)才能觸發更新。