Use the AppDynamics AWS Lambda Extension to Instrument Serverless APM at Runtime
This page explains how to use the Splunk AppDynamics AWS Lambda Extension for Serverless APM (the Splunk AppDynamics Lambda extension), the recommended way to inject the Serverless Tracer at runtime. Use this option to dynamically add a layer to a Node.js or Python application.
- For questions related to AWS Lambda, see AWS Lambda Documentation.
- For questions related to Splunk AppDynamics AWS Lambda Extension for Serverless APM, see Serverless APM for AWS Lambda.
はじめる前に
Serverless APM for AWS Lambda への登録AWS Lambda 向けサーバーレス APM に登録し、環境変数を設定すると、インストルメンテーションを開始できます。セットアップが次の要件を満たしていることを確認します。
-
既存の AWS Lambda 関数が Node.js バージョン 16.x、18.x、20.x または Python 3.7、3.8、3.9、Java 17、Java 21 で作成されている
- AWS Lambda 向けアクティブサーバレス APM のサブスクリプション
- Splunk AppDynamics SaaS コントローラバージョン 4.5.11 以上
- サポートされる AWS リージョン:eu-central-1、eu-north-1、eu-west-1、eu-west-2、eu-west-3、ap-northeast-1、ap-northeast-2、ap-south-1、ap-southeast-1、ap-southeast-2、ca-central-1、sa-east-1、us-east-1、us-east-2、us-west-1、us-west-2
AWS Lambda レイヤを使用して実行時にサーバレストレーサを挿入する
Node.js または Python サーバーレストレーサをインストールするには、Splunk AppDynamics AWS Lambda Extension for Serverless APM を実装するレイヤを使用するように Lambda 関数を構成します。これを実行する方法は、Lambda 関数が zip アーカイブとしてパッケージ化されているか、コンテナイメージとしてパッケージ化されているかによって異なります。
zip アーカイブとしてパッケージ化されている場合に AWS Lambda Extension を関数に追加する
AWS UI を使用した Lambda 関数のインストゥルメント化
AWS CLI を使用した Lambda 関数のインストゥルメント化
AWS CLI を使用して Amazon から Splunk AppDynamics レイヤをプルするには1、次の手順を実行します。
- 「レイヤを使用するための関数の設定」を参照してください。
- 「環境変数の設定」を参照してください。
環境変数の設定
AWS Lambda へのトレーサの挿入を完了するには、プログラミング言語とバージョンに応じて環境変数を構成します。
Node 16.x、Node 18.x、Node 20.x、Python 3.9 ~ 3.13、Java 17、Java 21
環境変数 AWS_LAMBDA_EXEC_WRAPPER を値を /opt/appdynamics-extension-script にして追加します。
AWS_LAMBDA_EXEC_WRAPPER = /opt/appdynamics-extension-script
コンテナイメージとしてパッケージ化されている場合に AWS Lambda Extension を関数に追加する
Lambda 関数がコンテナイメージとして展開されている場合、関数設定を通じて Lambda レイヤを追加することはできません。代わりに、ビルドプロセス中にコンテナイメージの一部として拡張機能をパッケージ化する必要があります。詳しくは、この AWS のブログ記事を参照してください。
Cisco AppDynamics Lambda 拡張機能を Lambda コンテナに追加するには、次のような Dockerfile を使用する必要があります。
- Node.js 20
-
JSON
FROM amazon/aws-cli:2.2.4 AS downloader ARG version_number=10 ARG access_key ARG secret_key ARG region ARG cachebust ENV AWS_ACCESS_KEY_ID=${access_key} ENV AWS_SECRET_ACCESS_KEY=${secret_key} ENV AWS_REGION=${region} ENV VERSION_NUMBER=${version_number} RUN yum install -y jq curl RUN echo "Cache Bust: $cachebust" RUN aws lambda get-layer-version-by-arn --arn arn:aws:lambda:$AWS_REGION:716333212585:layer:appdynamics-lambda-extension:$VERSION_NUMBER | jq -r '.Content.Location' | xargs curl -o extension.zip FROM public.ecr.aws/lambda/nodejs:20 COPY --from=downloader /aws/extension.zip . RUN yum install -y unzip && unzip extension.zip -d /opt && rm -f extension.zip COPY package.json ./ RUN npm install COPY app.js ./ # You can overwrite command in `serverless.yml` template CMD ["app.handler"] - Node.js 18
-
JSON
FROM amazon/aws-cli:2.2.4 AS downloader ARG version_number=10 ARG access_key ARG secret_key ARG region ARG cachebust ENV AWS_ACCESS_KEY_ID=${access_key} ENV AWS_SECRET_ACCESS_KEY=${secret_key} ENV AWS_REGION=${region} ENV VERSION_NUMBER=${version_number} RUN yum install -y jq curl RUN echo "Cache Bust: $cachebust" RUN aws lambda get-layer-version-by-arn --arn arn:aws:lambda:$AWS_REGION:716333212585:layer:appdynamics-lambda-extension:$VERSION_NUMBER | jq -r '.Content.Location' | xargs curl -o extension.zip FROM public.ecr.aws/lambda/nodejs:18 COPY --from=downloader /aws/extension.zip . RUN yum install -y unzip && unzip extension.zip -d /opt && rm -f extension.zip COPY package.json ./ RUN npm install COPY app.js ./ # You can overwrite command in `serverless.yml` template CMD ["app.handler"] - Node.js 16
-
JSON
FROM amazon/aws-cli:2.2.4 AS downloader ARG version_number=10 ARG access_key ARG secret_key ARG region ARG cachebust ENV AWS_ACCESS_KEY_ID=${access_key} ENV AWS_SECRET_ACCESS_KEY=${secret_key} ENV AWS_REGION=${region} ENV VERSION_NUMBER=${version_number} RUN yum install -y jq curl RUN echo "Cache Bust: $cachebust" RUN aws lambda get-layer-version-by-arn --arn arn:aws:lambda:$AWS_REGION:716333212585:layer:appdynamics-lambda-extension:$VERSION_NUMBER | jq -r '.Content.Location' | xargs curl -o extension.zip FROM public.ecr.aws/lambda/nodejs:16 COPY --from=downloader /aws/extension.zip . RUN yum install -y unzip && unzip extension.zip -d /opt && rm -f extension.zip COPY package.json ./ RUN npm install COPY app.js ./ # You can overwrite command in `serverless.yml` template CMD ["app.handler"] - Python 3.9
-
JSON
FROM amazon/aws-cli:2.2.4 AS downloader ARG version_number=10 ARG access_key ARG secret_key ARG region ARG cachebust ENV AWS_ACCESS_KEY_ID=${access_key} ENV AWS_SECRET_ACCESS_KEY=${secret_key} ENV AWS_REGION=${region} ENV VERSION_NUMBER=${version_number} RUN yum install -y jq curl RUN echo "Cache Bust: $cachebust" RUN aws lambda get-layer-version-by-arn --arn arn:aws:lambda:$AWS_REGION:716333212585:layer:appdynamics-lambda-extension:$VERSION_NUMBER | jq -r '.Content.Location' | xargs curl -o extension.zip FROM public.ecr.aws/lambda/python:3.9 COPY --from=downloader /aws/extension.zip . RUN yum install -y unzip && unzip extension.zip -d /opt && rm -f extension.zip COPY app.py ./ # You can overwrite command in `serverless.yml` template CMD ["app.handler"] - Python 3.10
-
JSON
FROM amazon/aws-cli:2.2.4 AS downloader ARG version_number=10 ARG access_key ARG secret_key ARG region ARG cachebust ENV AWS_ACCESS_KEY_ID=${access_key} ENV AWS_SECRET_ACCESS_KEY=${secret_key} ENV AWS_REGION=${region} ENV VERSION_NUMBER=${version_number} RUN yum install -y jq curl RUN echo "Cache Bust: $cachebust" RUN aws lambda get-layer-version-by-arn --arn arn:aws:lambda:$AWS_REGION:716333212585:layer:appdynamics-lambda-extension:$VERSION_NUMBER | jq -r '.Content.Location' | xargs curl -o extension.zip FROM public.ecr.aws/lambda/python:3.10 COPY --from=downloader /aws/extension.zip . RUN yum install -y unzip && unzip extension.zip -d /opt && rm -f extension.zip COPY app.py ./ # You can overwrite command in `serverless.yml` template CMD ["app.handler"] - Python 3.11
-
JSON
FROM amazon/aws-cli:2.2.4 AS downloader ARG version_number=10 ARG access_key ARG secret_key ARG region ARG cachebust ENV AWS_ACCESS_KEY_ID=${access_key} ENV AWS_SECRET_ACCESS_KEY=${secret_key} ENV AWS_REGION=${region} ENV VERSION_NUMBER=${version_number} RUN yum install -y jq curl RUN echo "Cache Bust: $cachebust" RUN aws lambda get-layer-version-by-arn --arn arn:aws:lambda:$AWS_REGION:716333212585:layer:appdynamics-lambda-extension:$VERSION_NUMBER | jq -r '.Content.Location' | xargs curl -o extension.zip FROM public.ecr.aws/lambda/python:3.11 COPY --from=downloader /aws/extension.zip . RUN yum install -y unzip && unzip extension.zip -d /opt && rm -f extension.zip COPY app.py ./ # You can overwrite command in `serverless.yml` template CMD ["app.handler"] - Python 3.12
-
JSON
FROM amazon/aws-cli:2.2.4 AS downloader ARG version_number=10 ARG access_key ARG secret_key ARG region ARG cachebust ENV AWS_ACCESS_KEY_ID=${access_key} ENV AWS_SECRET_ACCESS_KEY=${secret_key} ENV AWS_REGION=${region} ENV VERSION_NUMBER=${version_number} RUN yum install -y jq curl RUN echo "Cache Bust: $cachebust" RUN aws lambda get-layer-version-by-arn --arn arn:aws:lambda:$AWS_REGION:716333212585:layer:appdynamics-lambda-extension:$VERSION_NUMBER | jq -r '.Content.Location' | xargs curl -o extension.zip FROM public.ecr.aws/lambda/python:3.12 COPY --from=downloader /aws/extension.zip . RUN yum install -y unzip && unzip extension.zip -d /opt && rm -f extension.zip COPY app.py ./ # You can overwrite command in `serverless.yml` template CMD ["app.handler"] - Python 3.13
-
JSON
FROM amazon/aws-cli:2.2.4 AS downloader ARG version_number=10 ARG access_key ARG secret_key ARG region ARG cachebust ENV AWS_ACCESS_KEY_ID=${access_key} ENV AWS_SECRET_ACCESS_KEY=${secret_key} ENV AWS_REGION=${region} ENV VERSION_NUMBER=${version_number} RUN yum install -y jq curl RUN echo "Cache Bust: $cachebust" RUN aws lambda get-layer-version-by-arn --arn arn:aws:lambda:$AWS_REGION:716333212585:layer:appdynamics-lambda-extension:$VERSION_NUMBER | jq -r '.Content.Location' | xargs curl -o extension.zip FROM public.ecr.aws/lambda/python:3.13 COPY --from=downloader /aws/extension.zip . RUN yum install -y unzip && unzip extension.zip -d /opt && rm -f extension.zip COPY app.py ./ # You can overwrite command in `serverless.yml` template CMD ["app.handler"]
コードと Cisco AppDynamics Lambda 拡張を含むコンテナイメージを作成するには、現在のディレクトリに正しい Dockerfile があることを確認し、docker build コマンドを使用します。次に例を示します。
docker build --build-arg version_number=$version_number --build-arg access_key=$(aws configure get aws_access_key_id) --build-arg secret_key=$(aws configure get aws_secret_access_key) --build-arg region=$(aws configure get region) -t <your tag> --build-arg cachebust=$(date +%s) .
サーバレス トレーサ インストゥルメンテーションの確認
「サーバーレス トレーサ インストゥルメンテーションの確認」を参照してください。