Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CDK 一発で全てのエラーログを Slack に流す
Search
acomagu
May 20, 2023
2.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CDK 一発で全てのエラーログを Slack に流す
acomagu
May 20, 2023
More Decks by acomagu
See All by acomagu
Payment Records API を使って地域通貨を Stripe Dashboard に統合してみた
acomagu
0
62
Restate x Stripe: 安心して眠れる決済システムを目指して
acomagu
0
16
Stripe SSoT をするべきか否か
acomagu
0
83
JP_Stripes: リコンサイル(突合処理)のテスト
acomagu
0
130
「境界付けられたコンテキスト間の関係」についてもっと語ろう
acomagu
0
170
地方 MaaS 事例: アプリの進化に伴って変化してきた Stripe 利用方法
acomagu
0
510
Stripe リコンサイルの勘所
acomagu
0
540
AWS CDK を支える Constructs について
acomagu
0
190
DDDとは結局何なのか
acomagu
0
450
Featured
See All Featured
Building the Perfect Custom Keyboard
takai
2
800
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
150
Claude Code のすすめ
schroneko
67
230k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
What's in a price? How to price your products and services
michaelherold
247
13k
sira's awesome portfolio website redesign presentation
elsirapls
0
280
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
210
Designing Experiences People Love
moore
143
24k
Designing Powerful Visuals for Engaging Learning
tmiket
1
420
Music & Morning Musume
bryan
47
7.2k
Deep Space Network (abreviated)
tonyrice
0
210
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Transcript
CDK 一発で全てのエラーログを Slack に流す 23/5/20 CDK Conference Japan 2023 @acomagu
自己紹介 - @acomagu - 株式会社デザイニウム所属 - CDK 使用歴4年(AWS 使用歴も4年) -
でかい唐辛子とでかいラー油にハマって いる
None
Agenda - やりたいこと - 背景 - 検討した方法 - Lambda error
metric → CloudWatch Alarm → Chatbot - CloudWatch Metrics Filter → CloudWatch Alarm → Chatbot - Datadog - Sentry - 自作→公開 - その後 - まとめ
やりたいこと エラーログを全て Slack に流したい!
背景 - 副業先でエラーログを全て Slack に流していて、とても体験が良かった - 本番環境/開発環境でのエラーにいち早く気づける - 担当エンジニア以外も簡単にアクセスできる/
障害発生時のコミュニケーションに便利 - 開発中もフロントエンドエンジニアさんがサーバーのエラーを見れると便利 - 年1件ほど新規プロジェクトの立ち上げに関わる(受託開発のため) - 複数プロジェクトの監視を続けていく必要がある→ エラーが出たら何らかの通知が欲しい - 毎回監視をポチポチ作るのは大変なため、できる限り IaC 化しておきたい - 使っている AWS サービスは様々 - AppRunner, Lambda, Step Functions, Elastic Beanstalk, API Gateway - 可能な限り「全て」のサービスのエラーログを読みたい → アプリケーション内に通知の仕組みを作るのではなく、 CloudWatch Logs 経由 で通知する仕組 みが必要
改めてやりたいこと - エラーログを全て Slack に流す - できれば StepFunctions や AppSync
等、いろいろな AWS サービスのエラーログを 集約したい - CDK でセットアップの大部分が終わるようにしたい
検討した方法
検討した方法① Lambda error metric → CloudWatch Alarm → Chatbot Lambda
エラーメトリクスが1件で発火する Alarm を作成して、Chatbot に連携する方 法 - “Show logs” のボタンを押すことでロ グを表示できる - グラフが表示される - datapoint ごとにしか通知されない(最 小10秒) - Lambda にしか使えない - Lambda がエラー状態で終了した場合 しかカウントされない(console.error が 通知されない)
- Lambda Error Metrics はエラーログを見ているのではなく、Lambda Runtime API に 通知されたエラーの数を見ている -
(尚、CloudWatch Logs にはそもそもログレベルの概念が無いので、標準出力も標 準エラー出力も同等に扱われるイメージ) console.error が通知されない?
検討した方法② CloudWatch Metrics Filter → CloudWatch Alarm → Chatbot 文字列
“ERROR” が含まれているログを 検知する Metrics Filter を作成して、エラー ログが1件で発火する Alarm を作成し、 Chatbot に連携する方法 - Lambda 以外でも使える - ログを表示できない(Slack 上でも見れ ないし、リンクも無い) - グラフが表示される - datapoint ごとにしか通知されない
検討した方法③ Datadog SDK もしくは CloudWatch 経由で Datadog にログを送信する - Lambda
以外でも使える - Slack に全てのログを送信する方法は 無く、こちらもアラートのみ - ログの内容が Slack で見れる - Monitor Window ごとにしか通知され ない(最小1分)
検討した方法④ Sentry SDK 経由で Sentry にログを送信する - Step Functions 等のエラーは補足でき
ない - Slack に全てのエラーログを送信でき る - ログへのリンクも(一応)通知に含めら れる - ただしアプリケーション側で URL をタグとし て注入しておくというトリッキーな方法 - URL を 200 字に収めなければならない
いまいちユースケースに合うものがない やりたいことはシンプル「全てのエラーログを Slack に流す」だけ 自分で作ってみてもいいのでは?
試しに作ってみた
None
None
便利だったのでコンストラクト化してみる
監視するロググループを一行で追加できるようになった 便利だったのでコンストラクト化してみる
ライブラリ化して公開してみる
何が言いたいか 一度書いた CDK のコードを 「リファクタリングする → ライブラリとして切り出す → 公開する」 この一連の流れが言語の知識さえあればできる(手癖でできる)
追加で学ばなければならない CDK の知識はほとんどない!
何が言いたいか 一度書いた CDK のコードを 「リファクタリングする → ライブラリとして切り出す → 公開する」 この一連の流れが言語の知識さえあればできる(手癖でできる)
追加で学ばなければならない CDK の知識はほとんどない! なぜか? ひとつは Stack と L3 Construct がほぼ同じものだから Stack を書く感覚で L3 Construct も書けてしまう ↑CDK is Beautiful ポイント
cdk-log-notifier のその後 - Reddit で宣伝したところ、40スターくらいつけてもらえた - 開発から3年が経ち、社内では現在 7 のサービスで使われている -
先日 Jsii 対応し、Construct Hub に載った - TypeScript 以外に、Java, Python, Go, .NET に対応
まとめ - エラーログを Slack に流す機構を CDK で構築した - ライブラリ化によって、あらゆるプロジェクトで CDK
コードに数行追加するだけでエ ラーログを Slack に流せるようになった - CDK の美しさのひとつは、Stack、L3 Construct、L2 Construct の違いがほとんど 無いこと それによって CDK Construct ライブラリを作成するハードルがとても低い