このトピックでは、Auto Scaling のライフサイクルフック機能とCloudOps Orchestration Service (OOS) テンプレートを組み合わせて、まずCloudOps Orchestration Service (OOS) インスタンスを保留状態にし、その後、インスタンスの IP アドレスを ApsaraDB for MongoDB (MongoDB) インスタンスの IP アドレスホワイトリストに自動で追加または削除するタスクを自動化する方法を説明します。
前提条件
-
スケーリンググループが作成され、有効になっています。
MongoDB インスタンスが作成されていること。
-
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 との連携のみをサポートしています。アプリケーションデータを MongoDB インスタンスに保存している場合、ECS インスタンスのプライベート IP アドレスで MongoDB インスタンスの IP アドレスホワイトリストを手動で更新すると、運用効率が低下します。運用効率を高めるには、Auto Scaling のライフサイクルフック機能と OOS テンプレートを組み合わせて、MongoDB インスタンスの IP アドレスホワイトリストの更新を自動化することを検討してください。以下の使用上の注意にご留意ください。
スケーリンググループに既存の ECS インスタンスが含まれている場合、ECS インスタンスのプライベート IP アドレスを MongoDB インスタンスの IP アドレスホワイトリストに手動で追加する必要があります。そうしないと、MongoDB インスタンスの IP アドレスホワイトリストからインスタンスの IP アドレスを削除する際にエラーが発生します。
OOS 実行の作成に必要なパラメーターを指定するには、NotificationMetadata (略して metadata) を使用する必要があります。
metadata は JSON 文字列形式である必要があります。
メタデータ内のキーは、OOS テンプレート内のパラメーターと一致する必要があります。
OOS テンプレートにデフォルト設定がないパラメーターについては、これらのパラメーターの値を指定する必要があります。OOS テンプレートにデフォルト設定があるパラメーターについては、デフォルト設定を上書きするかどうかを指定できます。
操作手順
この例では、LifeCycleModifyMongoDBIPWhitelist という名前のパブリック OOS テンプレートを使用して、スケールアウトイベント中にインスタンスの IP アドレスを MongoDB インスタンスの IP アドレスホワイトリストに自動的に追加する方法を示します。次の手順を実行します。
MongoDB インスタンスの IP アドレスホワイトリストからインスタンスの IP アドレスの削除を自動化したい場合は、スケールイン用のライフサイクルフックを作成し、スケールインイベント中にそのライフサイクルフックを適用できます。
ステップ 1: RAM ロールへの OOS 権限の付与
OOS テンプレートを実行する権限が必要です。ACS-ESS-LifeCycleModifyMongoDBIPWhitelist テンプレートには、運用保守タスクの実行に必要な ECS、Auto Scaling、および MongoDB のリソースが含まれています。
-
RAM コンソールにログインします。
-
ポリシーを作成します。
-
左側のナビゲーションウィンドウで、 を選択します。
-
ポリシーの作成 をクリックします。
-
ポリシーの作成 ページで、JSON タブをクリックし、パラメーターを設定してからOK をクリックします。
次の表に、この例で使用する設定を示します。記載されていないパラメーターには、デフォルト設定が適用されます。
パラメーター
説明
ポリシー名
ESSHookPolicyForMongoDBWhitelist と入力します。
[ポリシードキュメント]
次の内容を入力します:
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeInstances" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "dds:ModifySecurityIps" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }
-
-
OOSServiceRole RAM ロールにポリシーをアタッチします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
OOSServiceRole を見つけて、操作 列の 権限の付与 をクリックします。
OOS が偽装する OOSServiceRole RAM ロールに必要な権限を付与します。これにより、権限付与が完了します。
-
権限の付与 ページで、リソース範囲とポリシーを指定し、[OK] をクリックします。
次の表に、この例で使用する設定を示します。記載されていないパラメーターには、デフォルト設定が適用されます。
パラメーター
説明
承認スコープ
Account を選択します。
ポリシー
次のカスタムポリシーを選択します: ESSHookPolicyForMongoDBWhitelist
-
ステップ 2: スケールアウト用ライフサイクルフックの作成とスケールアウトイベントのトリガー
Auto Scaling コンソールにログインします。
左側メニューで、スケーリンググループ をクリックします。
上部メニューで、リージョンを選択します。
管理するスケーリンググループを見つけて、次のいずれかの方法で詳細ページを開きます。
スケーリンググループ名/ID 列で、スケーリンググループの ID をクリックします。
操作 列で、詳細 をクリックします。
-
ライフサイクルフックを作成します。
ページの上部で、事件とリンクする タブをクリックします。
-
ライフサイクルフックの作成 をクリックします。
-
ライフサイクルフックを設定し、OK をクリックします。
次の表に、この例で使用する設定を示します。記載されていないパラメーターには、デフォルト設定が適用されます。
パラメーター
説明
[名前]
ESSHookForAddMongoDBWhitelist と入力します。
[スケーリングアクティビティタイプ]
スケールアウト を選択します。
[タイムアウト時間]
業務要件に基づいてタイムアウト期間を設定します。この例では、値を 300 に設定します。単位:秒。
説明タイムアウト期間は、インスタンス上でカスタム操作を実行できる時間です。タイムアウト期間がカスタム操作の実行に必要な時間より短い場合、操作が失敗する可能性があります。インスタンス上でカスタム操作を実行するために必要な時間を見積もり、その見積もりに基づいてタイムアウト期間を設定することを推奨します。
[デフォルトの実行ポリシー]
続行 を選択します。
[フック中に実行されたアクション]
テンプレートに次のパラメーターを設定します。
-
通知方法: OOS テンプレート を選択します。
-
OOS テンプレートタイプ: パブリックテンプレート を選択します。
[LifeCycleModifyMongoDBIPWhitelist] を選択します。
ACS-ESS-LifeCycleModifyMongoDBIPWhitelist パブリックテンプレートでは、次のパラメーターも設定する必要があります。
-
MongoDB インスタンス ID: ApsaraDB for MongoDB インスタンスの ID を入力します。このチュートリアルでは、レプリカセットインスタンスを例として使用します。
-
ホワイトリストの変更方法: [追加] を選択します。これはスケールアウトイベントに対応し、ECS インスタンスを ApsaraDB for MongoDB インスタンスの IP アドレスホワイトリストに追加します。
-
[OOS が実行する RAM ロールです。]:
OOSServiceRoleを選択します。「操作手順」のセクションで、ECS、Auto Scaling、および ApsaraDB for MongoDB リソースを管理するために必要な権限をOOSServiceRoleRAM ロールに付与しました。OOS はこの RAM ロールを引き受けて、必要な権限を取得できます。
-
-
スケールアウトイベントをトリガーします。
この例では、スケーリングルールを実行してスケールアウトイベントを手動でトリガーします。スケジュールされたタスクやイベントトリガータスクを使用してスケールアウトイベントをトリガーすることもできます。
説明スケーリングルールを手動で実行してスケーリングイベントがトリガーされた場合、ライフサイクルフックは有効になります。ただし、スケーリンググループに ECS インスタンスを手動で追加または削除した場合、ライフサイクルフックは有効になりません。
-
ページ上部で、スケーリングルールとアラートタスク タブをクリックします。
-
スケーリングルール タブで、スケーリングルールの作成 をクリックします。
-
スケーリングルールのプロパティを設定し、OK をクリックします。
次の表に、この例で使用する設定を示します。記載されていないパラメーターには、デフォルト設定が適用されます。
パラメーター
説明
[ルール名]
Add1 と入力します。
[ルールタイプ]
シンプルスケーリングルール を選択します。
[操作]
値を [1個のインスタンスを追加] に設定します。
-
スケーリングルールのリストで、新しく作成した
Add1ルールを検索し、操作 列の曜日に一回実行 をクリックします。 -
OK をクリックします。
スケーリングルールが実行された後、Auto Scaling はスケーリンググループに 1 つの ECS インスタンスを追加します。ただし、ESSHookForAddMongoDBWhitelist ライフサイクルフックが有効なため、ECS インスタンスは「追加保留中」の状態になります。ライフサイクルフックのタイムアウト期間中に、Auto Scaling は OOS に通知して、ACS-ESS-LifeCycleModifyMongoDBIPWhitelist パブリックテンプレートで定義された運用保守タスクを実行します。
-
ステップ 3: MongoDB インスタンスの IP アドレスホワイトリストの確認
MongoDB コンソールにログインします。
-
左側メニューで、レプリカセットインスタンス をクリックします。
-
ApsaraDB for MongoDB インスタンスを検索し、インスタンス ID/名前 列でその ID をクリックします。
-
左側メニューで、 を選択します。
ECS インスタンスのプライベート IP アドレスが MongoDB インスタンスの IP アドレスホワイトリストに追加された場合、ACS-ESS-LifeCycleModifyMongoDBIPWhitelist パブリックテンプレートは正常に機能しています。
ECS インスタンスは作成されたが、そのプライベート IP アドレスが MongoDB インスタンスの 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 テンプレートで定義されたオーケストレーションタスクが完了するのに十分な長さに設定されていることを確認してください。 |