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