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

AppDynamics AWS Lambda 拡張機能は、Node.js サーバーレス トレーサ バージョン 23.3.404 では機能しません。

このドキュメントは、AppDynamics と組み合わせて AppDynamics AWS Lambda Extension for Serverless APM を使用するための情報を提供することを目的としています。AWS Lambda は AWS によって管理され、AppDynamics ソリューションとは別の製品です。

はじめる前に

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

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

  • AWS Lambda 向けアクティブサーバレス APM のサブスクリプション
  • 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 サーバレストレーサをインストールするには、AppDynamics AWS Lambda Extension for Serverless APM を実装するレイヤを使用するように Lambda 関数を構成します。これを実行する方法は、Lambda 関数が zip アーカイブとしてパッケージ化されているか、コンテナイメージとしてパッケージ化されているかによって異なります。

zip アーカイブとしてパッケージ化されている場合に AWS Lambda Extension を関数に追加する

Amazon から AppDynamics レイヤをプルするには、AWS Management Console UI または AWS CLI を使用して、Lambda に Amazon Resource Number(ARN)を追加します。

  1. AWS Lambda Extension を関数に追加する
  2. 環境変数の設定

AWS UI を使用した Lambda 関数のインストゥルメント化

  1. AWS Management Console コンソールで、[Compute > Lambda] を選択します。
  2. [AWS Lambda] パネルから、インストゥルメント化する lambda を選択します。 
  3. [Layers] を選択します。
  4. クリック Add a layer.
  5. [Choose a layer] で、[Specify an ARN. ] を選択します。
  6. [Specify an ARN, ] で、AWS レイヤ情報を入力します。

    arn:aws:lambda:us-west-2:338050622354:layer:appdynamics-lambda-extension:22
    BASH

    ARN リージョンは、ラムダが展開されている AWS リージョンに基づいて変更されます。たとえば、ラムダが Europe (Frankfurt) eu-central-1 の場合、次を使用します。

    arn:aws:lambda:eu-central-1:338050622354:layer:appdynamics-lambda-extension:22
    BASH
  7. クリック Add.

  8. レイヤがラムダに追加されたことを確認するには、[Layers] をクリックします。[Layers] の下に、appdynamics-lambda-extension が表示されます。

  9. 環境変数の設定」を参照してください。

AWS CLI を使用した Lambda 関数のインストゥルメント化

AWS CLI を使用して Amazon から AppDynamics レイヤをプルするには、次の手順を実行します。

  1. レイヤを使用するための関数の設定」を参照してください。
  2. 環境変数の設定」を参照してください。

環境変数の設定

AWS Lambda へのトレーサの挿入を完了するには、プログラミング言語とバージョンに応じて環境変数を構成します。

Node 10.x、Node 12.x、Node 14.x、Node 16.x、Node 18.x、Python 3.8、および Python 3.9

環境変数 AWS_LAMBDA_EXEC_WRAPPER を値 /opt/appdynamics-extension-script: で追加します。

AWS_LAMBDA_EXEC_WRAPPER = /opt/appdynamics-extension-script
BASH

Python 3.7 の場合

環境変数 APPDYNAMICS_PYTHON_AUTOINSTRUMENT を値を true: に設定して追加します。

APPDYNAMICS_PYTHON_AUTOINSTRUMENT = true
BASH

コンテナイメージとしてパッケージ化されている場合に AWS Lambda Extension を関数に追加する

Lambda 関数がコンテナイメージとして展開されている場合、関数設定を通じて Lambda レイヤを追加することはできません。代わりに、ビルドプロセス中にコンテナイメージの一部として拡張機能をパッケージ化する必要があります。詳しくは、この AWS のブログ記事を参照してください。

AppDynamics Lambda 拡張機能を Lambda コンテナに追加するには、次のような Dockerfile を使用する必要があります。

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"]
TEXT
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"]
TEXT
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:14
 
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"] 
TEXT
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:12

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


TEXT
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:10

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"]
TEXT
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"]  
TEXT
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.8

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


TEXT
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.7

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


TEXT

コードと 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) .
BASH

サーバレス トレーサ インストゥルメンテーションの確認

サーバーレス トレーサ インストゥルメンテーションの確認」を参照してください。

これらのマニュアルで使用されている Amazon Web サービス、AWS ロゴ、AWS、およびその他の AWS マークは、米国およびその他の国における Amazon.com, Inc. またはその関連会社の商標です。