AWS Lambda Functions の分散トレーシング
Splunk APM、Lambda Functions とトレース
Lambda 関数はかなりの量のトレースデータを生成しているはずですので、それを確認する必要があります。Lambda 関数のリソース定義で設定した環境変数と OpenTelemetry Lambda レイヤーの組み合わせにより、Splunk APM で関数とトレースを表示する準備が整っているはずです。
まず、Splunk APM が受信しているトレースデータから Environment を認識していることを確認しましょう。これは main.tf の Lambda 関数定義で OTEL_RESOURCE_ATTRIBUTES 変数の一部として設定した deployment.name です。また、先ほど実行した terraform apply コマンドの出力の一つでもあります。
Splunk Observability Cloud で以下を行います
- 左側のメインメニューから
APMボタンをクリックします。Splunk APM の概要ページに移動します。 Environment:ドロップダウンから APM 環境を選択します。- APM 環境は
PREFIX-lambda-shopの形式になっています。PREFIXは前提条件セクションで設定した環境変数から取得されます。
- APM 環境は
Warning

Environment ドロップダウンから環境名を選択したら、Lambda 関数の Service Map を確認できます。
- APM 概要ページの右側にある
Service Mapボタンをクリックします。Service Map ビューに移動します。

producer-lambda 関数と、レコードを配置するために Kinesis Stream に対して行っている呼び出しを確認できるはずです。

ワークショップの質問
Lambda 関数からのトレースを探索する
Tracesボタンをクリックして Trace Analyzer を表示します。

このページでは、producer-lambda 関数の OpenTelemetry Lambda レイヤーから取り込まれたトレースを確認できます。

- リストからトレースを選択して確認するには、ハイパーリンクされた
Trace IDをクリックします。

producer-lambda 関数が Kinesis Stream にレコードを配置していることがわかります。しかし、consumer-lambda 関数のアクションが見つかりません!
これはトレースコンテキストが伝播されていないためです。このワークショップの時点では、Kinesis サービスによるトレースコンテキストの伝播はすぐに使える状態ではサポートされていません。分散トレースは Kinesis サービスで停止し、そのコンテキストがストリームを通じて自動的に伝播されないため、それ以上先を確認することができません。
まだ、ですが…
このワークショップの次のセクションで、この問題を回避する方法を見ていきましょう。その前に、クリーンアップを行いましょう!
メッセージを停止する
この自動計装の演習の一部としてデプロイしたリソースをクリーンアップする必要があります。同様に、producer-lambda エンドポイントに対してトラフィックを生成していたスクリプトも、まだ実行中であれば停止する必要があります。以下の手順に従ってクリーンアップを行ってください。
send_message.pyスクリプトがまだ実行中の場合は、以下のコマンドで停止します
fg- これによりバックグラウンドプロセスがフォアグラウンドに戻ります。
- 次に
[CONTROL-C]を押してプロセスを終了します。
すべての AWS リソースを破棄する
Terraform はリソースを個別に、またデプロイメントとして状態管理するのに優れています。定義の変更に応じてデプロイ済みリソースを更新することもできます。しかし、新たに始めるために、このワークショップの手動計装部分の一部としてリソースを破棄して再デプロイします。
以下の手順に従ってリソースを破棄してください
autoディレクトリに移動します
cd ~/workshop/lambda/auto- 先ほどデプロイした Lambda 関数やその他の AWS リソースを破棄します
terraform destroyEnter a value:プロンプトが表示されたらyesと応答します- これによりリソースが破棄され、クリーンな環境が残ります
このプロセスにより、アクティビティの結果として作成されたファイルやディレクトリは残ります。それらについて心配する必要はありません。
