EventBridge での Amazon EC2 Auto Scaling の使用 - Amazon EC2 Auto Scaling (日本語)

EventBridge での Amazon EC2 Auto Scaling の使用

Amazon EventBridge は、以前はCloudWatch Eventsと呼ばれていましたが、リソースをモニタリングし、他の AWS のサービスを使用するターゲットアクションを起動するための、イベント駆動型のルールを設定に役立ちます。

Amazon EC2 Auto Scaling からのイベントは、ほぼリアルタイムに EventBridge に提供されます。さまざまなイベントに応じてプログラムによるアクションや通知をトリガーする EventBridge ルールを設定できます。例えば、インスタンスが起動中または終了中の間に、AWS Lambda関数をトリガーにして、事前に設定されたタスクを実行します。または、Amazon SNS トピックへの通知をトリガーして、インスタンスの更新の進行状況をモニタリングし、特定のチェックポイントで検証を実行することもできます。

Lambda 関数の呼び出しと Amazon SNS トピックの通知に加えて、EventBridge は、Amazon Kinesis Streamsへのイベントの中継、AWS Step Functionsステートマシンを起動、AWSSystems Manager run commandを呼び出しなど、他のタイプのターゲットやアクションもサポートしています。詳細については、[Amazon EventBridge ユーザーガイド] の [Amazon EventBridge ターゲット] を参照してください 。

EventBridge の詳細については、[Amazon EventBridge ユーザーガイド] の [Amazon EventBridge の開始方法] を参照してください 。Amazon EC2 Auto Scaling API コールでトリガーするルールを作成することもできます。詳細については、Amazon EventBridge ユーザーガイドの [ AWS CloudTrailを使用して AWS API コールでトリガーする EventBridge ルールの作成] を参照してください。

Auto Scaling イベント

以下に、Amazon EC2 Auto Scaling のイベントの例を示します。イベントは、ベストエフォートベースで出力されます。

ウォームプールを使用する際にAmazon EC2 Auto Scaling から EventBridge に配信されるイベントの例については、ウォームプールイベントを参照してください。

スポットインスタンスの中断イベントの例については、[Linux インスタンス用 Amazon EC2 ユーザーガイド] の [スポットインスタンスの中断の通知] を参照してください。

EC2 インスタンス起動のライフサイクルアクション

ライフサイクルフックにより、Amazon EC2 Auto Scaling がインスタンスを Pending:Wait 状態に移動しました。

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance-launch Lifecycle Action", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "LifecycleActionToken": "87654321-4321-4321-4321-210987654321", "AutoScalingGroupName": "my-asg", "LifecycleHookName": "my-lifecycle-hook", "EC2InstanceId": "i-1234567890abcdef0", "LifecycleTransition": "autoscaling:EC2_INSTANCE_LAUNCHING", "NotificationMetadata": "additional-info" } }

EC2 インスタンスの起動に成功

Amazon EC2 Auto Scaling によりインスタンスが正常に起動されました。

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "InProgress", "Description": "Launching a new EC2 instance: i-12345678", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text" } }

EC2 インスタンスの起動に失敗

Amazon EC2 Auto Scaling: インスタンスの起動に失敗しました

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Launch Unsuccessful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "Failed", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "message-text", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text" } }

EC2 インスタンス終了のライフサイクルアクション

ライフサイクルフックにより、Amazon EC2 Auto Scaling がインスタンスを Terminating:Wait 状態に移動しました。

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance-terminate Lifecycle Action", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "LifecycleActionToken":"87654321-4321-4321-4321-210987654321", "AutoScalingGroupName":"my-asg", "LifecycleHookName":"my-lifecycle-hook", "EC2InstanceId":"i-1234567890abcdef0", "LifecycleTransition":"autoscaling:EC2_INSTANCE_TERMINATING", "NotificationMetadata":"additional-info" } }

EC2 インスタンスの終了に成功

Amazon EC2 Auto Scaling によりインスタンスが正常に終了しました。

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Terminate Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "InProgress", "Description": "Terminating EC2 instance: i-12345678", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text" } }

EC2 インスタンスの終了に失敗

