Auto Scaling のライフサイクルフックを使用すると、新しく追加されたインスタンスを一時停止し、スケーリンググループに参加する前に自動タスクを実行できます。このチュートリアルでは、ライフサイクルフックと CloudOps Orchestration Service (OOS) テンプレートを組み合わせて、スケールアウトイベント中に手動操作なしで ECS インスタンスに自動スナップショットポリシーを適用する方法を説明します。
前提条件
開始する前に、以下を確認してください。
有効状態のスケーリンググループ。設定手順については、「スケーリンググループの管理」をご参照ください。
自動スナップショットポリシー。設定手順については、「自動スナップショットポリシーの作成」をご参照ください。
信頼できるエンティティとして Alibaba Cloud Service を、信頼できるサービスとして CloudOps Orchestration Service を使用する、OOS 用の Resource Access Management (RAM) ロール。設定手順については、「RAM を使用して OOS に権限を付与する」をご参照ください。
このチュートリアルでは、RAM ロール名として OOSServiceRole を使用します。別のロール名を使用することもできます。仕組み
スケールアウトイベントが発生すると、Auto Scaling は新しく追加された各 ECS インスタンスをすぐにグループに参加させるのではなく、追加保留中の状態で一時停止します。この一時停止中に、Auto Scaling は OOS に信号を送り、ACS-ESS-LifeCycleApplyAutoSnapshotPolicy テンプレートを実行させます。OOS は指定された自動スナップショットポリシーをインスタンスのクラウドディスクに適用し、その後 Auto Scaling に通知してインスタンスの処理を続行させます。
Auto Scaling (スケールアウト) → ライフサイクルフックがインスタンスを追加保留中にする → OOS がテンプレートを実行し、スナップショットポリシーを適用 → ECS ディスクがスナップショットポリシーを受信 → ライフサイクルフックが完了 → インスタンスがスケーリンググループに参加
ステップ 1:OOS の RAM ロールに権限を付与する
ACS-ESS-LifeCycleApplyAutoSnapshotPolicy テンプレートには、ECS ディスクの記述、スナップショットポリシーの適用、およびライフサイクルアクションの完了に必要な権限が必要です。専用のポリシーを作成し、OOS の RAM ロールにアタッチします。
ポリシーの作成
RAM コンソールにログインします。
左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。
[ポリシーの作成] をクリックします。
[ポリシーの作成] ページで、[JSON] タブをクリックし、次のポリシー内容を入力します。
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeDisks", "ecs:ApplyAutoSnapshotPolicy", "ecs:DescribeInstances" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }[OK] をクリックします。
[ポリシーの作成] ダイアログボックスで、ポリシー名と説明を入力し、[OK] をクリックします。
このチュートリアルでは、ポリシー名として
ESSHookPolicyForApplyAutoSnapshotPolicyを使用します。ポリシーの内容を修正するには、[キャンセル] をクリックして JSON タブに戻ります。
RAM ロールへのポリシーのアタッチ
左側のナビゲーションウィンドウで、[アイデンティティ] > [ロール] を選択します。
OOSServiceRoleを見つけ、[操作] 列の [権限の付与] をクリックします。[権限の付与] パネルで、次のパラメーターを設定し、[権限を付与] をクリックします。
パラメーター 設定 リソース範囲 アカウント ポリシー ESSHookPolicyForApplyAutoSnapshotPolicy
ステップ 2:ライフサイクルフックの作成とスケールアウトイベントのトリガー
ライフサイクルフックの作成
Auto Scaling コンソールにログインします。
左側のナビゲーションウィンドウで、[スケーリンググループ] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。
スケーリンググループを見つけ、[スケーリンググループ名/ID] 列の ID をクリックするか、[操作] 列の [詳細] をクリックして詳細ページを開きます。
[ライフサイクルフック] タブをクリックし、[ライフサイクルフックの作成] をクリックします。
次のパラメーターを設定し、[OK] をクリックします。
パラメーター 設定 名前 ESSHookForApplyAutoSnapshotPolicyスケーリングアクティビティ スケールアウトイベント タイムアウト期間 300 (OOS テンプレートの実行時間に基づいて調整) デフォルトの実行ポリシー 続行 ライフサイクルフック発効時の通知 [OOS テンプレート] > [パブリックテンプレート] > ACS-ESS-LifeCycleApplyAutoSnapshotPolicyACS-ESS-LifeCycleApplyAutoSnapshotPolicyテンプレートのパラメーター:AutoSnapshotPolicyId:ご利用の自動スナップショットポリシーの ID を入力します。
OOSAssumeRole:
OOSServiceRoleを選択します。
タイムアウト期間は、OOS テンプレートの実行全体をカバーできる十分な長さに設定してください。タイムアウトが短すぎると、フックの有効期限が切れる前に OOS がスナップショットポリシーの適用を完了できない場合があります。
スケールアウトイベントのトリガー
このチュートリアルでは、スケーリングルールを手動で実行してスケールアウトイベントをトリガーします。定期タスクや監視タスクを使用することもできます。
ライフサイクルフックは、スケーリングルールが実行されるときに有効になります。ECS インスタンスをスケーリンググループに手動で追加した場合は有効になりません。
スケーリンググループの詳細ページで、[スケーリングルールと監視タスク] タブをクリックします。
[スケーリングルール] タブをクリックし、[スケーリングルールの作成] をクリックします。
次のパラメーターを設定し、[OK] をクリックします。
パラメーター 設定 ルール名 Add1 ルールタイプ 簡易スケーリングルール 操作 1 個のインスタンスを追加 [スケーリングルール] タブで、Add1 ルールを見つけ、[操作] 列の [実行] をクリックします。
[スケーリングルールの実行] メッセージで、[OK] をクリックします。
Auto Scaling はスケーリンググループに 1 つの ECS インスタンスを追加します。
ESSHookForApplyAutoSnapshotPolicyライフサイクルフックは、インスタンスを追加保留中の状態にします。その後、Auto Scaling は OOS に信号を送り、ACS-ESS-LifeCycleApplyAutoSnapshotPolicyテンプレートを実行してスナップショットポリシーを適用させます。
結果の確認
スケーリンググループの詳細ページで、[インスタンス] タブをクリックします。
新しい ECS インスタンスを見つけ、[ECS インスタンス ID/名前] 列の ID をクリックします。
インスタンスの詳細ページで、[ブロックストレージ (ディスク)] タブをクリックします。
クラウドディスクを見つけ、[操作] 列の [自動スナップショットポリシーの設定] をクリックします。
成功:[自動スナップショットポリシー] トグルがオンになり、OOS テンプレートで指定したポリシーが表示されます。

