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
AWS SAMとX-Rayで Lambdaの遅延を可視化
Search
komakichi
September 24, 2024
Programming
0
27
AWS SAMとX-Rayで Lambdaの遅延を可視化
JAWS-UG朝会 #61での登壇資料です。
https://jawsug-asa.connpass.com/event/321687/
komakichi
September 24, 2024
Tweet
Share
More Decks by komakichi
See All by komakichi
Amazon Bedrock + AWS Chatbot ノーコードでAIボット作成
komakichi
0
43
マルチエージェントで AWSサービスと会話がしたい
komakichi
1
34
Amazon BedrockとIoTで 実家情シスを卒業する
komakichi
2
92
もう実家に手頃な情シス娘は不要!Bedrockでもう一人の娘を作る
komakichi
2
230
CloudWatch Logs Insightsで 定期業務をスマートに
komakichi
1
500
AWSの生成AI活用事例集GenUを使い倒す
komakichi
1
1.1k
ANGEL Dojo 2023 最終発表
komakichi
1
29
【AngelDojo_LT】Raspberry PiとAWS IoT Coreで 夏を乗り切る
komakichi
0
27
Other Decks in Programming
See All in Programming
Amazon Q Developer Proで効率化するAPI開発入門
seike460
PRO
0
110
SpringBoot3.4の構造化ログ #kanjava
irof
2
990
クリーンアーキテクチャから見る依存の向きの大切さ
shimabox
2
280
『GO』アプリ データ基盤のログ収集システムコスト削減
mot_techtalk
0
120
Writing documentation can be fun with plugin system
okuramasafumi
0
120
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
130
2024年のkintone API振り返りと2025年 / kintone API look back in 2024
tasshi
0
220
法律の脱レガシーに学ぶフロントエンド刷新
oguemon
5
740
Lottieアニメーションをカスタマイズしてみた
tahia910
0
130
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
110
昭和の職場からアジャイルの世界へ
kumagoro95
1
380
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
580
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
Thoughts on Productivity
jonyablonski
69
4.5k
We Have a Design System, Now What?
morganepeng
51
7.4k
Building Adaptive Systems
keathley
40
2.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
174
51k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Transcript
JAWS-UG朝会 #61 AWS SAMとX-Rayで Lambdaの遅延を可視化 小巻玖美(こまきち) 2024/09/26(木)
WHO AM I ? X:@komakichidev NEW! t 所w u アイレット株式会D
t 職s u Webエンジニ t コミュニテS G JAWSの各所にチラチラと参6 G JAWS Festa 2024 in 広島行きます! 小巻 玖美(こまきち)
本LTの対象 F AWS SAMを使ってリソースを管理してい6 F X-Rayをまだ使ったことがな' ÇF X-Rayの導入を検討している
1 X-Ray導入の背景 2 X-Rayとは 3 X-Rayを有効化する 4 関連サービスもトレース対象にする 5 トレース全般に関する注意
Agenda
X-Ray導入の背景 以下のようなサーバーレス構成 AWS SAM
X-Ray導入の背景 CloudWatch Logsのメトリクスで大きな遅延を確認
X-Ray導入の背景 CloudWatch Logsのメトリクスで大きな遅延を確認 タイムアウト? 他のAWSサービスとの接続部分の遅延? AWS外のAPIを叩いている部分?(こちらのせいではない?)
X-Ray導入の背景 CloudWatch Logsのメトリクスで大きな遅延を確認 ログを仕込むにしても多すぎるかも タイムアウト? 他のAWSサービスとの接続部分の遅延? AWS外のAPIを叩いている部分?(こちらのせいではない?)
X-Ray導入の背景 そこで、X-Rayの導入を実施
AWS SAMとは サーバーレスアプリケーションを簡単に構築、デプロイ、管理できるツール サーバーレスアプリケーションに特化したAWS CloudFormationの 拡張ツールのため、少ない記述量で同じことが書ける 例:Lambda関数をデプロイ スッキリ!!
X-Rayとは アプリケーションが処理するリクエストに関するデータを収集するサービス レスポンス待ち時間やサービス障害、リクエストパラメータやメタデータ などを収集できる
X-Rayとは:補足 去年、X-RayはCloudWatchと統合されました
X-Rayとは:補足 去年、X-RayはCloudWatchと統合されました
有効化した時の費用 ※東京リージョン 【永続的な無料利⽤枠 毎月、トレースの記録は 10 万回まで無 毎月、トレースの取得とスキャンは合わせて 100
万回まで無料 【無料枠超過後の追加料金】 ※100万件 トレース記録コスト 5.00USD (1トレースあたり 0.000005 ドル トレース取得コスト 0.50USD (1 トレースあたり 0.0000005 ドル スキャンされたトレースコスト 0.50USD (1トレースあたり 0.0000005 ドル) https://aws.amazon.com/jp/xray/pricing/
アプリケーションへのX-Ray導入方法
使用方法は3種類 AWSコンソール (今回は紹介しない) 有効化したいサービスからコンソール上で有効化にチェックを入れ7 V SDKを使用する P X-Ray
APIを使用する SDKが使用しているプログラミング言語に対応していない場合 ・AWS Distro for OpenTelemetry(ADOT) SDK ・X-Ray SDl
使用方法は3種類 AWSコンソール (今回は紹介しない) 有効化したいサービスからコンソール上で有効化にチェックを入れ7 V SDKを使用する P X-Ray
APIを使用する SDKが使用しているプログラミング言語に対応していない場合 ・AWS Distro for OpenTelemetry(ADOT) SDK ・X-Ray SD
X-Rayを有効化する
X-Rayを有効化する AWS SAM 先程のアーキテクチャでX-RayをSDKを使用して有効化してみる
X-Rayを有効化する 有効化が完了し、リクエストを受信するとこのような画面が表示可能
X-Rayを有効化する 有効化が完了し、リクエストを受信するとこのような画面が表示可能
X-Rayを有効化する AWS SAM まずはここから
X-Rayを有効化する(Lambdaの設定) Tracing Active PassThrough を または に設 e Active e
Lambda関数のX-Rayトレースを有効にすW e PassThrougr e デフォルトB e API Gateway から受け取ったトレースヘッダーを転送する
X-Rayを有効化する(Lambdaの設定) Lambda関数にX-Rayへトレースデータを送信するポリシーを追加
X-Rayを有効化する(API Gatewayの設定) TracingEnabled True を に設定 ※デフォルトは False
X-Rayを有効化する(API Gatewayの設定) TracingEnabled True を に設定 ※デフォルトは False これでAPI GatewayとLambdaの設定は完了
X-Rayを有効化する(API Gatewayの設定) TracingEnabled True を に設定 ※デフォルトは False これでAPI GatewayとLambdaの設定は完了
→ これだけだと、この2つのサービスしかトレース対象にならない
関連サービスもトレース対象にする AWS SAM ここもトレース対象としたい 設定済み
関連サービスもトレース対象にする Lambdaのコードにsdkを使用して を追加する patch_all() 例:サポートされているすべてのライブラリにパッチを適用
関連サービスもトレース対象にする 全体ではなく、特定のAWSサービスのみを対象としたい場合
関連サービスもトレース対象にする AWS X-Ray SDK for Pythonでサポートされているライブラリ S botocore、botod S pynamodV
S aiobotocore、aiobotod S requests、aiohttY S httplib、 http.cliene S sqlite3 S mysql-connector-pytho S pg800t S psycopg S pymong S pymysql https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-sdk-python.html
AWSではない外部APIもトレース対象にする 外部APIを呼び出している場合もX-Rayでトレースが可能
AWSではない外部APIもトレース対象にする 実際にトレース対象としたX-Rayの画面
AWSではない外部APIもトレース対象にする 実際にトレース対象としたX-Rayの画面
AWSではない外部APIもトレース対象にする 実際にトレース対象としたX-Rayの画面
AWSではない外部APIもトレース対象にする 実際にトレース対象としたX-Rayの画面
トレース全般に関する注意
トレース全般に関する注意 ① サンプリングはデフォルトのサンプリングルールで実行される ②データの完全性は保証されない ③ 直近30日間のみ追跡データを保存
① サンプリングはデフォルトのサンプリングルールで実行される 1秒間に2回リクエストされた場合 2回目のリクエストがトレースされる保証はない デフォルトのサンプリングルールに従ってリクエストが記録されP ルールは「1秒ごとに最初のリクエストは必ずトレースR それ以降のリクエストについては全体の5%がトレースされる
① サンプリングはデフォルトのサンプリングルールで実行される H サンプリングルールでデータの量を制御してい8 H またパフォーマンスへの影響をコントロールしている なぜサンプリングルールが必要なのか… X-Rayはトレース数で課金される 100%トレースする設定も可能だが、上記を考慮する必要あり
②データの完全性は保証されない AWS X-Rayは監査やコンプライアンスのツールとしては使用不可 データの完全性は保証されない 収集されるデータは統計的に有意なリクエスト数に基づいているが、 https://aws.amazon.com/jp/xray/faqs/
③ 直近30日間のみ追跡データを保存 X-Rayのトレースデータ保持期間は、直近30日間 https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-console-deeplinks.html ちなみにX-Rayのトレースを探す際の時間範囲は6時間まで > 時間範囲は UTC で、最大で6時間にすることができます。
実際にX-Rayを導入した感想
実際にX-Rayを導入した感想 h どこで遅延が発生しやすいのか調査可能 h 特にLambdaのタイムアウト調査の時に効果を発P h 費用面も(今回のサービスでは)問題になるほど、高くなくて良 h ただトレースが探しにくい!H h
コンソールでの範囲6時間制限や30日で消えてしまうのが、やっぱり 使いにくさに繋がっている https://aws.amazon.com/jp/xray/faqs/
おまけ
おまけ X-Rayの有効/無効をtemplate.ymlで制御してみる やりたかったこ0 SAMのテンプレート(template.yml)では、環境毎にリソースを定義済S 「商用環境はX-Rayを有効化」「開発環境は無効」のように環境毎に 有効/無効をパラメータでスイッチングしたい
XRAY_ENABLE_FLAG という変数を定義し、他のリソースでこの値を参照す ることにした
TracingEnabled: !If [ IsEnabledXRayTracing, True, False ] API GatewayでのX-Ray有効化
LambdaでのX-Ray有効化
まとめ P Lambdaのどの処理でレスポンスに遅延が発生するかを特定でき0 P SAMなどのIaCで管理もでき0 P 30日でログが追えなくなるので注意…
Thank You !!