Amazon EC2 Auto Scaling: インスタンスの終了に失敗しました

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Instance Terminate Unsuccessful", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn", "instance-arn" ], "detail": { "StatusCode": "Failed", "AutoScalingGroupName": "my-auto-scaling-group", "ActivityId": "87654321-4321-4321-4321-210987654321", "Details": { "Availability Zone": "us-west-2b", "Subnet ID": "subnet-12345678" }, "RequestId": "12345678-1234-1234-1234-123456789012", "StatusMessage": "message-text", "EndTime": "yyyy-mm-ddThh:mm:ssZ", "EC2InstanceId": "i-1234567890abcdef0", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "Cause": "description-text" } }

EC2 Auto Scaling インスタンスの更新チェックポイントに到達しました

インスタンスの更新中、Amazon EC2 Auto Scaling は、置き換えられたインスタンスの数がチェックポイントに対して定義されたパーセンテージのしきい値に達すると、イベントを発行します。

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Checkpoint Reached", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "ab00cf8f-9126-4f3c-8010-dbb8cad6fb86", "AutoScalingGroupName": "my-auto-scaling-group", "CheckpointPercentage": "50", "CheckpointDelay": "300" } }

EC2 Auto Scaling インスタンスの更新がスタートしました

Amazon EC2 Auto Scaling は、インスタンスの更新のステータスがInProgressに変わった時にイベントを発行します。

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Started", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "c613620e-07e2-4ed2-a9e2-ef8258911ade", "AutoScalingGroupName": "my-auto-scaling-group" } }

EC2 Auto Scaling インスタンスの更新に成功しました

Amazon EC2 Auto Scaling は、インスタンスの更新のステータスがSucceededに変わった時にイベントを発行します。

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Succeeded", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "c613620e-07e2-4ed2-a9e2-ef8258911ade", "AutoScalingGroupName": "my-auto-scaling-group" } }

EC2 Auto Scaling インスタンスの更新に失敗しました

Amazon EC2 Auto Scaling は、インスタンスの更新のステータスがFailedに変わった時にイベントを発行します。

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Failed", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "c613620e-07e2-4ed2-a9e2-ef8258911ade", "AutoScalingGroupName": "my-auto-scaling-group" } }

EC2 Auto Scaling インスタンスの更新がキャンセルされました

Amazon EC2 Auto Scaling は、インスタンスの更新のステータスがCancelledに変わった時にイベントを発行します。

イベントデータ

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "12345678-1234-1234-1234-123456789012", "detail-type": "EC2 Auto Scaling Instance Refresh Cancelled", "source": "aws.autoscaling", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-west-2", "resources": [ "auto-scaling-group-arn" ], "detail": { "InstanceRefreshId": "c613620e-07e2-4ed2-a9e2-ef8258911ade", "AutoScalingGroupName": "my-auto-scaling-group" } }

AWS Lambdaを使用してイベントを処理する

AWS Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行するために使用できるコンピューティングサービスです。コードをパッケージ化し、[Lambda 関数] としてAWS Lambdaにアップロードします。関数が呼び出されるとAWS Lambdaは関数を実行します。関数は、ユーザーが手動で呼び出したり、イベントに応答して自動的に呼び出したり、またはアプリケーションやサービスからのリクエストに応答したりすることができます。

Lambda の使用をスタートするにあたり、以下の手順に従ってください。このセクションでは、すべてのインスタンスの起動イベントと終了イベントを Amazon CloudWatch Logs ログに記録するLambda 関数と EventBridge ルールを作成する方法について説明します。

Lambda 関数の作成

以下の手順で、イベントの対象となる [Hello World] 設計図を使用して Lambda 関数を作成します。

Lambda 関数を作成するには

  1. AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

  2. Lambda を初めて利用する場合は、ようこそページを参照して [Get Started Now (今すぐスタートする)] を選択するか、[Lambda 関数の作成] を選択します。

  3. [設計図の選択] ページで、[フィルター] に hello-world を入力し、[hello-world] 設計図を選択します。

  4. [トリガーを設定する] ページで、[次へ] を選択します。

  5. [関数を設定する] ページで、以下の作業を行います。

    1. Lambda 関数の名前と説明を入力します。

    2. Lambda 関数のコードを編集します。例えば、次のコードでは、単にイベントだけをログに記録します。

      console.log('Loading function'); exports.handler = function(event, context) { console.log("AutoScalingEvent()"); console.log("Event data:\n" + JSON.stringify(event, null, 4)); context.succeed("..."); };
    3. [ロール] で、[Choose an existing role] を選択します。[既存のロール] で基本的な実行ロールを選択します。それ以外の場合は、新しいベーシックな実行ロールを作成します。

    4. (オプション) [Advanced settings ( アドバンスト設定 ) ] で、必要な変更を加えます。

    5. [Next] を選択します。

  6. [Review] ページで、[Create function] を選択します。

