Slide 1

Slide 1 text

JAWS-UG朝会 #61 AWS SAMとX-Rayで Lambdaの遅延を可視化 小巻玖美(こまきち) 2024/09/26(木)

Slide 2

Slide 2 text

WHO AM I ? X:@komakichidev NEW! t 所w u アイレット株式会D t 職s u Webエンジニ€ t コミュニテS G JAWSの各所にチラチラと参6 G JAWS Festa 2024 in 広島行きます! 小巻 玖美(こまきち)

Slide 3

Slide 3 text

本LTの対象 F AWS SAMを使ってリソースを管理してい6 F X-Rayをまだ使ったことがな' ÇF X-Rayの導入を検討している

Slide 4

Slide 4 text

1 X-Ray導入の背景 2 X-Rayとは 3 X-Rayを有効化する 4 関連サービスもトレース対象にする 5 トレース全般に関する注意 Agenda

Slide 5

Slide 5 text

X-Ray導入の背景 以下のようなサーバーレス構成 AWS SAM

Slide 6

Slide 6 text

X-Ray導入の背景 CloudWatch Logsのメトリクスで大きな遅延を確認

Slide 7

Slide 7 text

X-Ray導入の背景 CloudWatch Logsのメトリクスで大きな遅延を確認 タイムアウト? 他のAWSサービスとの接続部分の遅延? AWS外のAPIを叩いている部分?(こちらのせいではない?)

Slide 8

Slide 8 text

X-Ray導入の背景 CloudWatch Logsのメトリクスで大きな遅延を確認 ログを仕込むにしても多すぎるかも タイムアウト? 他のAWSサービスとの接続部分の遅延? AWS外のAPIを叩いている部分?(こちらのせいではない?)

Slide 9

Slide 9 text

X-Ray導入の背景 そこで、X-Rayの導入を実施

Slide 10

Slide 10 text

AWS SAMとは サーバーレスアプリケーションを簡単に構築、デプロイ、管理できるツール サーバーレスアプリケーションに特化したAWS CloudFormationの 拡張ツールのため、少ない記述量で同じことが書ける 例:Lambda関数をデプロイ スッキリ!!

Slide 11

Slide 11 text

X-Rayとは アプリケーションが処理するリクエストに関するデータを収集するサービス レスポンス待ち時間やサービス障害、リクエストパラメータやメタデータ などを収集できる

Slide 12

Slide 12 text

X-Rayとは:補足 去年、X-RayはCloudWatchと統合されました

Slide 13

Slide 13 text

X-Rayとは:補足 去年、X-RayはCloudWatchと統合されました

Slide 14

Slide 14 text

有効化した時の費用  ※東京リージョン 【永続的な無料利⽤枠” … 毎月、トレースの記録は 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/

Slide 15

Slide 15 text

アプリケーションへのX-Ray導入方法

Slide 16

Slide 16 text

使用方法は3種類 –• AWSコンソール (今回は紹介しない)   有効化したいサービスからコンソール上で有効化にチェックを入れ7 V• SDKを使用する P• X-Ray APIを使用する   SDKが使用しているプログラミング言語に対応していない場合   ・AWS Distro for OpenTelemetry(ADOT) SDK   ・X-Ray SDl

Slide 17

Slide 17 text

使用方法は3種類 –• AWSコンソール (今回は紹介しない)   有効化したいサービスからコンソール上で有効化にチェックを入れ7 V• SDKを使用する P• X-Ray APIを使用する   SDKが使用しているプログラミング言語に対応していない場合   ・AWS Distro for OpenTelemetry(ADOT) SDK   ・X-Ray SD‚

Slide 18

Slide 18 text

X-Rayを有効化する

Slide 19

Slide 19 text

X-Rayを有効化する AWS SAM 先程のアーキテクチャでX-RayをSDKを使用して有効化してみる

Slide 20

Slide 20 text

X-Rayを有効化する 有効化が完了し、リクエストを受信するとこのような画面が表示可能

Slide 21

Slide 21 text

X-Rayを有効化する 有効化が完了し、リクエストを受信するとこのような画面が表示可能

Slide 22

Slide 22 text

X-Rayを有効化する AWS SAM まずはここから

Slide 23

Slide 23 text

X-Rayを有効化する(Lambdaの設定) Tracing Active PassThrough を または に設” e Active e Lambda関数のX-Rayトレースを有効にすW e PassThrougr e デフォルトB e API Gateway から受け取ったトレースヘッダーを転送する

Slide 24

Slide 24 text

X-Rayを有効化する(Lambdaの設定) Lambda関数にX-Rayへトレースデータを送信するポリシーを追加

Slide 25

Slide 25 text

X-Rayを有効化する(API Gatewayの設定) TracingEnabled True を に設定
 ※デフォルトは False

Slide 26

Slide 26 text

