Auto Scaling は、Server Load Balancer (SLB) および ApsaraDB RDS とはネイティブに統合されていますが、AnalyticDB for MySQL とは統合されていません。アプリケーションデータが AnalyticDB for MySQL クラスターに存在する場合、ライフサイクルフックと CloudOps Orchestration Service (OOS) テンプレートを組み合わせることで、インスタンスのスケールアウトまたはスケールイン時に手動操作なしでホワイトリストの更新を自動化できます。
このチュートリアルでは、スケールアウトのケースについて説明します。新しい Elastic Compute Service (ECS) インスタンスがスケーリンググループに追加されると、そのプライベート IP アドレスが AnalyticDB for MySQL クラスターの IP アドレスホワイトリストに自動的に追加されます。スケールイン (インスタンスが削除された際の IP アドレスの削除) を処理するには、スケールインイベント用に設定された別のライフサイクルフックを作成します。
前提条件
開始する前に、以下が準備できていることを確認してください:
有効化 状態のスケーリンググループ
AnalyticDB for MySQL クラスター
CloudOps Orchestration Service (OOS) の RAM ロール — 信頼できるエンティティは Alibaba Cloud サービス である必要があります。信頼できるサービスは CloudOps Orchestration Service である必要があります。設定の詳細については、「RAM を使用して OOS に権限を付与する」をご参照ください。
このチュートリアルでは、RAM ロール名として OOSServiceRole を使用します。別のロール名を使用することもできます。仕組み
スケールアウトイベントが発生すると、次のようになります:
Auto Scaling は新しい ECS インスタンスを起動し、ライフサイクルフックをトリガーします。
インスタンスは Pending Add 状態になり、まだトラフィックを処理できません。
Auto Scaling は OOS に通知し、
ACS-ESS-LifeCycleModifyAnalyticDBIPWhitelistパブリックテンプレートを実行させます。OOS はインスタンスのプライベート IP アドレスを取得し、AnalyticDB for MySQL クラスターの IP アドレスホワイトリストに追加します。
タスクが完了すると、OOS は Auto Scaling に続行するよう信号を送信し、インスタンスは InService 状態に移行します。
OOS が完了する前にライフサイクルフックがタイムアウトした場合、インスタンスは設定した デフォルトの実行ポリシー に基づいて処理を進めます:
続行:ホワイトリストの更新が完了しなくても、インスタンスはサービスを開始します。
破棄:インスタンスは終了されます。
ステップ 1:OOS に対する RAM ロールの権限付与
ACS-ESS-LifeCycleModifyAnalyticDBIPWhitelist テンプレートには、ECS インスタンスの記述、AnalyticDB for MySQL ホワイトリストの変更、および Auto Scaling のライフサイクルアクションへの信号送信を行うための権限が必要です。
RAM コンソールにログインします。
ポリシーを作成します。
左側のナビゲーションウィンドウで、権限 > ポリシー を選択します。
ポリシーの作成 をクリックします。
ポリシーの作成 ページで、JSON タブをクリックし、次のポリシードキュメントを入力して、OK をクリックします。
名前 を
ESSHookPolicyForAnalyticDBWhitelistに設定します。{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeInstances" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "adb:ModifyDBClusterAccessWhiteList" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }
OOSServiceRole RAM ロールにポリシーをアタッチします。
左側のナビゲーションウィンドウで、ID > ロール を選択します。
OOSServiceRole を見つけ、操作 列の 権限を付与 をクリックします。
権限を付与 パネルで、リソース範囲 を アカウント に設定し、
ESSHookPolicyForAnalyticDBWhitelistカスタムポリシーを選択して、権限を付与 をクリックします。
ステップ 2:スケールアウト用のライフサイクルフックの作成
Auto Scaling コンソールにログインします。
左側のナビゲーションウィンドウで、スケーリンググループ をクリックします。
上部のナビゲーションバーで、スケーリンググループが配置されているリージョンを選択します。
スケーリンググループの ID をクリックするか、操作 列の 詳細 をクリックします。
ライフサイクルフック タブで、ライフサイクルフックの作成 をクリックします。
次のパラメーターを設定し、OK をクリックします。
パラメーター 説明 名前 ESSHookForAddAnalyticDBWhitelistと入力します。スケーリングアクティビティ スケールアウトイベント を選択します。 タイムアウト期間 予想される OOS の実行時間よりも長い値を設定します。フックが OOS の完了前にタイムアウトすると、ホワイトリストの更新は失敗します。この例では 300秒を使用します。デフォルトの実行ポリシー フックがタイムアウトした場合にインスタンスがサービスを開始できるようにするには 続行 を選択します。代わりにインスタンスを終了するには 破棄 を選択します。 ライフサイクルフックが有効になったときに通知を送信 OOS テンプレート > パブリックテンプレート > ACS-ESS-LifeCycleModifyAnalyticDBIPWhitelist を選択します。次に、テンプレートパラメーターを設定します:dbClusterId (ご利用の AnalyticDB for MySQL クラスターの ID)、modifyMode ( Append— スケールアウト時にプライベート IP アドレスをホワイトリストに追加)、および OOSAssumeRole (OOSServiceRole)。
ステップ 3:スケールアウトイベントのトリガーとホワイトリストの確認
スケールアウトイベントのトリガー
この例では、スケーリングルールを手動で実行してスケールアウトイベントをトリガーします。スケジュールされたタスクやイベントトリガー型のタスクを通じてスケールアウトイベントをトリガーすることもできます。
ライフサイクルフックは、スケーリングルールまたはタスクによってスケーリングアクティビティがトリガーされた場合にのみ有効になります。スケーリンググループにインスタンスを手動で追加または削除した場合には有効になりません。
スケーリングルールとイベントトリガー型のタスク タブで、スケーリングルール タブに移動します。
スケーリングルールの作成 をクリックして次のパラメーターを設定し、OK をクリックします。
パラメーター 値 ルール名 Add1ルールタイプ シンプルなスケーリングルール 操作 1 個のインスタンスを追加 Add1スケーリングルールを見つけ、操作 列の 実行 をクリックします。スケーリングルールの実行 メッセージで、OK をクリックします。
Auto Scaling は 1 つの ECS インスタンスを起動します。ESSHookForAddAnalyticDBWhitelist ライフサイクルフックが有効になっているため、インスタンスは Pending Add 状態になります。タイムアウト期間中に、Auto Scaling は OOS に通知して ACS-ESS-LifeCycleModifyAnalyticDBIPWhitelist テンプレートを実行させます。
IP アドレスホワイトリストの確認
AnalyticDB for MySQL コンソールにログインします。
左側のナビゲーションウィンドウで、クラスター をクリックします。
クラスター ID/説明 列でクラスター ID をクリックします。
左側のナビゲーションウィンドウで、データセキュリティ をクリックします。
ECS インスタンスのプライベート IP アドレスがホワイトリストに表示されていれば、OOS テンプレートは正常に実行されています。IP アドレスが見つからない場合は、次のステップで説明するように OOS の実行詳細を確認してください。
(任意) ステップ 4:OOS の実行の表示
OOS コンソールにログインします。
左側のナビゲーションウィンドウで、自動化タスク > タスク実行管理 を選択します。
時間で実行を見つけ、操作 列の 詳細 をクリックします。
基本情報 セクションで、実行 ID とステータスを確認します。実行ステップと結果 セクションで、タスクノードをクリックしてステップレベルの詳細を表示します。
詳細については、「実行の詳細を表示する」をご参照ください。
実行が失敗した場合、実行詳細ページにエラーメッセージが表示されます。
よくある質問
運用保守 (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 タスクがタイムアウト期間内に完了できるように、ライフサイクルフックのタイムアウト期間を評価してください。 |
トラブルシューティング
タスクが失敗した場合は、実行結果でエラーメッセージを特定し、以下を参照してください:
`Forbidden.Unauthorized`: A required authorization for the specified action is not supplied.
OOSServiceRole RAM ロールに必要な権限がありません。ステップ 1 で説明されている権限を付与してください。
`Forbidden.RAM`: User not authorized to operate on the specified resource, or this API doesn't support RAM.
ステップ 1 のサンプル権限など、必要な権限が OOSServiceRole RAM ロールに付与されているか確認してください。ESSHookPolicyForAnalyticDBWhitelist ポリシーが、アカウントレベルのリソース範囲で OOSServiceRole にアタッチされていることを確認してください。
`LifecycleHookIdAndLifecycleActionToken.Invalid`: The specified lifecycleActionToken and lifecycleActionId you provided does not match any in process lifecycle action.
ライフサイクルフックのタイムアウト期間が、OOS テンプレートで指定された O&M タスクを完了するのに十分であるか確認してください。