Unsupported-Field-Workshops
Auto-Instrumentation
Auto-Instrumentation #
自動計装コードが含まれる auto ディレクトリに移動します。
cd ~/o11y-lambda-lab/autoこのディレクトリ内のファイルの内容を確認します。serverless.yml テンプレートを見てみましょう。
cat serverless.ymlWorkshop Question
- このテンプレートによって作成される AWS エンティティを特定できますか?
- OpenTelemetry の計装がどこで設定されているか特定できますか?
- 環境変数によって提供されている計装情報を判別できますか?
各関数に Splunk OpenTelemetry Lambda レイヤーが追加されていることが確認できるはずです。
layers:
- arn:aws:lambda:us-east-1:254067382080:layer:splunk-apm:70各 AWS リージョンの関連するレイヤー ARN(Amazon Resource Name)と最新バージョンはこちらで確認できます: https://github.com/signalfx/lambda-layer-versions/blob/main/splunk-apm/splunk-apm.md
環境変数が設定されているセクションも確認できるはずです。
environment:
AWS_LAMBDA_EXEC_WRAPPER: /opt/nodejs-otel-handler
OTEL_RESOURCE_ATTRIBUTES: deployment.environment=${self:custom.prefix}-apm-lambda
OTEL_SERVICE_NAME: consumer-lambda
SPLUNK_ACCESS_TOKEN: ${self:custom.accessToken}
SPLUNK_REALM: ${self:custom.realm}環境変数を使用して、自動計装の設定とエンリッチメントを行っています。
ここでは、Splunk APM Layer 内の NodeJS ラッパーの場所、環境名、サービス名、Splunk Org の認証情報など、最小限の情報を提供しています。トレースデータは Splunk Observability Cloud に直接送信しています。代わりに、Gateway モードで設定された OpenTelemetry Collector にトレースをエクスポートすることもできます。
関数コードを確認してみましょう。
cat handler.jsWorkshop Question
- producer 関数のコードを特定できますか?
- consumer 関数のコードを特定できますか?
コード内に Splunk や OpenTelemetry への言及がないことに注目してください。計装は Lambda レイヤーと環境変数のみを使用して追加しています。
Lambda のデプロイ #
以下のコマンドを実行して Lambda Functions をデプロイします:
sls deployDeploying hostname-lambda-lab to stage dev (us-east-1)
...
...
endpoint: POST - https://randomstring.execute-api.us-east-1.amazonaws.com/dev/producer
functions:
producer: hostname-lambda-lab-dev-producer (1.6 kB)
consumer: hostname-lambda-lab-dev-consumer (1.6 kB)このコマンドは serverless.yml テンプレートの指示に従って、Lambda 関数と Kinesis ストリームを作成します。実行には1〜2分かかる場合があります。
Note
サーバーレス関数の詳細を確認します:
sls infoエンドポイントの値をメモしてください:
トラフィックの送信 #
curl コマンドを使用して producer 関数にペイロードを送信します。コマンドオプション -d の後にメッセージペイロードを指定します。
name の値をあなたの名前に変更し、Lambda 関数にあなたの超能力を伝えてみてください。YOUR_ENDPOINT を前のステップで取得したエンドポイントに置き換えてください。
curl -d '{ "name": "CHANGE_ME", "superpower": "CHANGE_ME" }' YOUR_ENDPOINT例:
curl -d '{ "name": "Kate", "superpower": "Distributed Tracing" }' https://xvq043lj45.execute-api.us-east-1.amazonaws.com/dev/producerメッセージが正常に送信された場合、以下の出力が表示されます:
{"message":"Message placed in the Event Stream: hostname-eventSteam"}失敗した場合は、以下が表示されます:
{"message": "Internal server error"}この場合は、ラボのファシリテーターに支援を依頼してください。
成功メッセージが表示されたら、さらに負荷を生成します: そのメッセージを5回以上再送信してください。送信するたびに成功メッセージが表示されるはずです。
Lambda のログ出力を確認します:
Producer 関数のログ:
sls logs -f producerConsumer 関数のログ:
sls logs -f consumerログを注意深く確認してください。
Workshop Question
