ECS (Elastic Compute Service) インスタンスのAuto Scalingのライフサイクルフック機能を有効にすると、ECSインスタンスが停止する前にECSインスタンスでカスタム操作を実行できます。 これにより、ECSインスタンスに割り当てられているelastic IPアドレス (EIP) をリリースする機会が提供されます。 ライフサイクルフック機能をCloudOps Orchestration Service (OOS) テンプレートと組み合わせると、ECSインスタンスのEIPをリリースするプロセスがより簡素化され、自動化されます。
前提条件
スケーリンググループが作成されます。 スケーリンググループの状態は有効です。 スケーリンググループの作成方法については、「スケーリンググループの作成」をご参照ください。
EIPは、スケーリンググループのECSインスタンスにバインドされます。 EIPのバインド方法については、「EIPの関連付けまたは関連付けの解除」をご参照ください。
CloudOps Orchestration Service (OOS) 用にRAMロールが作成されます。 RAMロールの信頼できるエンティティはAlibaba Cloud Service、信頼できるサービスはCloudOps Orchestration Service、RAMロールはOOSテンプレートで操作を実行する権限を持っている必要があります。 詳細については、「RAMを使用してOOSに権限を付与する」をご参照ください。
説明このトピックでは、OOSServiceRole RAMロールを例として使用します。 他のロールを使用することもできます。
手順
EIPがスケーリンググループのECSインスタンスにバインドされている場合、ECSインスタンスを削除してもEIPは自動的にリリースされません。 この場合、EIPを自動的にリリースする場合は、ライフサイクルフック機能をOOSテンプレートと組み合わせることができます。 このトピックでは、スケールイン中にEIPの自動リリースを実装する例として、ACS-ESS-LifeCycleReleaseEipAddressFromInstance
パブリックテンプレートを使用します。 次の手順を完了する必要があります。
ステップ1: RAMロールにOOSの権限を付与
OOSテンプレートを実行する権限が必要です。 ACS-ESS-LifeCycleReleaseEipAddressFromInstance
OOSテンプレートには、O&Mの目的で、ECSインスタンス、Auto Scalingリソース、およびEIPのリソースが含まれています。
RAMコンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
OOSServiceRole RAMロールを見つけて、アクション列の権限付与をクリックします。
OOSが承認を完了するために引き受けるOOSServiceRole RAMロールに必要な権限を追加します。
権限付与パネル、ビジネス要件に基づいて構成を完了し、権限の付与をクリックします。
この例で使用されるパラメーターを次の表に示します。 表に記載されていないパラメーターについては、デフォルト設定を使用します。
パラメーター
説明
リソース範囲
値を [アカウント] に設定します。
ポリシー
AliyunECSFullAccess
、AliyunESSFullAccess
、およびAliyunEIPFullAccess
のシステムポリシーを選択します。
ステップ2: スケールイン型のライフサイクルフックを作成し、スケールインをトリガーする
Auto Scalingコンソールにログインします。
左側のナビゲーションウィンドウで、スケーリンググループをクリックします。
上部のナビゲーションバーで、リージョンを選択します。
目的のスケーリンググループを見つけ、次のいずれかの方法でスケーリンググループの詳細ページを開きます。
スケーリンググループ名 /ID列のスケーリンググループのIDをクリックします。
[操作] 列の [詳細] をクリックします。
ライフサイクルフックを作成します。
詳細ページの上部で、ライフサイクルフックタブをクリックします。
[ライフサイクルフックの作成] をクリックします。
ビジネス要件に基づいてパラメーターを設定し、OKをクリックします。
この例で使用されるパラメーターを次の表に示します。 表に記載されていないパラメーターについては、デフォルト設定を使用します。
パラメーター
説明
名前
ESSHookForReleaseEipを入力してください。
スケーリングアクティビティ
[スケールインイベント] を選択します。
タイムアウト期間
ビジネス要件に基づいてTimeout Periodパラメーターを設定します。 単位は秒です。 この例では、Timeout Periodパラメーターは300に設定されています。
説明タイムアウト期間は、ECSインスタンスでカスタム操作を実行できる期間です。 タイムアウト期間がカスタム操作の実行に必要な期間よりも短い場合、操作は失敗する可能性があります。 必要な時間を評価し、ビジネス要件に基づいてTimeout Periodパラメーターを設定することを推奨します。
デフォルトの実行ポリシー
[続行] を選択します。
ライフサイクルフックが有効になったときに通知を送信
この例では、次の設定が使用されています。
[OOSテンプレート] を選択します。
[パブリックテンプレート] を選択します。
ACS-ESS-LifeCycleReleaseEipAddressFromInstance
パブリックテンプレートを選択します。
ACS-ESS-LifeCycleReleaseEipAddressFromInstance
パブリックテンプレートで、OOSAssumeRoleのOOSServiceRoleを選択します。 ステップ1では、ECS、Auto Scaling、およびEIPの権限がOOSServiceRole RAMロールに付与されます。 OSSは、OOSServiceRole RAMロールを引き受けた後、これらの権限を取得します。
スケールインをトリガーします。
この例では、スケーリングルールを手動で実行することによってスケールインがトリガーされます。 スケジュールタスクまたはイベントトリガータスクを使用してスケールインをトリガーすることもできます。
説明スケーリングルールを手動で実行したときにスケーリングアクティビティがトリガーされると、ライフサイクルフックが有効になります。 スケーリンググループにECSインスタンスを手動で追加または削除する場合、ライフサイクルフックは有効になりません。
表示されるページの上部で、スケーリングルールとイベントトリガータスクタブをクリックします。
スケーリングルールタブで、スケーリングルールの作成をクリックします。
[スケーリングルールの作成] ダイアログボックスで、ビジネス要件に基づいてパラメーターを設定し、OKをクリックします。
この例で使用されるパラメーターを次の表に示します。 表に記載されていないパラメーターについては、デフォルト設定を使用します。
パラメーター
説明
ルール名
Delete1を入力します。
ルールタイプ
[シンプルスケーリングルール] を選択します。
操作
値を [1インスタンスの削除] に設定します。
[スケーリングルール] タブで、Delete1スケーリングルールを見つけ、アクション列の実行をクリックします。
[スケーリングルールの実行] メッセージで、[OK] をクリックします。
Delete1スケーリングルールが実行された後、1つのECSインスタンスが削除されます。
ESSHookForReleaseEip
ライフサイクルフックにより、ECSインスタンスはPending状態になり、Auto ScalingはACS-ESS-LifeCycleReleaseEipAddressFromInstance
パブリックテンプレートで定義されたO&M操作を実行するようにOOSに通知します。実行結果が期待どおりかどうかを確認します。
Elastic IPアドレスページに移動して、対応するEIPが存在するかどうかを確認できます。 EIPが存在しない場合、操作は成功です。
説明ECSインスタンスが削除されてもEIPがリリースされていない場合は、OOSコンソールに移動してO&Mタスクの実行を確認します。
(オプション) 手順3: O&Mタスクの実行の確認
よくある質問
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タスクが割り当てられた制限時間内に完了できることを確認します。 |
関連ドキュメント
EIPを提供するセカンダリelastic network Interface (ENI) がスケーリンググループのECSインスタンスにバインドされている場合、ECSインスタンスを削除すると、セカンダリENIはリリースされますが、EIPはリリースされません。 ライフサイクルフック機能をOOSテンプレートと組み合わせて、セカンダリENIおよびEIPの自動リリースを実装できます。 詳細については、「ECSインスタンス用のEIPを持つセカンダリENIの自動リリース」をご参照ください。
ライフサイクルフック機能をCloudOps Orchestration Service (OOS) と組み合わせて、ECSインスタンスにEIPを提供するEIPまたはENIの自動バインドを実装することもできます。 詳細については、次のリファレンスを参照してください。