このトピックでは、Auto Scaling のライフサイクルフック機能と CloudOps Orchestration Service (OOS) テンプレートを組み合わせて、まず Elastic Compute Service (ECS) インスタンスを保留状態にし、次にインスタンスの IP アドレスを PolarDB クラスターの IP アドレスホワイトリストに自動で追加または削除するタスクを自動化する方法を説明します。
前提条件
-
スケーリンググループが作成され、有効になっています。
PolarDB クラスターが作成されていること。
-
CloudOps Orchestration Service (OOS) 用の RAM ロールを作成する必要があります。この RAM ロールは、エンティティとして Alibaba Cloud サービス を、信頼できるサービスとして CloudOps Orchestration Service を信頼する必要があります。また、このロールには OOS テンプレートを実行する権限も付与されている必要があります。詳細については、「OOS 用の RAM ロールを作成して権限を付与する」をご参照ください。
説明このトピックでは、OOSServiceRole RAM ロールを例として使用します。カスタム RAM ロールを使用することも可能です。
背景
現在、Auto Scaling は Server Load Balancer (SLB) および ApsaraDB RDS との連携のみをサポートしています。 アプリケーションデータを PolarDB クラスターに保存している場合、ECS インスタンスのプライベート IP アドレスでクラスターの IP アドレスホワイトリストを手動で更新すると、運用が非効率になります。 運用効率を向上させるには、Auto Scaling のライフサイクルフック機能と OOS テンプレートを組み合わせて、PolarDB クラスターの IP アドレスホワイトリストの更新を自動化することを検討できます。
手順
この例では、ACS-ESS-LifeCycleModifyPolarDBIPWhitelist という名前のパブリック OOS テンプレートを使用して、スケールアウトイベント中にインスタンスの IP アドレスを PolarDB クラスターの IP アドレスホワイトリストに自動的に追加する方法を示します。 次の手順を実行します。
インスタンスの IP アドレスを PolarDB クラスターの IP アドレスホワイトリストから自動的に削除する場合は、スケールイン用のライフサイクルフックを作成し、スケールインイベント中にそのライフサイクルフックを適用します。
手順1:RAM ロールに OOS の権限を付与する
OOS テンプレートを実行する権限が必要です。 ACS-ESS-LifeCycleModifyPolarDBIPWhitelist テンプレートには、運用保守タスクを実行するために必要な ECS、Auto Scaling、および PolarDB リソースが含まれています。
-
RAM コンソールにログインします。
-
ポリシーを作成します。
-
左側のナビゲーションウィンドウで、 を選択します。
-
ポリシーの作成 をクリックします。
-
ポリシーの作成 ページで、[JSON] タブをクリックし、パラメーターを設定して OK をクリックします。
次の表に、この例で使用する設定を示します。 次の表に記載されていないパラメーターは、すべてデフォルト設定のままにします。
パラメーター
説明
[名前]
ESSHookPolicyForPolarDBWhitelist と入力します。
[ポリシードキュメント]
次の内容を入力します。
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeInstances" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "polardb:DescribeDBClusterAccessWhitelist", "polardb:ModifyDBClusterAccessWhitelist" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }
-
-
ポリシーを OOSServiceRole RAM ロールにアタッチします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
OOSServiceRole を見つけて、操作 列の 権限の付与 をクリックします。
OOS が偽装する OOSServiceRole RAM ロールに必要な権限を付与します。これにより、権限付与が完了します。
-
権限の付与 ページで、リソース範囲とポリシーを設定して、[権限付与] をクリックします。
次の表に、この例で使用する設定を示します。 次の表に記載されていないパラメーターは、すべてデフォルト設定のままにします。
パラメーター
説明
[リソース範囲]
値を [アカウント] に設定します。
[権限ポリシー]
カスタムポリシー 「ESSHookPolicyForPolarDBWhitelist」 を選択します。
-
手順2:スケールアウト用のライフサイクルフックを作成してスケールアウトイベントをトリガーする
Auto Scaling コンソールにログインします。
左側メニューで、スケーリンググループ をクリックします。
上部メニューで、リージョンを選択します。
管理するスケーリンググループを見つけて、次のいずれかの方法で詳細ページを開きます。
スケーリンググループ名/ID 列で、スケーリンググループの ID をクリックします。
操作 列で、詳細 をクリックします。
-
ライフサイクルフックを作成します。
ページの上部で、事件とリンクする タブをクリックします。
-
ライフサイクルフックの作成 をクリックします。
-
ライフサイクルフックのパラメーターを設定して、OK をクリックします。
次の表に、この例で使用する設定を示します。 次の表に記載されていないパラメーターは、すべてデフォルト設定のままにします。
パラメーター
説明
[名前]
ESSHookForAddPolarDBWhitelist と入力します。
[スケーリングアクティビティタイプ]
スケールアウト を選択します。
[タイムアウト時間]
ビジネス要件に基づいてタイムアウト期間を設定します。 この例では、値を 300 に設定します。 単位:秒。
説明タイムアウト期間は、インスタンスでカスタム操作を実行できる期間です。 タイムアウト期間がカスタム操作の実行に必要な期間より短い場合、操作が失敗することがあります。 インスタンスでカスタム操作を実行するために必要な期間を見積もり、その見積もりに基づいてタイムアウト期間を設定することを推奨します。
[デフォルトの実行ポリシー]
続行 を選択します。
[フック中に実行されたアクション]
テンプレートに次のパラメーターを設定します。
-
通知方法: OOS テンプレート を選択します。
-
OOS テンプレートタイプ: パブリックテンプレート を選択します。
ACS-ESS-LifeCycleModifyPolarDBIPWhitelist を選択します。
ACS-ESS-LifeCycleModifyPolarDBIPWhitelist パブリックテンプレートでは、次のパラメーターも設定する必要があります。
[dbClusterId]: PolarDB クラスターの ID を入力します。
[modifyMode]: Append を選択します。 この値は、Auto Scaling が ECS インスタンスのプライベート IP アドレスを PolarDB クラスターの IP アドレスホワイトリストに追加するスケールアウトイベントに適用されます。
[OOSAssumeRole]: OOSServiceRole を選択します。 手順1 で、OOSServiceRole には ECS、Auto Scaling、および PolarDB リソースに対する権限が付与されています。 OOS は、RAM ロールを引き受けた後、前述の権限を取得します。
-
-
スケールアウトイベントをトリガーします。
この例では、スケーリングルールを実行して、スケールアウトイベントを手動でトリガーします。 スケジュールされたタスクまたはイベントトリガータスクを使用して、スケールアウトイベントをトリガーすることもできます。
説明スケーリングルールを手動で実行してスケーリングイベントをトリガーした場合、ライフサイクルフックは有効になります。 ただし、ECS インスタンスを手動でスケーリンググループに追加または削除した場合、ライフサイクルフックは有効になりません。
-
スケーリングルールとアラートタスク タブをクリックします。
-
スケーリングルール タブで、スケーリングルールの作成 をクリックします。
-
スケーリングルールのプロパティを設定して、OK をクリックします。
次の表に、この例で使用する設定を示します。 次の表に記載されていないパラメーターは、すべてデフォルト設定のままにします。
パラメーター
説明
[ルール名]
Add1 と入力します。
[ルールタイプ]
シンプルスケーリングルール を選択します。
[操作]
値を「インスタンスを 1 個追加」に設定します。
-
スケーリングルールのリストで、作成した Add1 ルールを見つけて、操作 列の 曜日に一回実行 をクリックします。
-
OK をクリックします。
スケーリングルールが実行されると、Auto Scaling は 1 つの ECS インスタンスをスケーリンググループに追加します。 ただし、有効になっている ESSHookForAddPolarDBWhitelist ライフサイクルフックにより、ECS インスタンスは保留 (追加) 状態になります。 ライフサイクルフックのタイムアウト期間中に、Auto Scaling は OOS に通知して、ACS-ESS-LifeCycleModifyPolarDBIPWhitelist パブリックテンプレートで定義された運用保守タスクを実行させます。
-
手順3:PolarDB クラスターの IP アドレスホワイトリストを確認する
PolarDB コンソールにログインします。
-
左側のメニューで、クラスター をクリックします。
-
PolarDB クラスターを見つけ、クラスター ID / 名前 列でその ID をクリックします。
-
左側のメニューで、 をクリックします。
ECS インスタンスのプライベート IP アドレスが PolarDB クラスターの IP アドレスホワイトリストに追加されている場合、ACS-ESS-LifeCycleModifyPolarDBIPWhitelist パブリックテンプレートが適用されたことになります。
ECS インスタンスは作成されたが、そのプライベート IP アドレスが PolarDB クラスターの IP アドレスホワイトリストに追加されていない場合は、OOS コンソールに移動して、運用保守タスクの実行状況を確認します。 詳細については、「手順4: (オプション) OOS の実行状況を表示する」をご参照ください。
手順4: (オプション) OOS の実行状況を表示する
よくある質問
オーケストレーションタスクが失敗した場合は、その実行結果に表示されるエラーメッセージを参照してトラブルシューティングを行ってください。詳細については、「よくある質問」をご参照ください。
以下の表は、一般的なエラーメッセージを示しています。
|
エラーメッセージ |
原因 |
解決方法 |
|
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 ロールに、指定されたリソースに対する操作権限がありません。 |
OOS テンプレートで指定されたリソースを管理するために、OOSServiceRole RAM ロールに必要な権限が付与されていることを確認してください。たとえば、OOS のサンプル権限をロールに付与できます。 |
|
LifecycleHookIdAndLifecycleActionToken.Invalid message: The specified lifecycleActionToken and LifecycleHookId you provided does not match any in process lifecycle action. |
進行中のライフサイクルアクションが期限切れになったか、中止されました。 |
ライフサイクルフックのタイムアウト値を確認し、OOS テンプレートで定義されたオーケストレーションタスクが完了するのに十分な長さに設定されていることを確認してください。 |