このトピックでは、Auto Scalingのライフサイクルフック機能とCloudOps Orchestration Service (OOS) テンプレートを組み合わせて、スケーリングイベント中にElastic Compute Service (ECS) インスタンスでのスクリプトの実行を自動化する方法について説明します。
前提条件
スケーリンググループが作成され、有効状態になります。
スクリプトが用意されます。 この例では、Linux ECSインスタンス (CentOS 7.6) にApacheを自動的にインストールするスクリプトが実行されます。
CloudOps Orchestration Service (OOS) 用にRAMロールが作成されます。 RAMロールの信頼できるエンティティはAlibaba Cloud Service、信頼できるサービスはCloudOps Orchestration Service、RAMロールはOOSテンプレートで操作を実行する権限を持っている必要があります。 詳細については、「RAMを使用してOOSに権限を付与する」をご参照ください。
説明このトピックでは、OOSServiceRole RAMロールを例として使用します。 他のロールを使用することもできます。
手順
この例では、ACS-ESS-LifeCycleRunCommandという名前のパブリックOOSテンプレートを使用して、スケールアウトイベント中にECSインスタンスで準備されたスクリプトの実行を自動化する方法を示します。 以下の手順を実行します。
ステップ1: RAMロールにOOSの権限を付与
OOSテンプレートを実行する権限が必要です。 ACS-ESS-LifeCycleRunCommandテンプレートには、O&Mタスクの実行に必要なECSおよびAuto Scalingリソースが含まれています。
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 RAMロールを見つけて、アクション列の権限付与をクリックします。
OOSが承認を完了するために引き受けるOOSServiceRole RAMロールに必要な権限を追加します。
[権限付与] パネルで、[リソーススコープ] と [ポリシー] を設定します。 設定が完了したら、[権限の付与] をクリックします。
この例で使用する設定を次の表に示します。 次の表に記載されていないパラメーターは、既定の設定にデフォルトします。
パラメーター
説明
リソーススコープ
値を [アカウント] に設定します。
ポリシー
次のカスタムポリシーを選択します: ESSHookPolicyForRunCommandポリシー。
手順2: スケールアウト目的のライフサイクルフックを作成し、スケールアウトイベントをトリガー
スケールアウト目的でライフサイクルフックを作成する場合、ライフサイクルフックが有効になったときに通知を送信をOOSテンプレートに設定する必要があります。 このようにして、準備されたスクリプトの自動実行は、スケールアウトイベント中に目的のECSインスタンスでトリガーできます。
Auto Scalingコンソールにログインします。
左側のナビゲーションウィンドウで、スケーリンググループをクリックします。
上部のナビゲーションバーで、リージョンを選択します。
目的のスケーリンググループを見つけ、次のいずれかの方法でスケーリンググループの詳細ページを開きます。
スケーリンググループ名 /ID列のスケーリンググループのIDをクリックします。
[操作] 列の [詳細] をクリックします。
ライフサイクルフックを作成します。
詳細ページの上部で、ライフサイクルフックタブをクリックします。
[ライフサイクルフックの作成] をクリックします。
ビジネス要件に基づいてパラメーターを設定し、OKをクリックします。
この例で使用する設定を次の表に示します。 次の表に記載されていないパラメーターは、既定の設定にデフォルトします。
パラメーター
説明
名前
ESSHookForRunCommandを入力します。
スケーリングアクティビティ
[スケールアウトイベント] を選択します。
タイムアウト期間
ビジネス要件に基づいてタイムアウト期間を設定します。 この例では、値を300に設定します。 単位は秒です。
説明タイムアウト期間は、インスタンスに対してカスタム操作を実行できる期間です。 タイムアウト期間がカスタム操作の実行に必要な期間よりも短い場合、操作は失敗する可能性があります。 インスタンスでカスタム操作を実行するために必要な期間を見積もり、見積もりに基づいてタイムアウト期間を設定することを推奨します。
デフォルトの実行ポリシー
[続行] を選択します。
ライフサイクルフックが有効になったときに通知を送信
テンプレートに次のパラメーターを設定します。
[OOSテンプレート] を選択します。
[パブリックテンプレート] を選択します。
ACS-ESS-LifeCycleRunCommandを選択します。
ACS-ESS-LifeCycleRunCommandパブリックテンプレートでは、次のパラメーターも設定する必要があります。
commandType: [RunShellScript] を選択します。
commandContent: 目的のECSインスタンスで実行するスクリプトを入力します。 この例では、ECSインスタンスにApacheを自動的にインストールするスクリプトが実行されます。
yum install -y httpd systemctl start httpd systemctl enable httpd
OOSAssumeRole: OOSServiceRoleを選択します。 ステップ1では、OOSServiceRoleにECSおよびAuto Scalingリソースに対する権限が付与されます。 RAMロールを引き受けた後、OOSは前述の権限を取得します。
スケールアウトイベントをトリガーします。
この例では、スケールアウトイベントは、スケーリングルールを実行することによって手動でトリガーされます。 スケジュールタスクまたはイベントトリガータスクを使用して、スケールアウトイベントをトリガーすることもできます。
説明スケーリングルールを手動で実行したときにスケーリングイベントがトリガーされると、ライフサイクルフックが有効になります。 ただし、スケーリンググループにECSインスタンスを手動で追加または削除する場合、ライフサイクルフックは有効になりません。
表示されるページの上部で、スケーリングルールとイベントトリガータスクタブをクリックします。
スケーリングルールタブで、スケーリングルールの作成をクリックします。
スケーリングルールの作成ダイアログボックスで、ビジネス要件に基づいてパラメーターを設定し、OKをクリックします。
この例で使用する設定を次の表に示します。 次の表に記載されていないパラメーターは、既定の設定にデフォルトします。
パラメーター
説明
ルール名
Add1を入力します。
ルールタイプ
[シンプルスケーリングルール] を選択します。
操作
値をAdd 1 Instancesに設定します。
スケーリングルールタブで、Add1スケーリングルールを見つけて、アクション列の実行をクリックします。
スケーリングルールの実行メッセージで、OKをクリックします。
スケーリングルールが実行されると、Auto scalingは1つのECSインスタンスをスケーリンググループに追加します。 ただし、ESSHookForRunCommandライフサイクルフックが有効であるため、ECSインスタンスは [保留中の追加] 状態になります。 ライフサイクルフックのタイムアウト期間中、Auto Scalingは、ACS-ESS-LifeCycleRunCommandパブリックテンプレートで定義されているO&Mタスクを実行するようにOOSに通知します。
自動的に作成されたECSインスタンスが期待どおりかどうかを確認します。
詳細ページの上部で、インスタンスタブをクリックします。
自動的に作成されたECSインスタンスを検索し、ECSインスタンスID /名前列でそのIDをクリックします。
左側のナビゲーションウィンドウで、クラウドアシスタントをクリックします。
右上隅で、コマンドの作成 /実行をクリックします。
次のコマンドを実行して、Apacheのインストール結果を表示します。
詳細については、「コマンドの作成と実行」をご参照ください。 コマンドの内容:
systemctl status httpd
[コマンド実行結果] タブで、コマンドの実行結果を確認できます。 ApacheがECSインスタンスにインストールされ、Active状態になった場合、ACS-ESS-LifeCycleRunCommandパブリックテンプレートが有効になります。
ECSインスタンスが作成されているが、ApacheがECSインスタンスにインストールされていない場合は、OOSコンソールに移動してO&Mタスクの実行を確認できます。 詳細については、「手順3 :( オプション) OOS実行の表示」をご参照ください。
ステップ3: (オプション) OOS実行の表示
よくある質問
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タスクが割り当てられた制限時間内に完了できることを確認します。 |
関連ドキュメント
スケーリンググループにすでに追加されているECSインスタンスでスクリプトを実行する場合は、ローリング更新機能を使用できます。 詳細については、以下のトピックをご参照ください。