LoginSignup
8
2

More than 1 year has passed since last update.

AutoScalingで監視から外れたEC2を監視し続けたいインフラエンジニアの奮闘記#1

Last updated at Posted at 2023-01-24

0.はじめに

ついこの前からAWSの運用監視をするようになり、ふと気になった掲題の問題について
せっかくなので色々なアプローチで解決してみたいなと思いました。
同じく運用をされている方からのフィードバックを心待ちにしております!

1.検証環境の構成と想定

・構築済みの環境(監視対象環境)をクロスアカウント機能を使い、モニタリング環境で
 監視することを想定する
・構築済みのリソースの設定は極力変更しないものとする
・AutoScalingによるEC2のスケールイン・スケールアウトによるインスタンスの入れ替わりは
 Cloudwatch・EventBridge・Lambda・SNS等を使って検知してみる
・ざっくりな構成図は以下の通り

cloudwatch-autoscaling-monitor.png

2.実際にやってみる(監視対象環境編)

2.1.EventBridge編

まずはEC2の起動・停止をトリガーとするEventBridgeを作成します。
参考にしたのは以下サイトですが、まずイベントバス(default)とルールを作成します。
参考サイト:https://dev.classmethod.jp/articles/cross-account-delivery-of-eventbridge-event-buts/

~ルール作成~
監視対象環境のイベントバス(default)に対応させるルールを作成します。

設定項目名 設定値 備考
イベントソース その他 別のAWSアカウントへ連携する際はその他を選択する
サンプルイベント AWSイベント 今回は特に設定しないためデフォルトのまま
作成のメソッド パターンフォームを使用する 次項目のイベントパターンをサクッと設定できるよう選びます

続いてイベントパターンの作成に移ります。
この項目でどのインスタンスのどんなステータスをトリガーにするか設定します。

設定項目名 設定値 備考
イベントソース AWSのサービス -
AWSのサービス AutoScaling サービスを選択すると下部にイベントタイプが表示される
イベントタイプ Instance Launch and Terminate インスタンスのスケールイン(アウト)の検知はこれを選択する
特定のインスタンスイベント EC2 Instance Launch Successful、EC2 Instance Terminate Successful インスタンスの起動と停止を検知するにはこれらを選択する
任意のグループ or 特定のグループ 任意で選択 監視対象を絞る際は後者を選択する

※画像は参考例
image.png

次にターゲットの選択に進みます。

設定項目名 設定値 備考
ターゲットタイプ EventBridgeイベントバス 別のAWSアカウントへ連携する際はこちらを選択します
ターゲットタイプ 別のアカウントまたはリージョンのイベントバス 上記を選択すると表示されます
ターゲットとしてのイベントバス モニタリング環境側のイベントバス 送信先がモニタリング環境側になるためコピペする
実行ロール この特定のリソースについて新しいロールを作成 別アカウントへの共有を許可するロールが自動作成できる※

※AWSのドキュメントに記載あり
(https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-cross-account.html)

これで監視対象側の設定は完了です。

3.実際にやってみる(モニタリング環境編)

3.1.EventBridge編~イベントバス設定~

モニタリング環境側で監視対象環境の情報を取得するにはまず、イベントバスの設定を実施します。

モニタリング環境側でEventBridge>イベントバス> defaultを選択し、アクセス許可を管理を押下します。

image.png

”テンプレートをロード”を押下し、以下のコードのように
監視対象環境側の設定を追記します。(テンプレートに記載のコメントも削除すること)

リソースベースのポリシー
{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "allow_account_to_put_events",
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::xxxxxxxxxxxx:root"←監視対象環境側のAWSアカウントIDを入力する
    },
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:ap-northeast-1:yyyyyyyyyyyy:event-bus/default"
  }, {
    "Sid": "allow_all_accounts_from_organization_to_put_events",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:ap-northeast-1:yyyyyyyyyyyy:event-bus/default",
    "Condition": {
      "StringEquals": {
        "aws:PrincipalOrgID": "xxxxxxxxxxxx"←監視対象環境側のAWSアカウントIDを入力する
      }
    }
  }, {
    "Sid": "allow_account_to_manage_rules_they_created",
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
    },
    "Action": ["events:PutRule", "events:PutTargets", "events:DeleteRule", "events:RemoveTargets", "events:DisableRule", "events:EnableRule", "events:TagResource", "events:UntagResource", "events:DescribeRule", "events:ListTargetsByRule", "events:ListTagsForResource"],
    "Resource": "arn:aws:events:ap-northeast-1:yyyyyyyyyyyy:rule/default",
    "Condition": {
      "StringEqualsIfExists": {
        "events:creatorAccount": "xxxxxxxxxxxx"
      }
    }
  }]
}

※xxxxxxxxxxxxは監視対象環境側のAWSアカウントID
※yyyyyyyyyyyyはモニタリング環境側のAWSアカウントID

これで監視対象側のEventBridgeの情報を受け取れるようになりました!

次回はEventBridgeで取得したデータを基にCloudWatchLogsにログを記録するところまで執筆したいと思います。

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2