このチュートリアルでは、Auto Scaling のライフサイクルフックを使用して ECS インスタンスを一時停止し、CloudOps Orchestration Service (OOS) テンプレートを使用してスケーリングアクティビティ中にインスタンスでスクリプトを自動的に実行する方法について説明します。
前提条件
-
スケーリンググループが作成され、有効になっています。
-
スクリプトが用意されていること。このチュートリアルでは、CentOS 7.6 Linux インスタンスに Apache をインストールするスクリプトを例として使用します。
-
CloudOps Orchestration Service (OOS) 用の RAM ロールを作成する必要があります。この RAM ロールは、エンティティとして Alibaba Cloud サービス を、信頼できるサービスとして CloudOps Orchestration Service を信頼する必要があります。また、このロールには OOS テンプレートを実行する権限も付与されている必要があります。詳細については、「OOS 用の RAM ロールを作成して権限を付与する」をご参照ください。
説明このトピックでは、OOSServiceRole RAM ロールを例として使用します。カスタム RAM ロールを使用することも可能です。
操作手順
このチュートリアルでは、ACS-ESS-LifeCycleRunCommand パブリック OOS テンプレートを使用して、スケールアウトイベント中に ECS インスタンスでスクリプトを自動的に実行する方法を説明します。
ステップ1:OOS RAM ロールの権限設定
ACS-ESS-LifeCycleRunCommand テンプレートには、ECS および Auto Scaling リソースで操作を実行するための権限が必要です。これらの権限を、OOS が引き受ける RAM ロールに付与する必要があります。
-
RAM コンソールにログインします。
-
ポリシーを作成します。
-
左側のナビゲーションウィンドウで、 を選択します。
-
ポリシーの作成 をクリックします。
-
ポリシーの作成 ページで、[JSON] タブをクリックしてパラメーターを設定し、OK をクリックします。
次の表に、このチュートリアルで使用するパラメーターを示します。その他のパラメーターはデフォルト値を使用します。
パラメーター
説明
[名前]
ESSHookPolicyForRunCommand と入力します。
[ポリシードキュメント]
次の内容を入力します:
{ "Version": "1", "Statement": [ { "Action": [ "ecs:DescribeInvocationResults", "ecs:DescribeInvocations", "ecs:RunCommand" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ess:CompleteLifecycleAction" ], "Resource": "*", "Effect": "Allow" } ] }
-
-
ポリシーを OOSServiceRole RAM ロールにアタッチします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
OOSServiceRole を見つけて、操作 列の 権限の付与 をクリックします。
OOS が偽装する OOSServiceRole RAM ロールに必要な権限を付与します。これにより、権限付与が完了します。
-
権限の付与 ページで、リソース範囲と権限を指定し、[OK] をクリックします。
次の表に、このチュートリアルで使用するパラメーターを示します。その他のパラメーターはデフォルト値を使用します。
パラメーター
説明
[リソース範囲]
[アカウント] を選択します。
[権限ポリシー]
カスタムポリシー ESSHookPolicyForRunCommand を追加します。
-
ステップ2:スケールアウトイベント用のライフサイクルフックの作成
ライフサイクルフックを作成する際に、OOS テンプレートを使用するように設定します。これにより、スケールアウトイベントがトリガーされたときにスクリプトが自動的に実行されます。
Auto Scalingコンソールにログインします。
左側のナビゲーションウィンドウで、スケーリンググループをクリックします。
上部のナビゲーションバーで、リージョンを選択します。
目的のスケーリンググループを見つけ、次のいずれかの方法でスケーリンググループの詳細ページを開きます。
スケーリンググループ名 /ID列のスケーリンググループのIDをクリックします。
[操作] 列の [詳細] をクリックします。
-
スケールアウトイベント用のライフサイクルフックを作成します。
詳細ページの上部で、ライフサイクルフックタブをクリックします。
-
ライフサイクルフックの作成 をクリックします。
-
ライフサイクルフックのパラメーターを設定し、OK をクリックします。
次の表に、このチュートリアルで使用するパラメーターを示します。その他のパラメーターはデフォルト値を使用します。
パラメーター
説明
[名前]
ESSHookForRunCommand と入力します。
[スケーリングアクティビティタイプ]
スケールアウト を選択します。
[タイムアウト時間]
タイムアウト期間 (例:300 秒) を入力します。
説明タイムアウトは、カスタム操作を実行できる時間を指定します。タイムアウトが短すぎると、操作が失敗する可能性があります。カスタム操作に必要な時間を評価し、適切なタイムアウトを設定してください。
[デフォルトの実行ポリシー]
続行 を選択します。
[フック中に実行されたアクション]
次のようにテンプレートを設定します:
-
通知方法:OOS テンプレート を選択します。
-
OOS テンプレートタイプ:パブリックテンプレート を選択します。
-
パブリックテンプレート:ACS-ESS-LifeCycleRunCommand を選択します。
次のように ACS-ESS-LifeCycleRunCommand の実行パラメーターを設定します:
-
[commandType]:RunShellScript を選択します。
-
[commandContent]:実行するスクリプトを入力します。このチュートリアルでは、Apache を自動的にインストールするスクリプトを例として使用します。
yum install -y httpd systemctl start httpd systemctl enable httpd -
[OOSAssumeRole]:OOSServiceRole を選択します。「操作手順」セクションで、ECS および Auto Scaling リソースを管理するための権限をこのロールに付与しました。OOS はこの RAM ロールを引き受けて、これらの権限を取得します。
-
-
スケールアウトイベントをトリガーします。
このチュートリアルでは、手動で実行されるスケーリングルールを例として使用します。スケジュールタスクまたはイベントトリガー型タスクでスケールアウトイベントをトリガーすることもできます。
説明ライフサイクルフックはスケーリングルールによってトリガーされますが、スケーリンググループへの ECS インスタンスの手動での追加または削除ではトリガーされません。
-
スケーリンググループの詳細ページで、スケーリングルールとアラートタスク タブをクリックします。
-
スケーリングルール タブで、スケーリングルールの作成 をクリックします。
-
スケーリングルールのパラメーターを設定し、OK をクリックします。
次の表に、このチュートリアルで使用するパラメーターを示します。その他のパラメーターはデフォルト値を使用します。
パラメーター
説明
[ルール名]
Add1 と入力します。
[ルールタイプ]
シンプルスケーリングルール を選択します。
[操作]
1 個のインスタンスを追加するように設定します。
-
スケーリングルールリストで Add1 ルールを見つけ、操作 列の 曜日に一回実行 をクリックします。
-
OK をクリックします。
スケーリングルールが実行されると、ECS インスタンスが自動的に作成されます。ESSHookForRunCommand ライフサイクルフックがスケーリンググループに存在するため、新しいインスタンスは待機状態になります。その後、OOS に通知され、ACS-ESS-LifeCycleRunCommand テンプレートで定義された操作が実行されます。
-
-
自動的に作成された ECS インスタンスが正しく設定されていることを確認します。
詳細ページの上部で、インスタンスタブをクリックします。
-
自動的に作成された ECS インスタンスを見つけ、ECS インスタンス ID/名前 列のインスタンス ID をクリックします。
-
左側のナビゲーションペインで、[クラウドアシスタント] をクリックします。
-
ページの右上隅にある [コマンドの作成/実行] をクリックします。
-
次のコマンドを実行して、Apache のインストールステータスを確認します。
詳細については、「コマンドの作成と実行」をご参照ください。コマンドの内容は次のとおりです:
systemctl status httpd-
[コマンドの実行結果] タブで、実行の詳細を表示します。結果に Apache サービスがインストールされ、ステータスが active と表示されている場合、ACS-ESS-LifeCycleRunCommand テンプレートの [commandContent] パラメーター内のスクリプトは正常に実行されました。
-
ECS インスタンスは作成されたが、Apache の自動インストールに失敗した場合は、OOS コンソールに移動してタスクの実行詳細を表示します。詳細については、「(オプション) ステップ3:OOS の実行詳細の表示」をご参照ください。
-
(オプション) ステップ3: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 テンプレートで定義されたオーケストレーションタスクが完了するのに十分な長さに設定されていることを確認してください。 |
関連ドキュメント
スケーリンググループ内の既存の ECS インスタンスでスクリプトを実行するには、ローリングアップデート機能を使用します。詳細については、次のトピックをご参照ください: