AWS Health のイベントに応答して EC2 インスタンスでオペレーションを自動的に実行する - AWS Health

AWS Health のイベントに応答して EC2 インスタンスでオペレーションを自動的に実行する

Amazon EC2 インスタンスに対してスケジュールされたイベントに対応するアクションを自動化することができます。AWS Health が AWS アカウントにイベントを送信すると、EventBridge ルールがターゲット (AWS Systems Manager オートメーションドキュメントなど) を呼び出して、アクションの自動化をユーザーに代わって実行します。

例えば、Amazon EC2 インスタンスの使用停止イベントが Amazon Elastic Block Store (Amazon EBS)-backed EC2 インスタンスに対してスケジュールされている場合、AWS Health が AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED イベントタイプを AWS Health Dashboard に送信します。ルールでこのイベントタイプが検出されると、インスタンスの停止と開始を自動化できます。この方法では、これらのアクションを手動で実行する必要はありません。

注記

Amazon EC2 インスタンスに対するアクションを自動化するには、そのインスタンスが Systems Manager によって管理されている必要があります。

詳細については、「Amazon EC2 ユーザーガイド」の「EventBridge で Amazon EC2 を自動化する」を参照してください。

前提条件

ルールを作成する前に、AWS Identity and Access Management (IAM) ポリシーと IAM ロールを作成して、ロールの信頼ポリシーを更新しておく必要があります。

ロール用のカスタマー管理ポリシーを作成するには、次の手順に従います。このポリシーは、ユーザーに代わってアクションを実行するためのロールアクセス許可を付与します。この手順では、IAM コンソールの JSON ポリシーエディタを使用します。

IAM ポリシーを作成するには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで、[ポリシー] を選択します。

  3. [ポリシーの作成] を選択します。

  4. [JSON] タブを選択します。

  5. 次の JSON をコピーし、エディタでデフォルトの JSON を置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:DescribeInstanceStatus" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "ssm:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "arn:aws:sns:*:*:Automation*" ] }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::123456789012:role/AutomationEVRole" } ] }
    1. Resource パラメータで、Amazon リソース名 (ARN) として自分の AWS アカウント ID を入力します。

    2. ロール名を置き換えることも、デフォルトを使用することもできます。この例は AutomationEVRole を使用します。

  6. [Next: Tags] (次へ: タグ) を選択します。

  7. (オプション) キーバリューペアとしてのタグを使用して、メタデータをポリシーに追加することができます。

  8. [次へ: レビュー] を選択します。

  9. [Review policy] (ポリシーの確認) ページで、AutomationEVRolePolicy などの [Name] (名前) と、オプションの [Description] (説明) を入力します。

  10. [Summary] (概要) ページで、ポリシーが許容する許可を確認します。ポリシーが適切であれば、[Create policy] (ポリシーの作成) を選択します。

このポリシーによって、このロールが実行できるアクションが定義されます。詳細については、IAM ユーザーガイドのIAM ポリシーの作成 (コンソール) を参照してください。

このポリシーを作成したら、IAM ロールを作成し、そのロールにポリシーをアタッチする必要があります。

AWS サービスのロールを作成するには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles] (ロール) を選択してから、[Create role] (ロールを作成する) を選択します。

  3. 信頼できるエンティティの種類の選択 で、AWS サービス を選択します。

  4. このロールを引き受けることを許可するサービスに [EC2] を選択します。

  5. [Next: Permissions] (次へ: アクセス許可) を選択します。

  6. 作成したポリシー名 (AutomationEVRolePolicy など) を入力してから、そのポリシーの横にあるチェックボックスをオンにします。

  7. [次へ: タグ] を選択します。

  8. (オプション) キーと値のペアとしてタグを使用し、メタデータをロールに追加できます。

  9. [次へ: レビュー] を選択します。

  10. [Role name] (ロール名) には AutomationEVRole を入力します。この名前は、作成した IAM ポリシーの ARN に表示される名前と同じものにする必要があります。

  11. (オプション) [Role description] (ロールの説明) に、ロールの説明を入力します。

  12. ロール情報を確認し、ロールの作成 を選択します。

