AppDynamics AWS Lambda Extension を使用して、実行時にサーバレス APM をインストゥルメントする

このページでは、実行時にサーバーレストレーサを挿入するための推奨方法である Splunk AppDynamics AWS Lambda Extension for Serverless APM(Splunk AppDynamicsLambda 拡張機能)の使用方法について説明します。このオプションを使用して、Node.js または Python アプリケーションにレイヤを動的に追加します。

注: Splunk AppDynamics AWS Lambda 拡張機能は、Node.js サーバーレス トレーサ バージョン 23.3.404 では機能しません。
注: このドキュメントは、AppDynamics と組み合わせて Splunk AppDynamics AWS Lambda Extension for Serverless APM を使用するための情報を提供することを目的としています。AWS Lambda は AWS によって管理され、Splunk AppDynamics ソリューションとは別の製品です。

はじめる前に

Subscribe to Serverless APM for AWS LambdaAWS Lambda 向けサーバーレス APM に登録し、環境変数を設定すると、インストルメンテーションを開始できます。セットアップが次の要件を満たしていることを確認します。

  • 既存の AWS Lambda 関数が Node.js バージョン 16.x、18.x、20.x または Python 3.7 ~ 3.9 で作成されている

  • 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 アーカイブとしてパッケージ化されているか、コンテナイメージとしてパッケージ化されているかによって異なります。

Add the AWS Lambda Extension to Your Function when packaged as a zip archive

To pull the Cisco AppDynamicslayer from Amazon, add the Amazon Resource Number (ARN) to your Lambda using either the AWS Management Console UI or the AWS CLI.
  1. Add the AWS Lambda extension to your function.
  2. Configure environment variables.

Instrument a Lambda Function using the AWS UI

  1. In the AWS Management Console console, select Compute > Lambda.
  2. From the AWS Lambda panel, select a lambda that you want to instrument.
  3. Select Layers.
  4. Click Add a layer.
  5. Under Choose a layer, select Specify an ARN.
  6. Under Specify an ARN, enter the AWS Layer information:
    CODE
    arn:aws:lambda:us-west-2:338050622354:layer:appdynamics-lambda-extension:28
    The ARN region changes based on the AWS region where the lambda is deployed. For example, if your lambda isEurope (Frankfurt) eu-central-1, use:
    CODE
    arn:aws:lambda:eu-central-1:338050622354:layer:appdynamics-lambda-extension:28
  7. Click Add.
  8. To verify the layer is added to the lambda, click Layers.
    Under Layers, the appdynamics-lambda-extension displays.
See Configure environment variables.

Instrument a Lambda Function using AWS CLI

To pull the Splunk AppDynamics layer from Amazon1, using the AWS CLI:

  1. See Configuring a function to use layers.
  2. See Configure environment variables.

Configure Environment Variables

To finish injecting the tracer into AWS Lambda, configure environment variables depending on your programming language and version:

Node 16.x, Node 18.x, Node 20.x, and Python 3.9 to 3.13

Add the environment variable AWS_LAMBDA_EXEC_WRAPPER with the value: /opt/appdynamics-extension-script:

CODE
AWS_LAMBDA_EXEC_WRAPPER = /opt/appdynamics-extension-script

Add the AWS Lambda Extension to Your Function when packaged as a container image

When your Lambda functions are deployed as container images, Lambda layers cannot be added via the function configuration. Instead, you must package the extension as part of your container image during the build process. For more details refer to this AWS Blog article.

To add the Cisco AppDynamics Lambda extension to your Lambda container, you will need to use a Dockerfile like those provided below:

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"]

To build the container image containing your code as well as the Cisco AppDynamics Lambda extension, make sure you have the correct Dockerfile in your current directory and use the docker build command; for example:

CODE
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) .

Verify your Serverless Tracer Instrumentation

See Verify the Serverless Tracer Instrumentation.

1 Amazon Web Services, the AWS logo, AWS, and any other AWS Marks used in these materials are trademarks of Amazon.com, Inc. or its affiliates in the United States and/or other countries.