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 ストリームへのイベントのリレー、AWS Step Functionsステートマシンを起動し、AWSSystems Manager は、コマンドを実行します。サポートされるターゲットについては、を参照してください。Amazon EventBridge ターゲット()Amazon EventBridge ユーザーガイド

EventBridge の詳細については、を参照してください。Amazon EventBridge の開始方法()Amazon EventBridge ユーザーガイド。Amazon EC2 Auto Scaling API 呼び出しでトリガーするルールを作成することもできます。詳細については、「」を参照してください。でトリガーする EventBridge ルールの作成AWSを使用して API 呼び出しAWS CloudTrail()Amazon 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 はサーバーをプロビジョニングしたり管理しなくてもコードを実行するために使用できるコンピューティングサービスです。コードをパッケージ化し、AWS LambdaとしてLambda 関数。AWS Lambda関数が呼び出されると関数が実行されます。関数は、ユーザーが手動で呼び出したり、イベントに応答して自動的に呼び出したり、アプリケーションやサービスからのリクエストに応答したりすることができます。

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

Lambda 関数の作成

Lambda 関数を作成するには、以下の手順を使用します。hello-world設計図を使用して、イベントのターゲットとして機能します。

Lambda 関数を作成するには

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

  2. Lambda を初めて使用する場合は、ウェルカムページを参照してください。今すぐ開始方法を選択します。それ以外の場合は、Lambda 関数の作成

  3. リポジトリの [][] 設計図の選択ページで、hello-worldforフィルタ[] を選択してから、hello-world設計図。

  4. [Configure triggers] ページで、[Next] を選択します。

  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. [Role] で、[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. [Create rule] を選択します。

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

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

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

    2. を使用する場合イベントマッチングパターン] で、サービスによる定義済みパターン

      ヒント

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

    3. を使用する場合サービスプロバイダー] で、アマゾンウェブサービス

    4. [サービス名] で、[自動スケーリング] を選択します。

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

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

    7. デフォルトでは、このルールはリージョン内のすべての Amazon EC2 Auto Scaling グループと一致します。ルールが特定の Auto Scaling グループと一致するようにするには、特定のグループ名1 つ以上の 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. ナビゲーションペインで [Logs] を選択します。

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

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

    
                            CloudWatch Logs での Amazon EC2 Auto Scaling のイベントデータの表示。

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

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

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