本チュートリアルでは、Auto Scaling のライフサイクルフックを使用して ECS インスタンスの処理を一時停止し、CloudOps Orchestration Service (OOS) テンプレートを使用して、そのインスタンスを Tair インスタンスのホワイトリストに自動的に追加または削除する方法について説明します。
前提条件
-
スケーリンググループが作成され、有効になっています。
Tair インスタンスが作成されています。
-
CloudOps Orchestration Service (OOS) 用の RAM ロールを作成する必要があります。この RAM ロールは、エンティティとして Alibaba Cloud サービス を、信頼できるサービスとして CloudOps Orchestration Service を信頼している必要があります。また、このロールには OOS テンプレートを実行する権限も付与されている必要があります。詳細については、「OOS 用の RAM ロールを作成して権限を付与する」をご参照ください。
説明本トピックでは、OOSServiceRole RAM ロールを例として使用します。カスタム RAM ロールを使用することもできます。
背景情報
スケーリンググループは Server Load Balancer (SLB) インスタンスおよび ApsaraDB RDS インスタンスと関連付けられますが、Tair インスタンスとは関連付けられません。ビジネスデータを Tair インスタンスに保存している場合、ECS インスタンスを手動で Tair インスタンスのホワイトリストに追加または削除するのは非効率的です。ライフサイクルフックと OOS テンプレートを使用することで、ECS インスタンスを Tair インスタンスのホワイトリストに自動的に追加および削除できます。
操作手順
本チュートリアルでは、パブリック OOS テンプレート ACS-ESS-LifeCycleModifyRedisIPWhitelist を使用して、スケールアウト時に ECS インスタンスを Tair インスタンスのホワイトリストに追加する方法を説明します。
スケールイン時に ECS インスタンスを Tair インスタンスのホワイトリストから削除するには、スケールインアクティビティ用のライフサイクルフックを作成してから、スケールインをトリガーしてください。
ステップ 1:OOS RAM ロールに権限を付与する
ACS-ESS-LifeCycleModifyRedisIPWhitelist OOS テンプレートを実行するには、関連する Elastic Compute Service、Auto Scaling、および Tair (Redis OSS-compatible) リソースに対する権限が必要です。
-
RAM コンソールにログインします。
権限ポリシーを作成します。
-
左側のナビゲーションウィンドウで、 を選択します。
-
ポリシーの作成 をクリックします。
ポリシーの作成 ページで、JSON タブをクリックし、パラメーターを設定してから、OK をクリックします。
以下の表にパラメーターを示します。記載されていないパラメーターはデフォルト値を使用してください。
パラメーター
説明
名前
ESSHookPolicyForRedisWhitelistと入力します。ポリシードキュメント
以下の内容を入力します:
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeInstances" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "kvstore:ModifySecurityIps" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }
-
作成した権限ポリシーを OOSServiceRole RAM ロールにアタッチします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
OOSServiceRole を見つけて、操作 列の 権限の付与 をクリックします。
OOS が偽装する OOSServiceRole RAM ロールに必要な権限を付与します。これで権限付与が完了します。
権限の付与 ページで、権限付与範囲と権限を設定してから、Grant permissions をクリックします。
以下の表にパラメーターを示します。記載されていないパラメーターはデフォルト値を使用してください。
パラメーター
説明
リソースの範囲
Account を選択します。
ポリシー
ESSHookPolicyForRedisWhitelistという名前のカスタムポリシーをアタッチします。
-
ステップ 2:スケールアウトフックを作成してトリガーする
ライフサイクルフックを作成する際、通知方法として OOS テンプレートを選択し、必要なパラメーターを設定します。これにより、スケールアウトがトリガーされたときに ECS インスタンスが自動的に Tair インスタンスのホワイトリストに追加されます。
Auto Scaling コンソールにログインします。
左側のナビゲーションウィンドウで、スケーリンググループ をクリックします。
上部のナビゲーションバーで、リージョンを選択します。
管理対象のスケーリンググループを見つけ、次のいずれかの方法で詳細ページを開きます。
スケーリンググループ名/ID 列で、スケーリンググループの ID をクリックします。
操作 列で、詳細 をクリックします。
スケールアウト用のライフサイクルフックを作成します。
ページの上部で、事件とリンクする タブをクリックします。
ルールの作成 をクリックします。
ライフサイクルフックを設定して、OK をクリックします。
以下の表にパラメーターを示します。記載されていないパラメーターはデフォルト値を使用してください。
パラメーター
説明
名前
ESSHookForAddRedisWhitelistと入力します。スケーリングアクティビティタイプ
スケールアウト を選択します。
タイムアウト時間
300 秒など、適切なタイムアウト期間を入力します。
説明タイムアウト期間は、カスタムアクションを実行できる時間です。この期間が短すぎると、アクションが失敗する可能性があります。カスタムアクションに必要な時間を評価し、適切なタイムアウト期間を設定してください。
デフォルトの実行ポリシー
続行 を選択します。
フック中に実行されたアクション
テンプレートを以下の設定で構成します。
通知方法:OOS テンプレート を選択します。
OOS テンプレートタイプ: パブリックテンプレート を選択します。
パブリックテンプレート:ACS-ESS-LifeCycleModifyRedisIPWhitelist を選択します。
ACS-ESS-LifeCycleModifyRedisIPWhitelistの実行パラメーターを以下の設定で構成します。RedisInstanceId:ご利用の Tair インスタンスの ID を入力します。
ModifyIPWhitelistMode:
Appendを選択します。これはスケールアウトに対応し、ECS インスタンスを Tair インスタンスのホワイトリストに追加します。OOS が偽装する RAM ロール:OOSServiceRole を選択します。プロシージャでは、ECS、Auto Scaling、および Redis リソースを管理する権限が OOSServiceRole RAM ロールに追加されています。OOS サービスはこのロールを偽装して、必要な権限を取得します。
スケールアウトをトリガーします。
本チュートリアルでは、スケーリングルールを手動で実行してスケールアウトをトリガーする方法を説明します。定期タスクまたは監視タスクを使用してスケールアウトをトリガーすることもできます。
説明ライフサイクルフックは、スケーリングルールによってスケールアウトまたはスケールインがトリガーされた場合にのみ有効になります。既存の ECS インスタンスを手動で追加または削除した場合は有効になりません。
スケーリングルールとアラートタスク タブをクリックします。
スケーリングルール タブで、スケーリングルールの作成 をクリックします。
スケーリングルールのパラメーターを設定して、OK をクリックします。
以下の表にパラメーターを示します。記載されていないパラメーターはデフォルト値を使用してください。
パラメーター
説明
ルール名
Add1と入力します。ルールタイプ
シンプルスケーリングルール を選択します。
操作
Add 1 instanceに設定します。作成した
Add1スケーリングルールを見つけ、操作 列の 行う をクリックします。OK をクリックします。
スケーリングルールを実行すると、ECS インスタンスが自動的に作成されます。
ESSHookForAddRedisWhitelistライフサイクルフックにより、インスタンスの処理が一時停止され、OOS サービスに通知が送られて、ACS-ESS-LifeCycleModifyRedisIPWhitelistテンプレートで定義された操作が実行されます。
ステップ 3:Tair インスタンスのホワイトリストを確認する
Tair (Redis OSS-compatible) のコンソールにログインします。
左側のナビゲーションウィンドウで、インスタンスリスト をクリックします。
ご利用の Tair インスタンスを見つけ、インスタンス ID/名前 列でその ID をクリックします。
左側のナビゲーションウィンドウで、ホワイトリスト設定 をクリックします。
新しい ECS インスタンスのプライベート IP アドレスが Tair インスタンスのホワイトリストに表示されている場合、
ACS-ESS-LifeCycleModifyRedisIPWhitelistテンプレートが正常に実行されています。ECS インスタンスが存在するにもかかわらず、そのプライベート IP アドレスが Tair インスタンスのホワイトリストにない場合は、OOS コンソールで OOS タスクの実行ステータスを確認してください。詳細については、「(オプション)ステップ 4:OOS 実行を確認する」をご参照ください。
(オプション)ステップ 4:OOS 実行を確認する
-
OOS コンソールにログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
開始時刻で実行を検索し、操作 列の 詳細 をクリックします。
実行詳細ページで、実行情報を確認します。
たとえば、基本情報 セクションで実行 ID とステータスを確認できます。また、実行結果 セクションでタスクノードをクリックして、その詳細を確認することもできます。詳細については、「タスク実行の詳細を確認する」をご参照ください。
説明実行が失敗した場合、実行詳細ページにエラーメッセージが表示されます。
よくある質問
オーケストレーションタスクが失敗した場合は、その実行結果のエラーメッセージを参照してトラブルシューティングを行ってください。詳細については、「よくある質問」をご参照ください。
以下の表に、一般的なエラーメッセージを示します。
|
エラーメッセージ |
原因 |
解決策 |
|
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 テンプレートで指定されたリソースを管理するために必要な権限があることを確認してください。たとえば、OOS 用のサンプル権限をロールに付与できます。 |
|
LifecycleHookIdAndLifecycleActionToken.Invalid message: The specified lifecycleActionToken and LifecycleHookId you provided does not match any in process lifecycle action. |
進行中のライフサイクルアクションが期限切れまたは中止されました。 |
ライフサイクルフックのタイムアウト値を確認してください。OOS テンプレートで定義されたオーケストレーションタスクが完了するのに十分な長さであることを確認してください。 |