すべてのプロダクト
Search
ドキュメントセンター

Auto Scaling:ECSインスタンスのプライベートIPアドレスをMongoDBインスタンスのIPアドレスホワイトリストに自動的に追加または削除する

最終更新日:Sep 11, 2024

このトピックでは、Auto Scalingのライフサイクルフック機能とCloudOps Orchestration Service (OOS) テンプレートを組み合わせて、最初にElastic Compute Service (ECS) インスタンスをPending状態にし、ApsaraDB for MongoDB (MongoDB) インスタンスのIPアドレスホワイトリストにインスタンスIPアドレスを追加または削除するタスクを自動化する方法について説明します。

前提条件

  • スケーリンググループが作成され、有効状態になります。

  • MongoDBインスタンスが作成されました。

  • CloudOps Orchestration Service (OOS) 用にRAMロールが作成されます。 RAMロールの信頼できるエンティティはAlibaba Cloud Service、信頼できるサービスはCloudOps Orchestration Service、RAMロールはOOSテンプレートで操作を実行する権限を持っている必要があります。 詳細については、「RAMを使用してOOSに権限を付与する」をご参照ください。

    説明

    このトピックでは、OOSServiceRole RAMロールを例として使用します。 他のロールを使用することもできます。

背景情報

Auto Scalingは現在、Server Load Balancer (SLB) およびApsaraDB RDSとの統合のみをサポートしています。 アプリケーションデータをMongoDBインスタンスに保存する場合、MongoDBインスタンスのIPアドレスホワイトリストをECSインスタンスのプライベートIPアドレスで手動で更新すると、非効率的な操作になります。 運用効率を高めるために、Auto Scalingのライフサイクルフック機能とOOSテンプレートを組み合わせて、MongoDBインスタンスのIPアドレスホワイトリストの更新を自動化することを検討してください。 次の使用法のノートを取りなさい:

  • スケーリンググループに既存のECSインスタンスが含まれている場合、ECSインスタンスのプライベートIPアドレスをMongoDBインスタンスのIPアドレスホワイトリストに手動で追加する必要があります。 それ以外の場合、MongoDBインスタンスのIPアドレスホワイトリストからインスタンスのIPアドレスを削除するとエラーが発生します。

  • OOS実行の作成に必要なパラメーターを指定するには、NotificationMetadata (略してメタデータ) を使用する必要があります。

    • メタデータはJSON文字列形式でなければなりません。

    • メタデータのキーは、OOSテンプレートのパラメーターと一致する必要があります。

    • OOSテンプレートにデフォルト設定がないパラメーターの場合は、これらのパラメーターの値を指定する必要があります。 OOSテンプレートにデフォルト設定があるパラメーターについては、デフォルト設定を上書きするかどうかを指定できます。

手順

この例では、LifeCycleModifyMongoDBIPWhitelistという名前のパブリックOOSテンプレートを使用して、スケールアウトイベント中にMongoDBインスタンスのIPアドレスホワイトリストへのインスタンスIPアドレスの追加を自動化する方法を示します。 以下の手順を実行します。

説明

MongoDBインスタンスのIPアドレスホワイトリストからのインスタンスIPアドレスの削除を自動化する場合は、スケールイン目的でライフサイクルフックを作成し、スケールインイベント中にライフサイクルフックを適用できます。

ステップ1: RAMロールにOOSの権限を付与

OOSテンプレートを実行する権限が必要です。 ACS-ESS-LifeCycleModifyMongoDBIPWhitelistテンプレートには、O&Mタスクの実行に必要なECS、Auto Scaling、およびMongoDBリソースが含まれています。

  1. RAMコンソールにログインします。

  2. ポリシーを作成します。

    1. 左側のナビゲーションウィンドウで、権限 > ポリシーを選択します。

    2. ポリシーページで、ポリシーの作成をクリックします。

    3. ポリシーの作成ページで、JSONタブをクリックし、ビジネス要件に基づいてパラメーターを設定し、OKをクリックします。

      この例で使用する設定を次の表に示します。 次の表に記載されていないパラメーターは、既定の設定にデフォルトします。

      パラメーター

      説明

      名前

      ESSHookPolicyForMongoDBWhitelistを入力します。

      ポリシードキュメント

      以下の内容を入力します。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "ecs:DescribeInstances"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "dds:ModifySecurityIps"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "ess:CompleteLifecycleAction"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }
  3. ポリシーをOOSServiceRole RAMロールにアタッチします。

    1. 左側のナビゲーションウィンドウで、アイデンティティ > ロールを選択します。

    2. OOSServiceRole RAMロールを見つけて、アクション列の権限付与をクリックします。

      OOSが承認を完了するために引き受けるOOSServiceRole RAMロールに必要な権限を追加します。

    3. [権限付与] パネルで、[リソーススコープ][ポリシー] を設定します。 設定が完了したら、[権限の付与] をクリックします。

      この例で使用する設定を次の表に示します。 次の表に記載されていないパラメーターは、既定の設定にデフォルトします。

      パラメーター

      説明

      リソーススコープ

      値を [アカウント] に設定します。

      ポリシー

      次のカスタムポリシーを選択します: ESSHookPolicyForMongoDBWhitelist。