X-Rayを有効化する(API Gatewayの設定) TracingEnabled True を に設定
 ※デフォルトは False これでAPI GatewayとLambdaの設定は完了

Slide 27

Slide 27 text

X-Rayを有効化する(API Gatewayの設定) TracingEnabled True を に設定
 ※デフォルトは False これでAPI GatewayとLambdaの設定は完了 → これだけだと、この2つのサービスしかトレース対象にならない

Slide 28

Slide 28 text

関連サービスもトレース対象にする AWS SAM ここもトレース対象としたい 設定済み

Slide 29

Slide 29 text

関連サービスもトレース対象にする Lambdaのコードにsdkを使用して を追加する patch_all() 例:サポートされているすべてのライブラリにパッチを適用

Slide 30

Slide 30 text

関連サービスもトレース対象にする 全体ではなく、特定のAWSサービスのみを対象としたい場合

Slide 31

Slide 31 text

関連サービスもトレース対象にする 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

Slide 32

Slide 32 text

AWSではない外部APIもトレース対象にする 外部APIを呼び出している場合もX-Rayでトレースが可能

Slide 33

Slide 33 text

AWSではない外部APIもトレース対象にする 実際にトレース対象としたX-Rayの画面

Slide 34

Slide 34 text

AWSではない外部APIもトレース対象にする 実際にトレース対象としたX-Rayの画面

Slide 35

Slide 35 text

AWSではない外部APIもトレース対象にする 実際にトレース対象としたX-Rayの画面

Slide 36

Slide 36 text

AWSではない外部APIもトレース対象にする 実際にトレース対象としたX-Rayの画面

Slide 37

Slide 37 text

トレース全般に関する注意

Slide 38

Slide 38 text

トレース全般に関する注意 ① サンプリングはデフォルトのサンプリングルールで実行される ②データの完全性は保証されない ③ 直近30日間のみ追跡データを保存

Slide 39

Slide 39 text

① サンプリングはデフォルトのサンプリングルールで実行される 1秒間に2回リクエストされた場合 2回目のリクエストがトレースされる保証はない  デフォルトのサンプリングルールに従ってリクエストが記録されP  ルールは「1秒ごとに最初のリクエストは必ずトレースR  それ以降のリクエストについては全体の5%がトレースされる

Slide 40

Slide 40 text

① サンプリングはデフォルトのサンプリングルールで実行される H サンプリングルールでデータの量を制御してい8 H またパフォーマンスへの影響をコントロールしている なぜサンプリングルールが必要なのか… X-Rayはトレース数で課金される 100%トレースする設定も可能だが、上記を考慮する必要あり

Slide 41

Slide 41 text

②データの完全性は保証されない AWS X-Rayは監査やコンプライアンスのツールとしては使用不可 
 データの完全性は保証されない 収集されるデータは統計的に有意なリクエスト数に基づいているが、 https://aws.amazon.com/jp/xray/faqs/

Slide 42

Slide 42 text

③ 直近30日間のみ追跡データを保存 X-Rayのトレースデータ保持期間は、直近30日間 https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-console-deeplinks.html ちなみにX-Rayのトレースを探す際の時間範囲は6時間まで
 > 時間範囲は UTC で、最大で6時間にすることができます。

Slide 43

Slide 43 text

実際にX-Rayを導入した感想

Slide 44

Slide 44 text

実際にX-Rayを導入した感想 h どこで遅延が発生しやすいのか調査可能‡ h 特にLambdaのタイムアウト調査の時に効果を発P h 費用面も(今回のサービスでは)問題になるほど、高くなくて良„ h ただトレースが探しにくい!H h コンソールでの範囲6時間制限や30日で消えてしまうのが、やっぱり 使いにくさに繋がっている https://aws.amazon.com/jp/xray/faqs/

Slide 45

Slide 45 text

おまけ

Slide 46

Slide 46 text

おまけ X-Rayの有効/無効をtemplate.ymlで制御してみる やりたかったこ0 … SAMのテンプレート(template.yml)では、環境毎にリソースを定義済S … 「商用環境はX-Rayを有効化」「開発環境は無効」のように環境毎に
 有効/無効をパラメータでスイッチングしたい

Slide 47

Slide 47 text

XRAY_ENABLE_FLAG という変数を定義し、他のリソースでこの値を参照す ることにした

Slide 48

Slide 48 text

TracingEnabled: !If [ IsEnabledXRayTracing, True, False ] API GatewayでのX-Ray有効化

Slide 49

Slide 49 text

LambdaでのX-Ray有効化

Slide 50

Slide 50 text

まとめ P Lambdaのどの処理でレスポンスに遅延が発生するかを特定でき0 P SAMなどのIaCで管理もでき0 P 30日でログが追えなくなるので注意…

Slide 51

Slide 51 text

Thank You !!