將ECS實例自動加入和移出MongoDB實例白名單
本教程介紹如何使用彈性伸縮生命周期掛鉤掛起ECS實例,并結(jié)合系統(tǒng)運維管理 OOS(CloudOps Orchestration Service)的模板,實現(xiàn)將ECS實例自動加入和移出MongoDB實例白名單。
前提條件
已創(chuàng)建伸縮組,并且伸縮組處于啟用狀態(tài)。
已創(chuàng)建MongoDB實例。
已為OOS服務(wù)創(chuàng)建RAM角色。該RAM角色的可信實體必須為阿里云服務(wù),受信服務(wù)為系統(tǒng)運維管理,并且擁有執(zhí)行OOS模板的權(quán)限。具體操作,請參見為OOS服務(wù)設(shè)置RAM權(quán)限。
說明本教程中使用的示例RAM角色為OOSServiceRole,您也可以使用其他自定義的RAM角色。
背景信息
伸縮組支持關(guān)聯(lián)負(fù)載均衡實例和RDS實例,但是暫時不能關(guān)聯(lián)MongoDB實例。如果您有業(yè)務(wù)數(shù)據(jù)存儲在MongoDB實例上,手動配置ECS實例加入或移出MongoDB實例白名單,操作效率較低。您可以通過生命周期掛鉤和OOS模板將ECS實例自動加入和移出MongoDB實例白名單,但需要注意以下內(nèi)容:
如果伸縮組已有存量的ECS實例,您需要手動將相關(guān)ECS實例的IP添加至MongoDB實例白名單。否則,當(dāng)移除一個MongoDB白名單中不存在的實例的私網(wǎng)IP時,將出現(xiàn)錯誤。
您需要通過生命周期掛鉤的通知標(biāo)識(NotificationMetadata,簡稱metadata)為創(chuàng)建OOS執(zhí)行指定所需的參數(shù)。
metadata必須為JSON字符串格式。
metadata中的鍵,必須與OOS模板參數(shù)一一對應(yīng)。
OOS模板中不存在默認(rèn)值的參數(shù)必須指定,存在默認(rèn)值的參數(shù)可選擇是否指定以覆蓋默認(rèn)值。
操作步驟
本教程以O(shè)OS公共模板ACS-ESS-LifeCycleModifyMongoDBIPWhitelist為例,實現(xiàn)在擴容時將ECS實例加入MongoDB實例白名單。步驟如下:
如果需要在縮容時將ECS實例移出MongoDB實例白名單,創(chuàng)建適用于彈性收縮活動的生命周期掛鉤并觸發(fā)縮容即可。
步驟一:對RAM角色授予OOS服務(wù)權(quán)限
您需要擁有OOS的執(zhí)行權(quán)限才能執(zhí)行OOS的模板。執(zhí)行ACS-ESS-LifeCycleModifyMongoDBIPWhitelist中定義的運維操作時涉及云服務(wù)器ECS、彈性伸縮、云數(shù)據(jù)庫MongoDB的資源。
登錄RAM控制臺。
創(chuàng)建權(quán)限策略。
在左側(cè)導(dǎo)航欄,單擊 。
單擊創(chuàng)建權(quán)限策略。
在創(chuàng)建權(quán)限策略頁面,選擇權(quán)限策略的配置模式為腳本編輯后,設(shè)置其他參數(shù)項,然后單擊確定。
本教程中使用的配置如下表所示,未提及的配置保持默認(rèn)即可。
配置項
說明
名稱
填寫ESSHookPolicyForMongoDBWhitelist。
策略內(nèi)容
輸入以下內(nèi)容:
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeInstances" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "dds:ModifySecurityIps" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }
為OOSServiceRole授予權(quán)限策略。
在左側(cè)導(dǎo)航欄,單擊 。
找到OOSServiceRole,在操作列,單擊新增授權(quán)。
為OOS服務(wù)扮演的RAM角色OOSServiceRole添加所需權(quán)限即可完成授權(quán)。
在新增授權(quán)頁面,指定資源范圍和權(quán)限配置,然后單擊確認(rèn)新增授權(quán)。
本教程中使用的配置如下表所示,未提及的配置保持默認(rèn)即可。
配置項
說明
資源范圍
選擇賬號級別。
權(quán)限策略
添加自定義策略ESSHookPolicyForMongoDBWhitelist。
步驟二:為擴容活動創(chuàng)建生命周期掛鉤并觸發(fā)擴容
- 登錄彈性伸縮控制臺。
- 在左側(cè)導(dǎo)航欄中,單擊伸縮組管理。
- 在頂部菜單欄處,選擇地域。
- 找到待操作的伸縮組,選擇任一種方式打開伸縮組詳情頁面。
- 在伸縮組名稱/ID列,單擊伸縮組ID。
- 在操作列,單擊查看詳情。
為擴容活動創(chuàng)建生命周期掛鉤。
- 在頁面上方,單擊生命周期掛鉤頁簽。
單擊創(chuàng)建生命周期掛鉤。
指定生命周期掛鉤配置,然后單擊確認(rèn)。
本教程中使用的配置如下表所示,未提及的配置保持默認(rèn)即可。
配置項
說明
名稱
輸入ESSHookForAddMongoDBWhitelist。
適用的伸縮活動類型
選擇彈性擴張活動。
超時時間
輸入適當(dāng)?shù)某瑫r時間,例如300秒。
說明超時時間即用于執(zhí)行自定義操作的時間,若超時時間過短,可能導(dǎo)致自定義操作失敗,請評估自定義操作耗時并設(shè)置適當(dāng)?shù)某瑫r時間。
默認(rèn)執(zhí)行策略
選擇繼續(xù)。
掛鉤期間執(zhí)行的動作
模板配置如下:
通知方式:選擇OOS模板。
OOS模板類型:選擇公共模板。
公共模板:選擇ACS-ESS-LifeCycleModifyMongoDBIPWhitelist。
ACS-ESS-LifeCycleModifyMongoDBIPWhitelist的執(zhí)行參數(shù)配置如下:
MongoDB實例ID:輸入MongoDB實例的ID。本教程中以MongoDB副本集實例為例。
修改IP白名單的方式:選擇Append,對應(yīng)彈性擴張活動,將ECS實例加入MongoDB實例白名單。
OOS扮演的RAM角色:選擇OOSServiceRole,操作步驟中已為RAM角色OOSServiceRole添加操作ECS、彈性伸縮、MongoDB資源的權(quán)限,OOS服務(wù)扮演該RAM角色即可擁有相關(guān)權(quán)限。
觸發(fā)擴容。
本教程中以手動執(zhí)行伸縮規(guī)則為例,您也可以通過定時任務(wù)、報警任務(wù)等方式觸發(fā)擴容。
說明手動執(zhí)行伸縮規(guī)則觸發(fā)擴縮容時,生命周期掛鉤會生效,但手動添加或移出已有ECS實例時,生命周期掛鉤不會生效。
在頁面上方,單擊伸縮規(guī)則與報警任務(wù)頁簽。
在伸縮規(guī)則頁簽下,單擊創(chuàng)建伸縮規(guī)則。
設(shè)置伸縮規(guī)則的屬性,然后單擊確認(rèn)。
本教程中使用的配置如下表所示,未提及的配置保持默認(rèn)即可。
配置項
說明
規(guī)則名稱
輸入Add1。
伸縮規(guī)則類型
選擇簡單規(guī)則。
執(zhí)行的操作
設(shè)置為增加1臺。
在伸縮規(guī)則列表下,找到新建的伸縮規(guī)則Add1,在操作區(qū)域,單擊執(zhí)行。
單擊確定。
執(zhí)行伸縮規(guī)則后自動創(chuàng)建1臺ECS實例,由于伸縮組內(nèi)已創(chuàng)建生命周期掛鉤ESSHookForAddMongoDBWhitelist,ECS實例會被掛起,同時自動通知OOS服務(wù)執(zhí)行ACS-ESS-LifeCycleModifyMongoDBIPWhitelist中定義的運維操作。
步驟三:查看MongoDB實例白名單
在左側(cè)導(dǎo)航欄,單擊副本集實例列表。
找到MongoDB實例,在實例ID/名稱區(qū)域,單擊實例ID。
在左側(cè)導(dǎo)航欄,單擊 。
如果MongoDB實例白名單中加入了新建ECS實例的私有IP,符合使用公共模板ACS-ESS-LifeCycleModifyMongoDBIPWhitelist的預(yù)期。
如果成功創(chuàng)建了ECS實例,但是新建ECS實例的私有IP并沒有加入MongoDB實例白名單,請前往OOS控制臺查看運維任務(wù)執(zhí)行情況。具體操作,請參見(可選)步驟四:查看OOS執(zhí)行情況。
(可選)步驟四:查看OOS執(zhí)行情況
登錄OOS管理控制臺。
在左側(cè)導(dǎo)航欄,選擇 。
按開始時間找到執(zhí)行,然后在操作列,單擊詳情。
進入執(zhí)行詳情頁面,查看執(zhí)行的相關(guān)信息。
例如,您可以基本信息區(qū)域查執(zhí)行ID、執(zhí)行狀態(tài)等,也可以在執(zhí)行結(jié)果區(qū)域,單擊任務(wù)節(jié)點查看執(zhí)行詳情。具體操作,請參見查看執(zhí)行詳情。
說明如果執(zhí)行失敗,在執(zhí)行詳情頁面也會顯示相關(guān)的報錯信息。
常見問題
如果運維任務(wù)執(zhí)行失敗,請根據(jù)執(zhí)行結(jié)果中的報錯信息排查原因。更多信息,請參見常見問題。
常見的報錯信息如下:
報錯信息 | 原因 | 解決方案 |
Forbidden.Unauthorized message: A required authorization for the specified action is not supplied. | 您并未向彈性伸縮授權(quán)操作當(dāng)前Action。 | 請檢查是否為RAM角色OOSServiceRole添加了相應(yīng)的權(quán)限。 |
Forbidden.RAM message: User not authorized to operate on the specified resource, or this API doesn't support RAM. | RAM用戶或RAM角色沒有操作對應(yīng)資源的權(quán)限。 | 請檢查是否為RAM角色OOSServiceRole添加了相應(yīng)的權(quán)限。例如為RAM角色授予OOS服務(wù)的示例權(quán)限。您需要為RAM角色添加操作權(quán)限,確保OOS服務(wù)能夠操作OOS模板中涉及的資源。 |
LifecycleHookIdAndLifecycleActionToken.Invalid message: The specified lifecycleActionToken and lifecycleActionId you provided does not match any in process lifecycle action. | 正在進行的生命周期動作已經(jīng)過期或中止。 | 請評估生命周期掛鉤的超時時間,確保在超時時間內(nèi)可以執(zhí)行完OOS模板中定義的運維任務(wù)。 |