手順2: スケールアウト目的のライフサイクルフックを作成し、スケールアウトイベントをトリガー

  1. Auto Scalingコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、スケーリンググループをクリックします。

  3. 上部のナビゲーションバーで、リージョンを選択します。

  4. 目的のスケーリンググループを見つけ、次のいずれかの方法でスケーリンググループの詳細ページを開きます。

    • スケーリンググループ名 /ID列のスケーリンググループのIDをクリックします。

    • [操作] 列の [詳細] をクリックします。

  5. ライフサイクルフックを作成します。

    1. 詳細ページの上部で、ライフサイクルフックタブをクリックします。

    2. [ライフサイクルフックの作成] をクリックします。

    3. ビジネス要件に基づいてパラメーターを設定し、OKをクリックします。

      この例で使用する設定を次の表に示します。 次の表に記載されていないパラメーターは、既定の設定にデフォルトします。

      パラメーター

      説明

      名前

      ESSHookForAddMongoDBWhitelistを入力します。

      スケーリングアクティビティ

      [スケールアウトイベント] を選択します。

      タイムアウト期間

      ビジネス要件に基づいてタイムアウト期間を設定します。 この例では、値を300に設定します。 単位は秒です。

      説明

      タイムアウト期間は、インスタンスに対してカスタム操作を実行できる期間です。 タイムアウト期間がカスタム操作の実行に必要な期間よりも短い場合、操作は失敗する可能性があります。 インスタンスでカスタム操作を実行するために必要な期間を見積もり、見積もりに基づいてタイムアウト期間を設定することを推奨します。

      デフォルトの実行ポリシー

      [続行] を選択します。

      ライフサイクルフックが有効になったときに通知を送信

      テンプレートに次のパラメーターを設定します。

      • [OOSテンプレート] を選択します。

      • [パブリックテンプレート] を選択します。

      • LifeCycleModifyMongoDBIPWhitelistを選択します。

      ACS-ESS-LifeCycleModifyMongoDBIPWhitelistパブリックテンプレートでは、次のパラメーターも設定する必要があります。

      • dbInstanceId: MongoDBインスタンスのIDを入力します。 この例では、MongoDBレプリカセットインスタンスが使用されています。

      • modifyMode: [追加] を選択します。 この値は、Auto ScalingがECSインスタンスのプライベートIPアドレスをMongoDBインスタンスのIPアドレスホワイトリストに追加するスケールアウトイベントに適用されます。

      • OOSAssumeRole: OOSServiceRoleを選択します。 ステップ1では、OOSServiceRoleにECS、Auto Scaling、およびMongoDBリソースに対する権限が付与されます。 RAMロールを引き受けた後、OOSは前述の権限を取得します。

  6. スケールアウトイベントをトリガーします。

    この例では、スケールアウトイベントは、スケーリングルールを実行することによって手動でトリガーされます。 スケジュールタスクまたはイベントトリガータスクを使用して、スケールアウトイベントをトリガーすることもできます。

    説明

    スケーリングルールを手動で実行したときにスケーリングイベントがトリガーされると、ライフサイクルフックが有効になります。 ただし、スケーリンググループにECSインスタンスを手動で追加または削除する場合、ライフサイクルフックは有効になりません。

    1. 表示されるページの上部で、スケーリングルールとイベントトリガータスクタブをクリックします。

    2. スケーリングルールタブで、スケーリングルールの作成をクリックします。

    3. スケーリングルールの作成ダイアログボックスで、ビジネス要件に基づいてパラメーターを設定し、OKをクリックします。

      この例で使用する設定を次の表に示します。 次の表に記載されていないパラメーターは、既定の設定にデフォルトします。

      パラメーター

      説明

      ルール名

      Add1を入力します。

      ルールタイプ

      [シンプルスケーリングルール] を選択します。

      操作

      値をAdd 1 Instancesに設定します。

    4. スケーリングルールタブで、Add1スケーリングルールを見つけて、アクション列の実行をクリックします。

    5. スケーリングルールの実行メッセージで、 OKをクリックします。

    スケーリングルールが実行されると、Auto scalingは1つのECSインスタンスをスケーリンググループに追加します。 ただし、ESSHookForAddMongoDBWhitelistライフサイクルフックが有効であるため、ECSインスタンスは [保留中の追加] 状態になります。 ライフサイクルフックのタイムアウト期間中、Auto Scalingは、ACS-ESS-LifeCycleModifyMongoDBIPWhitelistパブリックテンプレートで定義されているO&Mタスクを実行するようにOOSに通知します。

手順3: MongoDBインスタンスのIPアドレスホワイトリストの確認

  1. MongoDBコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、レプリカセットインスタンスをクリックします。

  3. 目的のMongoDBインスタンスを見つけ、そのIDをインスタンスID /名前でクリックします。

  4. 左側のナビゲーションウィンドウで、データセキュリティ > ホワイトリスト設定を選択します。

    • ECSインスタンスのプライベートIPアドレスがMongoDBインスタンスのIPアドレスホワイトリストに追加された場合、ACS-ESS-LifeCycleModifyMongoDBIPWhitelistパブリックテンプレートは予想通り有効になります。

    • ECSインスタンスが作成されても、そのプライベートIPアドレスがMongoDBインスタンスのIPアドレスホワイトリストに追加されていない場合は、OOSコンソールに移動してO&Mタスクの実行を表示します。 詳細については、「 (オプション) 手順4: OOS実行の表示」をご参照ください。

(オプション) ステップ4: OOS実行の表示

  1. OOSコンソールにログインします。

  2. 左側のナビゲーションウィンドウで、自動タスク > タスク実行管理を選択します。

  3. 実行タスクを時間で見つけて、アクション列の詳細をクリックします。

  4. 表示される実行詳細ページで、関連情報を表示します。

    たとえば、[基本情報] セクションでは、実行IDとステータスを表示できます。 [実行手順と結果] セクションで、タスクノードをクリックして実行の詳細を表示できます。 詳細については、「実行の詳細の表示」をご参照ください。

    説明

    実行が失敗した場合は、実行の詳細ページにエラーメッセージが表示されます。

よくある質問

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タスクが割り当てられた制限時間内に完了できることを確認します。