詳細については、IAM ユーザーガイドの AWS のサービス用ロールの作成を参照してください。

最後に、作成したロールの信頼ポリシーを更新できます。この手順を完了して、EventBridge コンソールでこのロールを選択できるようにする必要があります。

ロールの信頼ポリシーを更新するには
  1. AWS Management Console にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで Roles (ロール) を選択します。

  3. AWS アカウントのロールのリストで、作成したロールの名前 (AutomationEVRole など) を選択します。

  4. [Trust relationships] タブを選択し、続いて [Edit trust relationship] を選択します。

  5. [Policy Document] (ポリシードキュメント) には、以下の JSON をコピーし、デフォルトポリシーを削除して、その代わりにコピーした JSON を貼り付けます。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ssm.amazonaws.com", "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  6. 信頼ポリシーの更新 を選択します。

詳細については、IAM ユーザーガイドのロールの信頼ポリシーの変更 (コンソール) を参照してください。

EventBridge のルールを作成する

EventBridge コンソールでこの手順を実行してルールを作成し、使用停止がスケジュールされている EC2 インスタンスの停止と起動を自動化できるようにします。

Systems Manager 自動アクションのための EventBridge のルールを作成する
  1. Amazon EventBridge コンソール (https://console.aws.amazon.com/events/) を開きます。

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

  3. [Create rule] (ルールの作成) ページで、ルールの [Name] (名前) と [Description] (説明) を入力します。

  4. [Define pattern] (パターンの定義) で、[Event pattern] (イベントパターン) を選択してから、[Pre-defined pattern by service] (サービスごとに事前定義されたパターン) を選択します。

  5. [Service provider (サービスプロバイダー)] で、「AWS」を選択します。

  6. [Service name] (サービス名) には [Health] を選択します。

  7. [Event type] (イベントタイプ) には [Specific Health events] (特定の Health イベント) を選択します。

  8. [Specific service(s)] (特定のサービス) を選択し、[EC2] を選択します。

  9. [Specific event type category(s)] (特定のイベントタイプのカテゴリ) を選択し、[scheduledChange] を選択します。

  10. [Specific event types code(s)] (特定のイベントタイプのコード) を選択し、イベントタイプのコードを選択します。

    例えば、Amazon EC2 EBS-backed インスタンスの場合、AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED を選択します。Amazon EC2 インスタンスの store-backed インスタンスの場合、AWS_EC2_INSTANCE_RETIREMENT_SCHEDULED を選択します。

  11. [任意のリソース] を選択します。

    [Event pattern] (イベントパターン) は以下の例のようになります。

    { "source": [ "aws.health" ], "detail-type": [ "AWS Health Event" ], "detail": { "service": [ "EC2" ], "eventTypeCategory": [ "scheduledChange" ], "eventTypeCode": [ "AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED" ] } }
  12. Systems Manager オートメーションドキュメントターゲットを追加します。[Select targets] (ターゲットを選択) の [Target] (ターゲット) で [SSM Automation] (SSM オートメーション) を選択します。

  13. [ドキュメント] で、[AWS-RestartEC2Instance] を選択します。

  14. [Configure automation parameters(s)] (オートメーションパラメータの構成) を展開し、[Input Transformer] (入力トランスフォーマー) を選択します。

  15. [Input Path] (入力パス) フィールドに、{"Instances":"$.resources"} を入力します。

  16. 2 番目のフィールドに、{"InstanceId": <Instances>} を入力します。

  17. [Use existing role] (既存のロールを使用) を選択してから、作成した IAM ロール (AutomationEVRole など) を選択します。

    ターゲットは以下の例のようになります。

    EventBridge コンソールの「SSM オートメーション」例のスクリーンショット。
    注記

    必要な EC2 と Systems Manager のアクセス許可と、信頼されたリレーションシップを持つ既存の IAM ロールがない場合、ロールはリストに表示されません。詳細については、「前提条件」を参照してください。

  18. [Create] (作成) を選択します。

    ルールに一致するイベントがアカウント内で発生すると、EventBridge が指定されたターゲットにイベントを送信します。