23/3/22 JAWS-UG CDK支部 #6にて登壇 https://jawsug-cdk.connpass.com/event/274879/
AWS CDKで作るCloudWatch DashboardWednesday, March 22, 2023Haruka SakiharaJAWS-UG CDK支部 #6
View Slide
自己紹介Haruka Sakihara<取得資格>• ネットワークスペシャリスト試験(IPA)• AWS Certified Advanced Networking Speciality等8資格<所属>• アクセンチュア株式会社 テクノロジーコンサルティング本部<登壇履歴>• 21/11/13 Go Conference 2021 Autumn• 22/3/14 JAWS-UG 朝会 #31「AWS AssumePolicyの転びどころ」• 22/8/5 CloudNative Security Conference 2022「セキュアなTerraformの使いかた」• 22/8/25 HashiTalks: JAPAN「ベストなTerraformディレクトリ構成を考察してみた」<趣味>• Go言語が好きです
AWS CDKで作るCloudWatch DashboardAgenda ダッシュボードの重要性CloudFormationでCloudWatch Dashboardを構築するCDKで作るダッシュボードCDKだからこその利点まとめ12345
1. ダッシュボードの重要性わかりやすいダッシュボードの重要性サービスダッシュボードは、定常運用時には障害の予兆をいち早く見つける・障害発生時には迅速に原因を把握し事態に対処するための助けとなります。クラウド上に構築したサービスを運用するにあたって、ダッシュボードは必需品といっても過言ではないでしょう。定常運用時 障害発生時監視・観察○○のメトリクス値が上がってる……いつもと傾向が違うぞ……?→障害予兆の発見・早期対策へ確認怪しいのは××と△△だ!→事態の早期終息へいついかなる時でも、ダッシュボードを活用できることは重要
1. ダッシュボードの重要性ダッシュボードの見た目の重要性サービスを運用するうえで、適切なウィジェットに適切な説明文を添えた、「誰が見ても監視ポイントがわかるダッシュボード」の存在はとても重要です。一目で見るべきポイントがわかる適切な大きさのウィジェット新任の運用担当どこに注目すれば障害がわかるんだ……?
1. ダッシュボードの重要性ダッシュボードの見た目の重要性サービスを運用するうえで、適切なウィジェットに適切な説明文を添えた、「誰が見ても監視ポイントがわかるダッシュボード」の存在はとても重要です。新任の運用担当関連する項目は並べて比較しやすいようにベテランの運用担当この2つは連動しているからまとめてチェックしてね引き継ぎなかったらわからなかっただろうな……
1. ダッシュボードの重要性監視ダッシュボードをアップデートする提供するサービスの内容がどんどん変わっていくのであれば、変化するアプリケーションに合わせて適切に監視のポイントを変えることが重要になってきます。サービスの成長とダッシュボードの保守管理は表裏一体だといえます。画像出典: https://aws.amazon.com/jp/devops/what-is-devops/サービスを開発・リリースする稼働サービスをモニタリングして改善点を見つける正常稼働時の挙動を把握する
1. ダッシュボードの重要性ダッシュボードを更新し続けることの難しさ開発に合わせてダッシュボードを適切に更新し続けるということは容易ではありません。多くの人が「次のリリースでダッシュボードをどう変えるべきか?」を気にしながら進めるためには、ダッシュボードをIaC化しメンテナンス性を確保するのが有効な手段です。当社のデベロッパー達は、変更を完了する前のコードレビューの段階で、「ダッシュボードで何らかの更新が必要かい?」と質問をします。 基盤レベルで変更がデプロイされる以前に、ダッシュボードの修正が行われる仕組みになっています。出典: The Amazon Builders' Library - 運用を可視化するためのダッシュボードの構築多くの人がメンテナンスできるように、ダッシュボード構築・更新をコードで出来るようにするのが重要
Q. ダッシュボード構築をIaC化するにはどうすればいいでしょう?
2. CFnでCloudWatch Dashboardを構築するイマイチな点その1 – 画面構成はJSON文字列で記述CFnの文法に、ダッシュボードウィジェットに対応するものは存在しません。CloudWatch APIが提供するDashboardBody属性の文法に則り、ウィジェットの情報をJSON文字列としてまとめ、それをCFn内に埋め込む必要があります。現状 - ウィジェットのプロパティがない 理想 - ウィジェットのプロパティがあるDashboardBody:WidgetList:- name: ウィジェット1place: xxxx- name: ウィジェット2place: yyyyDashboardBody:[xxにウィジェット1を置いて、yyにウィジェット2を置いて、それぞれ設定は○○で~~~~~という設定文字列をJSONで書く]yamlという構造化文書の性質を活かした記述ができるDashboardBodyの中身を構造化することができない
2. CFnでCloudWatch Dashboardを構築するイマイチな点その1 – 画面構成はJSON文字列で記述(前頁の続き)yamlファイルの1属性値にJSON文字列を書く必要がある
2. CFnでCloudWatch Dashboardを構築するイマイチな点その2 – マークダウンが書きづらいダッシュボードのテキストウィジェットには、マークダウンを用いた記述を行うことができます。しかし、CFnのyaml上では、ウィジェットに載せるテキストの中身を一行の文字列にまとめる必要があります。ウィジェットに使いたいマークダウンの中身CFnでの記述
2. CFnでCloudWatch Dashboardを構築するイマイチな点その3 – ウィジェットの座標指定ダッシュボード上のどこに各ウィジェットを配置するかを、CFnでは座標で指定します。その具体的な座標の数値を自力で計算して記述する必要があります。(12, 25) (18, 25)6666
3. CDKで作るダッシュボードCDKでの記述方法Goのような主要プログラミング言語でCWダッシュボードを記述することができます。
3. CDKで作るダッシュボードCDKでの記述方法Goのような主要プログラミング言語でCWダッシュボードを記述することができます。ダッシュボードを定義ウィジェットを定義してダッシュボードに追加
3. CDKで作るダッシュボードウィジェットの配置ダッシュボード内にウィジェットを配置する際にCFnの場合には座標指定が必要でしたが、CDKを使用する場合には座標を気にせずに「いい感じ」に配置させることができます。2つ同時に追加(AddWidgets)すると2つ横に並んだ状態になる
3. CDKで作るダッシュボードウィジェットの配置ダッシュボード内にウィジェットを配置する際にCFnの場合には座標指定が必要でしたが、CDKを使用する場合には座標を気にせずに「いい感じ」に配置させることができます。1つずつ個別に追加(AddWidgets)すると2つ縦に並んだ状態になる
3. CDKで作るダッシュボードテキストウィジェットの内容CFnのときはテキストウィジェットの内容を一行の文字列にしてプロパティに指定してやる必要がありましたが、CDKの場合は「マークダウンファイルに内容を記述し、それを読み込ませる」ということが容易に実現できます。.mdに内容を記述CDKコード内で.mdの内容を参照
3. CDKで作るダッシュボードCFnへの変換cdk synthコマンドを利用することで、CDKのコードからCloudFormationのテンプレートを生成ことができます。そのため、既存の環境がCFnで作られている場合にもスムーズに導入することができます。
4. CDKだからこその利点繰り返しの記述が楽にできるyamlファイルは構造上繰り返しの記述が不得手です。それに対しCDKは、既存プログラミング言語が持つfor, whileのような制御構文を用いて簡単に繰り返しを記述することができます。1つのALBに対して「応答時間」「リクエスト数」などの決められたセットのメトリクスを表示させたいfor文でまとめる
4. CDKだからこその利点複雑な条件分岐が可能CFnのyamlではConditionにあまり複雑な条件を指定することができませんでした。CDKの場合は「テーブルがProvisionedだったら……」といった、監視対象となるリソースの属性によって表示を変えるという条件分岐も実現可能です。(例) ProvisionedのDynamoDBテーブルにのみ、ProvisionedCUの項目を表示させるisProvisionedがtrueのときのみ、ProvisionedCUの項目を追加一部のテーブルのみにProvisionedCUの項目が表示
4. CDKだからこその利点既存リソースの参照が可能ウィジェットを作るために「名前空間・メトリクス名・ディメンション」を愚直に書いてMetricPropsを定義するのではなく、「既存リソースのメトリクスを取得する」メソッドを呼び出すだけでメトリクス情報を得ることが一部のリソースでは可能です。名前空間等を愚直に記述するパターン既存リソースからメトリクスを直接取得するパターン
5. まとめ• ダッシュボードを継続的にアップデートし続けることは、サービスの成長のためにとても重要• CloudWatch DashboardのCFnでの記法は洗練されている・使いやすいとは言えない現状があります。– ボディの中身をyaml属性で構造化できず、一つのjson文字列で書く必要がある– ウィジェットの配置座標を一つ一つ指定してやる必要• CDKを用いると、ダッシュボード内のウィジェット配置を考えずとも構築が可能になり、さらに既存プログラミング言語の豊かな表現力によって最小限の記述・多彩な条件分岐の実現といったメリットを得ることができる
一番伝えたいこと良いダッシュボードを作るためのアプリ側の方々のご協力が必要です!CDKで書きやすくなっているのでなにとぞよろしくお願いしますm(__)m
CDK × ダッシュボードの相性の良さがもたらす未来• 「アプリのどこを監視するべきか」「正常稼働させるためには、どの項目が守られているべきなのか」ということを一番知っているのは作ったアプリの方々であるはずです。• SREの方々がアプリチームにヒアリングしてダッシュボードを作成・反映というやり方でもよいですが時間が掛かりますし、何よりダッシュボードを作ることで開発者自身がそのサービスの特性を知ることはアプリ開発においても十分プラスになると思います。• 今までのインフラ構築は「それ専用の文法をyamlでごりごり書く」というインフラ屋以外からするととっつきにくいものだったのですが、既存プログラミング言語で構成を記述することができるCDKはアプリ側の立場の方々でも扱いやすいかと思います。• ダッシュボードはそのサービスに関わる全ての人に関係のあるものです。今まで他人事だと思っていた人こそ、ぜひCDKでダッシュボードに触れてみてください!
Thank Youご意見、ご質問ありましたらお気軽にご連絡下さい[email protected]Haruka Sakihara(崎原 晴香)