このトピックでは、ライフサイクルフック機能をCloudOps Orchestration Service (OOS) テンプレートとともに使用して、Elastic Compute Service (ECS) インスタンスをPending状態にし、インスタンスに自動スナップショットポリシーを適用する方法について説明します。
前提条件
スケーリンググループが作成されます。 スケーリンググループの状態は有効です。 スケーリンググループの作成方法については、「スケーリンググループの管理」をご参照ください。
自動スナップショットポリシーが作成されます。 自動スナップショットポリシーの作成方法については、「自動スナップショットポリシーの作成」をご参照ください。
CloudOps Orchestration Service (OOS) 用にRAMロールが作成されます。 RAMロールの信頼できるエンティティはAlibaba Cloud Service、信頼できるサービスはCloudOps Orchestration Service、RAMロールはOOSテンプレートで操作を実行する権限を持っている必要があります。 詳細については、「RAMを使用してOOSに権限を付与する」をご参照ください。
説明このトピックでは、OOSServiceRole RAMロールを例として使用します。 他のロールを使用することもできます。
背景情報
自動スナップショットポリシーを使用して、ECSインスタンスのスナップショットを定期的に作成できます。 これにより、データのセキュリティとフォールトトレランスが強化されます。 スケーリング設定の作成時に、スケーリング設定で自動スナップショットポリシーを指定することはできません。 ただし、Auto Scalingのライフサイクルフック機能をOOSテンプレートと一緒に使用して、自動スナップショットポリシーをECSインスタンスのグループに自動的に適用できます。 これは、自動スナップショットポリシーをECSインスタンスに手動で適用するよりも効率的です。
自動スナップショットポリシーにより、システムディスクとデータディスクのデータの整合性を保護するために、事前設定された時点でスケジュールされたスナップショットの作成が可能になります。 詳細については、「概要」をご参照ください。
手順
このトピックでは、ACS-ESS-LifeCycleApplyAutoSnapshotPolicy
パブリックOOSテンプレートを例として使用し、スケールアウトイベント中にECSインスタンスのグループに自動スナップショットポリシーを自動的に適用する方法を示します。 以下の手順を実行します。
ステップ1: RAMロールにOOSの権限を付与
OOSテンプレートにアクセスする権限が必要です。 ACS-ESS-LifeCycleApplyAutoSnapshotPolicy
のパブリックOOSテンプレートは、O&M操作の実行に必要なECSおよびAuto Scalingリソースを定義します。
RAMコンソールにログインします。
ポリシーを作成します。
左側のナビゲーションウィンドウで、 を選択します。
ポリシーページで、ポリシーの作成をクリックします。
[ポリシーの作成] ページで、[JSON] タブをクリックし、ポリシーの内容を入力して、[次へ] をクリックします。
サンプルポリシーの内容:
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeDisks", "ecs:ApplyAutoSnapshotPolicy", "ecs:DescribeInstances" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }
[基本情報] セクションで、ポリシー名を入力し、ポリシーの内容が有効かどうかを確認します。
この例では、Nameパラメーターを
ESSHookPolicyForApplyAutoSnapshotPolicy
に設定します。説明ポリシーの内容を変更する場合は、[戻る] をクリックしてポリシードキュメントを編集します。
[OK] をクリックします。
ポリシーをOOSServiceRole RAMロールにアタッチします。
左側のナビゲーションウィンドウで、 を選択します。
OOSServiceRole RAMロールを見つけて、アクション列の権限付与をクリックします。
OOSが承認を完了するために引き受けるOOSServiceRole RAMロールに必要な権限を追加します。
権限付与パネルで、ビジネス要件に基づいてパラメーターを設定し、権限の付与をクリックします。
この例で使用するパラメーター設定を次の表に示します。 次の表に含まれていないパラメーターについては、デフォルト設定を使用します。
パラメーター
説明
リソーススコープ
値を [アカウント] に設定します。
ポリシー
ESSHookPolicyForApplyAutoSnapshotPolicy
ポリシーを選択します。
手順2: ライフサイクルフックを作成してスケールアウトをトリガー
Auto Scalingコンソールにログインします。
左側のナビゲーションウィンドウで、スケーリンググループをクリックします。
上部のナビゲーションバーで、リージョンを選択します。
目的のスケーリンググループを見つけ、次のいずれかの方法でスケーリンググループの詳細ページを開きます。
スケーリンググループ名 /ID列のスケーリンググループのIDをクリックします。
[操作] 列の [詳細] をクリックします。
ライフサイクルフックを作成します。
詳細ページの上部で、ライフサイクルフックタブをクリックします。
[ライフサイクルフックの作成] をクリックします。
ビジネス要件に基づいてパラメーターを設定し、OKをクリックします。
この例で使用するパラメーター設定を次の表に示します。 次の表に含まれていないパラメーターについては、デフォルト設定を使用します。
パラメーター
説明
名前
ESSHookForApplyAutoSnapshotPolicyを入力します。
スケーリングアクティビティ
[スケールアウトイベント] を選択します。
タイムアウト期間
ビジネス要件に基づいてTimeout Periodパラメーターを設定します。 この例では、このパラメーターは300に設定されています。 単位は秒です。
説明タイムアウト期間は、インスタンスに対してカスタム操作を実行できる期間です。 タイムアウト期間がカスタム操作の実行に必要な期間よりも短い場合、操作は失敗する可能性があります。 インスタンスでカスタム操作を実行するために必要な期間を見積もり、見積もりに基づいてTimeout periodパラメーターを設定することを推奨します。
デフォルトの実行ポリシー
[続行] を選択します。
ライフサイクルフックが有効になったときに通知を送信
この例では、次の操作を実行します。
[OOSテンプレート] を選択します。
[パブリックテンプレート] を選択します。
[ACS-ESS-LifeCycleApplyAutoSnapshotPolicy]
を選択します。
ACS-ESS-LifeCycleApplyAutoSnapshotPolicy
パブリックOOSテンプレートで次のパラメーターを設定します。AutoSnapshotPolicyId: 自動スナップショットポリシーのIDを入力します。
OOSAssumeRole: OOSServiceRoleを選択します。 ステップ1では、ECSおよびAuto Scalingリソースに対する権限がOOSServiceRole RAMロールに付与されます。 OOSは、RAMロールを引き受けた後に権限を取得できます。
スケールアウトイベントをトリガーします。
この例では、スケールアウトイベントは、スケーリングルールを実行することによって手動でトリガーされます。 スケジュールタスクまたはイベントトリガータスクを使用して、スケールアウトイベントをトリガーすることもできます。
説明スケーリングルールを手動で実行したときにスケーリングイベントがトリガーされると、ライフサイクルフックが有効になります。 ただし、スケーリンググループにECSインスタンスを手動で追加または削除した場合、ライフサイクルフックは有効になりません。
表示されるページの上部で、スケーリングルールとイベントトリガータスクタブをクリックします。
スケーリングルールタブで、スケーリングルールの作成をクリックします。
スケーリングルールの作成ダイアログボックスで、ビジネス要件に基づいてパラメーターを設定し、OKをクリックします。
この例で使用するパラメーター設定を次の表に示します。 次の表に含まれていないパラメーターについては、デフォルト設定を使用します。
パラメーター
説明
ルール名
Add1を入力します。
ルールタイプ
[シンプルスケーリングルール] を選択します。
操作
値をAdd 1 Instancesに設定します。
スケーリングルールタブで、Add1スケーリングルールを見つけて、アクション列の実行をクリックします。
スケーリングルールの実行メッセージで、OKをクリックします。
Add1が実行されると、Auto Scalingは1つのECSインスタンスをスケーリンググループに追加しようとします。
ESSHookForApplyAutoSnapshotPolicy
ライフサイクルフックにより、ECSインスタンスは [保留中の追加] 状態になります。 この期間中、Auto Scalingは、ACS-ESS-LifeCycleApplyAutoSnapshotPolicy
テンプレートを実行し、定義されたO&M操作を完了するようにOOSに通知します。自動的に作成されたECSインスタンスが期待どおりかどうかを確認します。
詳細ページの上部で、インスタンスタブをクリックします。
自動的に作成されたECSインスタンスを検索し、ECSインスタンスID /名前列でそのIDクリックします。
インスタンスの詳細ページで、ブロックストレージ (ディスク)タブをクリックします。
目的のクラウドディスクを見つけて、アクション列の自動スナップショットポリシーの設定をクリックします。
次の図では、自動スナップショットポリシーがオンになっています。 適用されるスナップショットポリシーは、ライフサイクルフックの作成時に
ACS-ESS-LifeCycleApplyAutoSnapshotPolicy
OOSパブリックテンプレートで指定されたポリシーです。 これは、自動的に作成されたECSインスタンスが期待を満たしていることを示します。ECSインスタンスが作成されているが、自動スナップショットポリシーがない場合は、OOSコンソールに移動して、パブリックテンプレートで定義されているO&M操作の実行を確認します。
(オプション) 手順3: OOSテンプレートの実行ステータスの表示
よくある質問
O&Mタスクの実行に失敗した場合は、実行結果のエラーメッセージに基づいて問題のトラブルシューティングを行います。 詳細は、「よくある質問」をご参照ください。
次の表に、一般的なエラーメッセージを示します。
エラーメッセージ | 原因 | 解決策 |
Forbidden.Unauthorizedメッセージ: 指定されたアクションに必要な権限が提供されていません。 | 現在のアクションの実行をAuto Scalingに許可していません。 | OOSServiceRole RAMロールに必要な権限があるかどうかを確認します。 |
Forbidden.RAMメッセージ: 指定されたリソースを操作する権限がユーザーにないか、このAPIがRAMをサポートしていません。 | RAMユーザーまたはRAMロールに、対応するリソースを操作する権限がありません。 | OOSServiceRole RAMロールに必要な権限があるかどうかを確認します。 たとえば、RAMロールにOOS権限を付与できます。 OOSがOOSテンプレートで宣言されたリソースを管理する前に、RAMロールに必要な権限を付与する必要があります。 |
LifecycleHookIdAndLifecycleActionToken.Invalid message: 指定したlifecycleActionTokenとlifecycleActionIdは、プロセスライフサイクル内のアクションと一致しません。 | 進行中のライフサイクルフックアクションが終了または停止されました。 | ライフサイクルフックのタイムアウト期間を評価して、OOSテンプレートで指定されたO&Mタスクが割り当てられた制限時間内に完了できることを確認します。 |
関連ドキュメント
Auto Scalingのライフサイクルフック機能をOOSテンプレートとともに使用して、スケールインイベント中にECSインスタンスでスクリプトを自動実行できるようにすることもできます。 詳細については、「ECSインスタンスでのスクリプトの自動実行」をご参照ください。