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
60
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
Lambda(Python)の リファクタリングが好きなんです
komakichi
3
200
JAWS Days 2025のインフラ
komakichi
1
460
Amazon Bedrock + AWS Chatbot ノーコードでAIボット作成
komakichi
0
87
マルチエージェントで AWSサービスと会話がしたい
komakichi
1
53
Amazon BedrockとIoTで 実家情シスを卒業する
komakichi
3
110
もう実家に手頃な情シス娘は不要!Bedrockでもう一人の娘を作る
komakichi
2
260
CloudWatch Logs Insightsで 定期業務をスマートに
komakichi
1
560
AWSの生成AI活用事例集GenUを使い倒す
komakichi
1
1.3k
ANGEL Dojo 2023 最終発表
komakichi
1
45
Other Decks in Programming
See All in Programming
設計の本質:コード、システム、そして組織へ / The Essence of Design: To Code, Systems, and Organizations
nrslib
4
590
AIコーディングワークフローの試行 〜AIエージェント×ワークフローでの自動化を目指して〜
rkaga
3
3.7k
Empowering Developers with HTML-Aware ERB Tooling @ RubyKaigi 2025, Matsuyama, Ehime
marcoroth
2
730
Making TCPSocket.new "Happy"!
coe401_
1
1.5k
PHP で学ぶ OAuth 入門
azuki
1
200
ミリしらMCP勉強会
watany
4
770
RubyKaigi Dev Meeting 2025
tenderlove
1
180
The Evolution of the CRuby Build System
kateinoigakukun
0
710
Compose Hot Reload is here, stop re-launching your apps! (Android Makers 2025)
zsmb
1
520
状態と共に暮らす:ステートフルへの挑戦
ypresto
1
670
Youtube Lofier - Chrome拡張開発
ninikoko
0
2.4k
Exit 8 for SwiftUI
ojun9
0
130
Featured
See All Featured
Visualization
eitanlees
146
16k
Making the Leap to Tech Lead
cromwellryan
133
9.2k
Agile that works and the tools we love
rasmusluckow
328
21k
Java REST API Framework Comparison - PWX 2021
mraible
30
8.5k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
For a Future-Friendly Web
brad_frost
176
9.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.1k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
BBQ
matthewcrist
88
9.6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.2k
Adopting Sorbet at Scale
ufuk
76
9.3k
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 !!