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
21
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
33
マルチエージェントで AWSサービスと会話がしたい
komakichi
1
27
Amazon BedrockとIoTで 実家情シスを卒業する
komakichi
2
84
もう実家に手頃な情シス娘は不要!Bedrockでもう一人の娘を作る
komakichi
2
220
CloudWatch Logs Insightsで 定期業務をスマートに
komakichi
1
460
AWSの生成AI活用事例集GenUを使い倒す
komakichi
1
1k
ANGEL Dojo 2023 最終発表
komakichi
0
26
【AngelDojo_LT】Raspberry PiとAWS IoT Coreで 夏を乗り切る
komakichi
0
23
Other Decks in Programming
See All in Programming
ESLintプラグインを使用してCDKのセオリーを適用する
yamanashi_ren01
2
240
ASP.NET Core の OpenAPIサポート
h455h1
0
110
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.2k
선언형 UI에서의 상태관리
l2hyunwoo
0
270
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
440
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
630
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
400
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
300
Rubyでつくるパケットキャプチャツール
ydah
0
170
.NETでOBS Studio操作してみたけど…… / Operating OBS Studio by .NET
skasweb
0
120
Azure AI Foundryのご紹介
qt_luigi
1
200
ISUCON14感想戦で85万点まで頑張ってみた
ponyo877
1
590
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
67
4.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
Rails Girls Zürich Keynote
gr2m
94
13k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
Making Projects Easy
brettharned
116
6k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
210
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.6k
Navigating Team Friction
lara
183
15k
GraphQLとの向き合い方2022年版
quramy
44
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.5k
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 !!