失敗:トグルがオフになっています。OOS の実行を確認して原因を特定します。詳細については、下記の「(オプション) ステップ 3:OOS の実行ステータスの表示」をご参照ください。
(オプション) ステップ 3:OOS の実行ステータスの表示
スナップショットポリシーが適用されなかった場合は、OOS の実行ログを確認して問題を診断します。
クリーンアップ
このチュートリアルのために特別に作成したリソースが不要になった場合は、不要な課金を避けるために削除してください。
RAM ポリシー:
RAM コンソールで、[権限] > [ポリシー] に移動します。
ESSHookPolicyForApplyAutoSnapshotPolicyを見つけ、削除する前にOOSServiceRoleからデタッチします。
ライフサイクルフック:
Auto Scaling コンソールで、スケーリンググループの詳細ページを開きます。
[ライフサイクルフック] タブをクリックし、
ESSHookForApplyAutoSnapshotPolicyを見つけて削除します。
スケーリングルール:
スケーリンググループの詳細ページで、[スケーリングルールと監視タスク] タブをクリックします。
Add1 スケーリングルールを見つけて削除します。
よくある質問
O&M タスクが失敗した場合は、OOS の実行結果のエラーメッセージを確認し、次の表をご参照ください。
| エラーメッセージ | 原因 | 解決策 |
|---|---|---|
Forbidden.Unauthorized message: A required authorization for the specified action is not supplied. | Auto Scaling にアクションを実行する権限がありません。 | OOSServiceRole に必要な権限があることを確認してください。 |
Forbidden.RAM message: User not authorized to operate on the specified resource, or this API doesn't support RAM. | RAM ロールに必要なリソースを管理する権限がありません。 | RAM ロールで OOS に必要な権限を付与してください。OOS が OOS テンプレートで宣言されたリソースを管理する前に、RAM ロールに対応する権限が必要です。 |
LifecycleHookIdAndLifecycleActionToken.Invalid message: The specified lifecycleActionToken and lifecycleActionId you provided does not match any in process lifecycle action. | OOS が完了する前に、ライフサイクルフックのアクションが終了または停止されました。 | ライフサイクルフックのタイムアウト期間を延長して、OOS がすべての O&M タスクを完了するのに十分な時間を確保してください。 |
次のステップ
同じライフサイクルフックのパターンを使用して、スケールインイベント中に ECS インスタンスでスクリプトを自動的に実行します。詳細については、「ECS インスタンスでのスクリプトの自動実行」をご参照ください。
FAQ
運用保守 (O&M) タスクが失敗した場合は、実行結果のエラーメッセージに基づいて原因を特定します。詳細については、「よくある質問」をご参照ください。
一般的なエラーメッセージは次のとおりです。
エラーメッセージ | 原因 | 解決策 |
Forbidden.Unauthorized message: A required authorization for the specified action is not supplied. | Auto Scaling に指定されたアクションを実行する権限がありません。 | OOSServiceRole RAM ロールに必要な権限が付与されていることを確認します。 |
Forbidden.RAM message: User not authorized to operate on the specified resource, or this API doesn't support RAM. | RAM ユーザーまたは RAM ロールに対応するリソースを操作する権限がありません。 | OOSServiceRole RAM ロールに必要な権限があることを確認します。たとえば、OOS サービスのサンプル権限を RAM ロールに付与できます。OOS サービスが OOS テンプレートで指定されたリソースを管理できるように、RAM ロールに操作権限を追加する必要があります。 |
LifecycleHookIdAndLifecycleActionToken.Invalid message: The specified lifecycleActionToken and lifecycleActionId you provided does not match any in process lifecycle action. | 進行中のライフサイクルアクションの有効期限が切れているか、中止されています。 | OOS テンプレートで定義された O&M タスクがタイムアウト期間内に完了できるように、ライフサイクルフックのタイムアウト期間を評価します。 |