統合型モニタリング「CloudWatch クロスアカウントオブザーバビリティ」を有効化してみた
どうも、こんにちは kaz です。
はじめに
複数アカウントを持っていると「あれ?このアカウントのメトリクスってどうなってるんだっけ?」と、ふと思うことがありますよね。
でも、アカウントを切り替えるのが面倒で「今日はもう退勤しよう・・・」なんてこともあるかと思います(冗談です)。
そんなときに便利なのが 「CloudWatch クロスアカウントオブザーバビリティ」 と 「クロスアカウントクロスリージョン CloudWatch コンソール」 という機能です!
どちらも CloudWatch で複数アカウントのテレメトリを効率的にモニタリングするために利用できる機能ですが、パッと見でどっちが何なのかわかりづらいと思います。
このエントリーでは、「CloudWatch クロスアカウントオブザーバビリティ」 をメインにそれぞれの違いや設定方法について紹介します!
「CloudWatch クロスアカウントオブザーバビリティ」と「クロスアカウントクロスリージョン CloudWatch コンソール」の違い
ざっくりと・・・以下のイメージでしょうか。
- CloudWatch クロスアカウントオブザーバビリティ
- Observability Access Manager (OAM) サービスによって、単一リージョン内のオブザーバビリティを提供
- アカウントをリンクすると、アカウント間でメトリクス、ログ、トレース、その他のテレメトリを簡単に表示できる
- 共有されたテレメトリをネイティブであるかのように中央モニタリングアカウントでオブザーバビリティを統一できる
- つまり、単一リージョンのみだが、より多くのテレメトリと複数アカウントを 1 画面上に表示できる統合型機能
- クロスアカウントクロスリージョン CloudWatch コンソール
- コンソールエクスペリエンスの提供
- アカウントを柔軟に切り替えて、他アカウントかつ各リージョン間のメトリクス、ダッシュボード、アラームを表示できる
- クロスアカウントクロスリージョンメトリクスを含むダッシュボードを設定して、アカウント内で一元的に可視化することも可能
- つまり、セレクトしたアカウント(および複数リージョン)のテレメトリを切り替えて表示できる集約型機能
ただし、ドキュメント にもあるとおり、2 つの機能は相互に補完し合い一緒に使用することもできます。
もう少し細かい 2 つの機能の比較は、次の表を参照してください。
機能比較表
機能 | CloudWatch クロスアカウントオブザーバビリティ | クロスアカウントクロスリージョン CloudWatch コンソール |
---|---|---|
サポートされるテレメトリ | ・メトリクス ・トレース ・ログ |
・メトリクス ・トレース |
サポートされる機能 | ・ダッシュボード ・アラーム ・Metrics Insights ・異常検出 ・CloudWatch Logs Insights ・Application Insights ・その他の機能(詳細はこちら) |
・メトリクス、アラーム、トレースのコンソールでアカウントとリージョンを切り替える ・他のアカウントやリージョンからのメトリクスとアラームを含むカスタムダッシュボード ・その他の機能(詳細はこちら) |
使用できるアカウント数 | 最大 100,000 個のソースアカウントのリソースを同時に表示 | リンクできるアカウントの数に制限なし |
テレメトリデータを移動するか? | コピーされたトレース (X-Ray) を除き、移動されない | 移動されない |
利用料が発生するか? | ・共有ログとメトリクスには料金は発生しない ・コピーしたトレース (X-Ray) は発生する(最初のトレースコピーは無料) |
発生しない |
リージョン間のオブザーバビリティをサポートしているか? | いいえ | はい |
プログラムによるアクセスをサポートしているか? | AWS CLI, AWS CDK, API などでサポート | いいえ |
プログラムによる設定をサポートしているか? | はい | はい |
AWS Organizations をサポートしているか? | はい | はい |
以下より「CloudWatch クロスアカウントオブザーバビリティ」について紹介します!
前提条件と用語の定義
- AWS Organizations が有効になっていること
- Organizations を使用していない場合はアカウント ID を指定して個別に設定できますが、ここでは Organizations を活用した方法で進めます
- モニタリングアカウントをどのアカウントにするか決めておくこと
- 1 つまたはいくつかのソースアカウントがあること
また、事前に以下の用語を定義しておきます。
- モニタリングアカウント(監視者)
- リンクした複数ソースアカウントの CloudWatch の関連データを確認する中央アカウント
- ソースアカウント(モニタリングされるアカウント)
- CloudWatch の関連データをモニターリングアカウントと共有する各メンバーアカウント
動作の仕組み
Observability Access Manager (OAM) サービスを使用して、単一リージョン内での可観測性を提供します。
複数のアカウントをリンクして、メトリクス、ログ、トレース、その他のテレメトリを中央モニタリングアカウントでネイティブであるかのように簡単に表示・操作できます。
イメージだと以下のような感じですね〜。
設定手順
それでは「CloudWatch クロスアカウントオブザーバビリティ」を設定していきましょう!
導入方法は下記のドキュメント通りとなりますが、ここではスクショ付きで紹介したいと思います。
モニタリングアカウント(監視者) で以下の手順を実施します。
今回は AWS Organizations の管理アカウントをモニタリングアカウント とします。
-
CloudWatch コンソールにアクセスして[設定]->[モニタリングアカウント設定]->[設定]を選択
※わかりづらいですが画面下部の赤枠が「CloudWatch クロスアカウントオブザーバビリティ」の設定欄です
※メンバーアカウントをモニタリングアカウントにする場合も同様の手順で設定できます
-
モニタリングアカウントへリンクしたいテレメトリにチェックを入れ、Organizations 組織パスとラベルを定義したら[設定]をクリック
※「トレース」は追加料金が発生するようなので外しています
組織全体で CloudWatch クロスアカウントオブザーバビリティを適用する際の注意点
- CloudWatch コンソールにアクセスして[設定]->[モニタリングアカウントを管理]を選択
- [設定ポリシー]タブからポリシー内の
StringEquals
をStringLike
に変更する
参考: AWS global condition context keys - AWS Identity and Access Management
この手順を実施しないとメンバーアカウントから OAM (Amazon CloudWatch Observability Access Manager) を作成するための
oam:CreateLink
権限不足が発生して StackSets のデプロイに失敗するためご注意ください!
完了したら以降の手順に進んでください。 - CloudWatch コンソールにアクセスして[設定]->[モニタリングアカウントを管理]を選択
-
モニタリングアカウントの有効化が完了すると以下のような画面が表示されるので[アカウントをリンクするためのリソース]をクリック
-
[AWS 組織]を選択した状態で[CloudFormation テンプレートをダウンロード]をクリック
-
CloudShell または AWS CLI を準備
ダウンロードしたテンプレートはカレントディレクトリにアップロードしておいてください! -
以下のコマンドを実行して StackSet を作成
# 環境変数の定義 TEMPLATE_FILE="<ダウンロードした CFn テンプレート名を入力>" # 例: link_to_012345678912_cloudformation_template.yaml # StackSet を作成 aws cloudformation create-stack-set \ --description "Enables CloudWatch Cross-Account Observability (Auto Deploy: Enabled)" \ --stack-set-name CloudWatch-Cross-Account-Observability \ --template-body "file://${TEMPLATE_FILE}" \ --permission-model SERVICE_MANAGED \ --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false \ --managed-execution "Active=true" \ --capabilities CAPABILITY_NAMED_IAM \ --tags \ "Key=CreatedBy,Value=OpsTeam" \ --call-as SELF
-
StackSet にスタックインスタンスをデプロイ
※OU_ID
にはリンクしたい OU ID を指定してください
※REGION
には「CloudWatch クロスアカウントオブザーバビリティ」を設定したリージョンを指定してくださいOU_ID="OU ID" # 例: ou-xxxx-yyyy REGION="region" # モニタリングアカウントのリージョンを指定 # StackInstances を作成 aws cloudformation create-stack-instances \ --stack-set-name "CloudWatch-Cross-Account-Observability" \ --deployment-targets OrganizationalUnitIds="${OU_ID}" \ --regions "${REGION}" \ --operation-preferences RegionConcurrencyType=PARALLEL,MaxConcurrentPercentage=25,FailureTolerancePercentage=20,ConcurrencyMode=STRICT_FAILURE_TOLERANCE \ --call-as SELF
StackSet のオペレーションが開始されるので
RUNNING
からSUCCEEDED
になるまで待ちます。
設定を確認してみると、モニタリングアカウントにメンバーアカウントがリンクされていることが確認できます!
これで CloudWatch クロスアカウントオブザーバビリティ の設定が完了です!おつかれさまでした!
(ちなみに今回は東京リージョンで設定しましたが、同様の手順で他リージョンにも設定できます)
おまけ:メンバーアカウントのテレメトリを確認してみる
リンクされたデータには以下のテレメトリが含まれます。
- メトリクス
- ログ
- トレース (X-Ray) => 今回はリンクデータから外しています
- Application Insights
- インターネットモニター
それでは モニタリングアカウント(監視者) で CloudWatch コンソールを開いて、メンバーアカウントのテレメトリを確認してみましょう!
メトリクス
まず、右上には モニタリングアカウント
という表示がありますね。
そして、いくつかのメンバーアカウントがリンクされており、それぞれのメトリクスデータを選択することでグラフ上にまとめて表示できます!
ロググループ
ログデータも一元的に確認できます!
たとえば、ロググループの保持期間を確認できるため是正アクションに繋げることも可能です!
無制限になっているロググループを放置していると、結構コストかかるんですよね・・・。。
また、Log Insights でそのままメンバーアカウントのログデータを検索することも可能できます。
ダッシュボードの作成
メンバーアカウントのメトリクスデータなどをダッシュボードに追加することで、一元的に可視化が可能です!
まとめ
今回は 「CloudWatch クロスアカウントオブザーバビリティ」 を設定することで、モニタリングアカウントからメンバーアカウントのテレメトリを一元的に確認することができました。
Organizations で複数のアカウントを管理するのは便利な反面、各アカウントのリソースを一元的に管理するのはよくある課題だと思います。
ちなみに「CloudWatch クロスアカウントオブザーバビリティ」は単一リージョンのみのサポートであるため、複数リージョンで利用したい場合はその分だけ設定が必要な点に注意が必要です!
また、すでに上述していますが「CloudWatch クロスアカウントオブザーバビリティ」と「クロスアカウントクロスリージョン CloudWatch コンソール」は相互に補完し合って一緒に使用できます。
このような便利機能をうまく活用して運用を効率化していきましょう!
「クロスアカウントクロスリージョン CloudWatch コンソール」の設定方法は、以下をご参照ください。
アノテーション株式会社について
アノテーション株式会社 は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。
「らしく働く、らしく生きる」のスローガンを掲げ、さまざまな背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けています。
現在当社では AWS の構築・運用経験があり、以下の業務に携わってくれるメンバーを募集中です。
- AWS 環境の運用設計支援や構築
- 運用監視とインシデント対応
- 定型業務などの自動化
AWS 関連資格をお持ちの方、クラウドネイティブな運用経験者は大歓迎です。
少しでもご興味がありましたら 募集職種 よりご応募ください!!
一緒に働ける日を心待ちにしています!