本教程介紹如何使用Auto Scaling生命週期掛鈎掛起ECS執行個體,並結合CloudOps Orchestration Service (OOS)的模板,實現擴縮容時在ECS執行個體中自動執行指令碼。
前提條件
已建立伸縮組,並且伸縮組處於啟用狀態。
已準備好待執行的指令碼,本教程中以為Linux執行個體(CentOS 7.6)自動安裝Apache為例。
已為OOS服務建立RAM角色。該RAM角色的可信實體必須為阿里雲服務,受信服務為CloudOps Orchestration Service,並且擁有執行OOS模板的許可權。具體操作,請參見為OOS服務設定RAM許可權。
說明本教程中使用的樣本RAM角色為OOSServiceRole,您也可以使用其他自訂的RAM角色。
操作步驟
本教程以OOS公用模板ACS-ESS-LifeCycleRunCommand為例,實現擴容時在ECS執行個體中自動執行指令碼。步驟如下:
步驟一:對RAM角色授予OOS服務許可權
您需要擁有OOS的執行許可權才能執行OOS的模板。執行ACS-ESS-LifeCycleRunCommand中定義的營運操作時涉及Elastic Compute Service、Auto Scaling的資源。
登入RAM控制台。
建立權限原則。
在左側導覽列,單擊 。
單擊建立權限原則。
在建立權限原則頁面,選擇權限原則的配置模式為指令碼編輯後,設定其他參數項,然後單擊確定。
本教程中使用的配置如下表所示,未提及的配置保持預設即可。
配置項
說明
名稱
填寫ESSHookPolicyForRunCommand。
策略內容
輸入以下內容:
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeInvocationResults", "ecs:DescribeInvocations", "ecs:RunCommand" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }
為OOSServiceRole授予權限原則。
在左側導覽列,單擊 。
找到OOSServiceRole,在操作列,單擊新增授權。
為OOS服務扮演的RAM角色OOSServiceRole添加要求的權限即可完成授權。
在新增授權頁面,指定資源範圍和許可權配置,然後單擊確認新增授權。
本教程中使用的配置如下表所示,未提及的配置保持預設即可。
配置項
說明
資源範圍
選擇帳號層級。
權限原則
添加自訂策略ESSHookPolicyForRunCommand。
步驟二:為擴容活動建立生命週期掛鈎並觸發擴容
在建立生命週期掛鈎時選擇通知方式為OOS模板並設定相關參數,即可在觸發擴容活動時自動執行指令碼。
- 登入Auto Scaling控制台。
- 在左側導覽列中,單擊伸縮組管理。
- 在頂部功能表列處,選擇地區。
- 找到待操作的伸縮組,選擇任一種方式開啟伸縮組詳情頁面。
- 在伸縮組名稱/ID列,單擊伸縮組ID。
- 在操作列,單擊查看詳情。
為擴容活動建立生命週期掛鈎。
- 在頁面上方,單擊生命週期掛鈎頁簽。
單擊建立生命週期掛鈎。
指定生命週期掛鈎配置,然後單擊確認。
本教程中使用的配置如下表所示,未提及的配置保持預設即可。
配置項
說明
名稱
輸入ESSHookForRunCommand。
適用的伸縮活動類型
選擇彈性擴張活動。
逾時時間
輸入適當的逾時時間,例如300秒。
說明逾時時間即用於執行自訂動作的時間,若逾時時間過短,可能導致自訂動作失敗,請評估自訂動作耗時並設定適當的逾時時間。
預設執行策略
選擇繼續。
掛鈎期間執行的動作
模板配置如下:
通知方式:選擇OOS模板。
OOS模板類型:選擇公用模板。
公用模板:選擇ACS-ESS-LifeCycleRunCommand。
ACS-ESS-LifeCycleRunCommand的執行參數配置如下:
雲助手命令類型:選擇RunShellScript。
雲助手命令:輸入待執行的指令碼,本教程中以自動安裝Apache為例。
yum install -y httpd systemctl start httpd systemctl enable httpd
OOS扮演的RAM角色:選擇OOSServiceRole,操作步驟中已為RAM角色OOSServiceRole添加操作ECS、Auto Scaling資源的許可權,OOS服務扮演該RAM角色即可擁有相關許可權。
觸發擴容。
本教程中以手動執行伸縮規則為例,您也可以通過定時任務、警示任務等方式觸發擴容。
說明手動執行伸縮規則引發擴縮容時,生命週期掛鈎會生效,但手動添加或移出已有ECS執行個體時,生命週期掛鈎不會生效。
在頁面上方,單擊伸縮規則與警示任務頁簽。
在伸縮規則頁簽下,單擊建立伸縮規則。
設定伸縮規則的屬性,然後單擊確認。
本教程中使用的配置如下表所示,未提及的配置保持預設即可。
配置項
說明
規則名稱
輸入Add1。
伸縮規則類型
選擇簡單規則。
執行的操作
設定為增加1台。
在伸縮規則列表下,找到建立的伸縮規則Add1,在操作地區,單擊執行。
單擊確定。
執行伸縮規則後自動建立1台ECS執行個體,由於伸縮組內已建立生命週期掛鈎ESSHookForRunCommand,ECS執行個體會被掛起,同時自動通知OOS服務執行ACS-ESS-LifeCycleRunCommand中定義的營運操作。
查看自動建立的ECS執行個體是否符合預期。
- 在頁面上方,單擊執行個體列表頁簽。
找到自動建立的ECS執行個體,在雲端服務器ID/名稱地區,單擊執行個體ID。
在左側導覽列中,單擊發送命令/檔案(雲助手)。
在頁面右上方,單擊建立/執行命令。
執行以下命令查看Apache安裝結果。
具體操作,請參見建立並執行命令。命令內容如下所示:
systemctl status httpd
在命令執行結果頁簽下,查看對應的執行詳情。如果結果顯示Apache服務已安裝且狀態為active,符合使用公用模板ACS-ESS-LifeCycleRunCommand執行雲助手命令中樣本指令碼的預期。
如果成功建立了ECS執行個體,但ECS執行個體並沒有自動安裝Apache,請前往OOS控制台查看營運任務執行情況。具體操作,請參見(可選)步驟三:查看OOS執行情況。
(可選)步驟三:查看OOS執行情況
常見問題
如果營運任務執行失敗,請根據執行結果中的報錯資訊排查原因。更多資訊,請參見常見問題。
常見的報錯資訊如下:
報錯資訊 | 原因 | 解決方案 |
Forbidden.Unauthorized message: A required authorization for the specified action is not supplied. | 您並未向Auto Scaling授權操作當前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模板中定義的營運任務。 |
相關文檔
如果您需要為已經加入伸縮組的ECS執行個體執行指令碼,可以使用滾動升級功能。相關操作和教程,請參見: