Auto Scaling グループのスケール時に Amazon SNS 通知を受け取る - Amazon EC2 Auto Scaling

Auto Scaling グループのスケール時に Amazon SNS 通知を受け取る

Amazon EC2 Auto Scaling が Auto Scalingグループ内の EC2 インスタンスを起動または終了するときに通知を受け取ることができます。Amazon Simple Notification Service (Amazon SNS) を使用して、通知を管理します。

Amazon SNS は、サブスクライブしているクライアントまたはエンドポイントへの通知の配信または送信を調整し、管理します。Amazon SNS はさまざまな通知オプションを提供し、これには HTTP POST や HTTPS POST、E メール (SMTP、プレーンテキストか JSON 形式)、またはこれらの通知をプログラム的に処理できるようにする Amazon SQS キューに投稿されたメッセージとして通知を配信する機能が含まれます。詳細については、「Amazon Simple Notification Service デベロッパーガイド」を参照してください。

例えば、autoscaling: EC2_INSTANCE_TERMINATE 通知タイプを使用するように Auto Scaling グループを設定する場合、Auto Scaling グループがインスタンスを終了すると、E メール通知が送信されます。この E メールには、インスタンス ID やインスタンスを終了した理由など、終了したインスタンスの詳細が含まれます。

通知はイベント駆動型のアプリケーションの設計に便利です。リソースが望ましい状態になったことを確認するために通知を使用する場合は、ポーリングを排除することができ、ポーリングが原因で発生することがある RequestLimitExceeded エラーが発生しなくなります。

AWS は、通知の送信に使用できるさまざまなツールを提供します。別の方法として、Auto Scaling グループがインスタンスを起動または終了するときに通知を送信するために、EventBridge と Amazon SNS を使用することもできます。EventBridge では、通知を受けるイベントをルールで記述します。Amazon SNS では、受け取る通知の種類をトピックで記述します。このオプションを使用することで、特定のイベントが代わりに Lambda 関数をトリガーするべきかどうかを決定できます。詳細については、「Auto Scaling イベントの処理に EventBridge を使用する」を参照してください。

SNS 通知

Amazon EC2 Auto Scaling は、以下のイベントが発生したときの Amazon SNS 通知の送信をサポートしています。

イベント 説明

autoscaling:EC2_INSTANCE_LAUNCH

インスタンスの起動成功

autoscaling:EC2_INSTANCE_LAUNCH_ERROR

インスタンスの起動失敗

autoscaling:EC2_INSTANCE_TERMINATE

インスタンスの削除成功

autoscaling:EC2_INSTANCE_TERMINATE_ERROR

インスタンスの削除失敗

メッセージには、次に示す情報が含まれます。

  • Event – イベント。

  • AccountId - アマゾン ウェブ サービスアカウント ID

  • AutoScalingGroupName - Auto Scaling グループの名前。

  • AutoScalingGroupARN – Auto Scaling グループの ARN。

  • EC2InstanceId - EC2 インスタンスの ID。

例えば、以下のようになります。

Service: AWS Auto Scaling Time: 2016-09-30T19:00:36.414Z RequestId: 4e6156f4-a9e2-4bda-a7fd-33f2ae528958 Event: autoscaling:EC2_INSTANCE_LAUNCH AccountId: 123456789012 AutoScalingGroupName: my-asg AutoScalingGroupARN: arn:aws:autoscaling:region:123456789012:autoScalingGroup... ActivityId: 4e6156f4-a9e2-4bda-a7fd-33f2ae528958 Description: Launching a new EC2 instance: i-0598c7d356eba48d7 Cause: At 2016-09-30T18:59:38Z a user request update of AutoScalingGroup constraints to ... StartTime: 2016-09-30T19:00:04.445Z EndTime: 2016-09-30T19:00:36.414Z StatusCode: InProgress StatusMessage: Progress: 50 EC2InstanceId: i-0598c7d356eba48d7 Details: {"Subnet ID":"subnet-id","Availability Zone":"zone"}

Amazon EC2 Auto Scaling の Amazon SNS 通知を設定する

Amazon SNS を使用して E メール通知を送信するには、最初にトピックを作成してから、そのトピックと共に E メールアドレスを登録する必要があります。

Amazon SNS トピックを作成する

SNS トピックとは、論理アクセスポイント、つまり Auto Scaling グループが通知を送信するために使用する通信チャネルです。トピックの名前を指定することにより、トピックを作成します。

トピック名を作成する際には、名前が次の要件を満たしている必要があります。

  • 1 ~ 256 文字

  • 大文字および小文字の ASCII 文字、数字、アンダースコア、またはハイフンが含まれている

詳細については、Amazon Simple 通知サービス デベロッパーガイドの「Amazon SNS トピックの作成」を参照してください。

Amazon SNS トピックを購読します。

Auto Scaling グループがトピックに送信した通知を受信するには、そのトピックにエンドポイントを登録する必要があります。この手順では、エンドポイント に、Amazon EC2 Auto Scaling からの通知を受信する E メールアドレスを指定します。

詳細については、Amazon Simple 通知サービス デベロッパーガイドの「Amazon SNS トピックへのサブスクライブ」を参照してください。

Amazon SNS サブスクリプションを確認する

Amazon SNS は、前のステップで指定した E メールアドレスに確認メールを送信します。

次のステップに進む前に、AWS Notifications からの E メールを開き、リンクを選択してサブスクリプションを確認するようにしてください。

AWSからの確認メッセージが届きます。Amazon SNS は、通知を受信し、通知を E メールとして指定された E メールアドレスに送信するように設定されました。

通知を送信するように Auto Scaling グループを設定する

Auto Scaling グループは、インスタンスの起動または終了などのスケーリングイベントが発生したときに Amazon SNS に通知を送信するように設定することができます。Amazon SNS は、インスタンスに関する情報が含まれた通知を、ユーザーが指定する E メールアドレスに送信します。

Auto Scaling グループの Amazon SNS 通知を設定する (コンソール)

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

  2. Auto Scaling グループの隣にあるチェックボックスを選択します。

    ページ下部に分割ウィンドウが開き、選択したグループの情報が表示されます。

  3. [Activity] (アクティビティ) タブで、[Activity notifications] (アクティビティ通知)、[Create notification] (通知の作成) の順に選択します。

  4. [Create notifications] ペインで、以下の作業を行います。

    1. [SNS Topic] (SNS トピック) で、SNS トピックを選択します。

    2. [Event types] (イベントタイプ) で、通知を送信するイベントを選択します。

    3. [Create] を選択します。

Auto Scaling グループの Amazon SNS 通知を設定する (AWS CLI)

以下の put-notification-configuration コマンドを使用します。

aws autoscaling put-notification-configuration --auto-scaling-group-name my-asg --topic-arn arn --notification-types "autoscaling:EC2_INSTANCE_LAUNCH" "autoscaling:EC2_INSTANCE_TERMINATE"

通知をテストする

起動イベントの通知を生成するには、Auto Scaling グループの希望容量を 1 増やして、Auto Scaling グループを更新します。インスタンスを起動してから数分以内に通知を受け取ります。

希望する容量を変更するには (コンソール)

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

  2. Auto Scaling グループの横にあるチェックボックスを選択します。

    [Auto Scaling グループ] ページの下部に分割ペインが開き、選択したグループに関する情報が表示されます。

  3. [詳細] タブで、[グループの詳細]、[編集] の順に選択します。

  4. [Desired capacity (希望するキャパシティー)] の場合は、現在の値を 1 ずつ増やします。この値が [Maximum capacity (最大容量)] を超える場合は、[Maximum capacity (最大容量)] の値を 1 ずつ増やす必要があります。

  5. [Update] (アップデート) を選択します。

  6. 数分後、イベントの通知が届きます。このテスト用に起動した追加のインスタンスが必要なくなった場合は、[Desired capacity (希望する容量)] を 1 減らすことができます。数分後、イベントの通知が届きます。

通知設定を削除する

Amazon EC2 Auto Scaling 通知設定が使用されなくなった場合は、設定を削除できます。

Amazon EC2 Auto Scaling 通知設定を削除する (コンソール)

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

  2. Auto Scaling スケーリンググループを選択します。

  3. [Activity] (アクティビティ) タブで、削除する通知の横にあるチェックボックスをオンにしてから、[Actions] (アクション)、[Delete] (削除) の順に選択します。

Amazon EC2 Auto Scaling 通知設定を削除する (AWS CLI)

次の delete-notification-configuration コマンドを使用します。

aws autoscaling delete-notification-configuration --auto-scaling-group-name my-asg --topic-arn arn

Auto Scaling グループに関連付けられている Amazon SNS トピックとすべてのサブスクリプションの削除については、「Amazon Simple Notification Service デベロッパーガイド」の「Amazon SNS サブスクリプションおよびトピックを削除する」を参照してください。