Lambda 関数にイベントをルートするには

選択したイベントを照合し、Lambda 関数にルーティングしてアクションを実行するためのルールを作成します。

Lambda 関数にイベントをルーティングするルールを作成するには

  1. Amazon EventBridge コンソール (https://console.aws.amazon.com/events/) を開きます。

  2. ナビゲーションペインの [イベント] で、[ルール] を選択します。

  3. [ルールの作成] を選択します。

  4. ルールの名前と説明を入力します。

  5. [Define pattern (パターンの定義)] で、以下の操作を行います。

    1. [Event Pattern] を選択します。

    2. [Event matching pattern (イベント照合パターン)] で、[Pre-defined by service (サービスごとの事前定義)] を選択します。

      ヒント

      カスタムイベントパターンを使用して、Amazon EC2 Auto Scaling イベントのサブセットのみを検出して処理するルールを作成することもできます。このサブセットは、Amazon EC2 Auto Scaling がイベントに含める特定のフィールドに基づいて作成できます。詳細については、[Amazon EventBridge ユーザーガイド] の [Event Patterns] を参照してください。イベントパターンの例については、ライフサイクルフックのチュートリアルのステップ 3: EventBridge ルールを作成するを参照してください。

    3. [Service provider (サービスプロバイダー)] で、[Amazon Web Services (アマゾンウェブサービス)] を選択します。

    4. [サービス名] で、[Auto Scaling] を選択します。

    5. [イベントタイプ] で、[インスタンスの起動と終了] を選択します。

    6. すべての成功と失敗のインスタンスの起動と終了イベントを収集するには、[任意のインスタンスイベント] を選択します。

    7. デフォルトでは、このルールはリージョン内のすべての Auto Scaling グループと一致します。ルールを特定の Auto Scaling グループに一致させるには、[Specific group name (特定のグループ名)] を選択して一つ以上の Auto Scaling グループを選択します。

  6. [Select event bus (イベントバスを選択)] で、[AWS default event bus (AWSデフォルトイベントバス)] を選択します。アカウントの AWS サービスがイベントを発行すると、常にアカウントのデフォルトのイベントバスに移動します。

  7. [ターゲット] で、[Lambda 関数] を選択します。

  8. [関数] で、作成した Lambda 関数を選択します。

  9. [作成] を選択します。

ルールをテストするには、Auto Scaling グループのサイズを変更します。Lambda 関数にサンプル コードを使用する場合は、イベントを CloudWatch Logs に記録します。

ルールをテストするには

  1. Amazon EC2 Auto Scaling コンソール (https://console.aws.amazon.com/ec2autoscaling/) を開きます。

  2. [詳細] タブで、ページの右側にある [編集] を選択します。

  3. [希望する容量] の値を変更して、[保存] を選択します。

  4. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  5. ナビゲーションペインで [ログ] を選択します。

  6. Lambda 関数のロググループを選択します (例: /aws/lambda/my-function)。

  7. イベントデータを表示するログ ストリーミングを選択します。以下のようなデータが表示されます。

    
                            Amazon EC2 Auto Scaling のイベントデータを CloudWatch Logs に表示します。

以下の資料も参照してください。

EventBridge および Amazon EC2 Auto Scaling の使用方法の詳細については、インスタンスの更新イベントの EventBridge ルールの作成およびウォームプールイベント用の EventBridge ルールの作成を参照してください。

ライフサイクルアクションを実行する Lambda 関数を作成する方法を示すステップバイステップ チュートリアルについては、チュートリアル:Lambda 関数を呼び出すライフサイクルフックの設定を参照してください。このチュートリアルでは、ライフサイクルフックの開始方法について説明します。ライフサイクルフックを使用すると、Lambda を使用して、インスタンスがサービスに入る前、またはインスタンスが終了する前にインスタンスに対してタスクを実行できます。