CLI を使って、AWS Lambda 関数を Datadog でインスツルメントすることができます。CLI は既存の Lambda 関数のコンフィギュレーションを変更することでインスツルメンテーションを可能にするため、再デプロイは必要ありません。Datadog のサーバーレスモニタリングをはじめるにはこの方法が最速です。

CI/CD パイプラインにコマンドを追加してすべてのサーバーレスアプリケーションにインスツルメンテーションを有効化することも可能です。Datadog CLI コマンドによる変更が上書きされないよう、通常のサーバーレスアプリケーションのデプロイにコマンドを実行します。

インストール

datadog-ci lambda instrument コマンドを使用して Lambda 関数をインスツルメントするには、以下に示す特定のランタイム用の手順に従います。

コマンド

instrument

datadog-ci lambda instrument を実行して 、Datadog インスツルメンテーションを Lambda に適用します。このコマンドは、Datadog Lambda ライブラリおよび/または Datadog Lambda 拡張機能を Lambda レイヤーとして、インスツルメントされた Lambda 関数に追加し、そのコンフィギュレーションを変更します。


datadog-ci lambda instrument -f <function-name> -f <another-function-name> -r us-east-1 -v 81 -e 49

# フル ARN で指定された複数の関数をインスツルメントする
datadog-ci lambda instrument -f <lambda-arn> -f <another-lambda-arn> -f <a-third-lambda-arn> -v 81 -e 49

# インタラクティブモードで関数をインスツルメントする
datadog-ci lambda instrument -i

# 正規表現パターンにマッチする複数の関数をインスツルメントする
datadog-ci lambda instrument --functions-regex <valid-regex-pattern> -r us-east-1 -v 81 -e 49

# すべてのアップデートのドライラン
datadog-ci lambda instrument -f <function-name> -f <another-function-name> -r us-east-1 -v 81 -e 49 --dry-run

uninstrument

datadog-ci lambda uninstrument を実行すると、Lambda 内の Datadog インスツルメンテーションを元に戻すことができます。このコマンドは、Datadog Lambda ライブラリや Datadog Lambda 拡張機能レイヤーなど、datadog-ci によって適用された Datadog の構成を自動的に削除してくれます。

# 名前で指定された複数の関数をアンインスツルメントする
datadog-ci lambda uninstrument -f <function-name> -f <another-function-name> -r us-east-1

# インタラクティブモードで関数をアンインスツルメントする
datadog-ci lambda uninstrument -i

# 正規表現にマッチする複数の関数をアンインスツルメントする
datadog-ci lambda uninstrument --functions-regex <valid-regex-pattern> -r us-east-1

# すべてのアップデートのドライラン
datadog-ci lambda uninstrument -f <function-name> -f <another-function-name> -r us-east-1 --dry-run

コンフィギュレーションセクションでその設定を確認します。

コンフィギュレーション

AWS 資格情報

datadog-ci lambda コマンドを実行する Lambda と CloudWatch サービスへのアクセスが構成された有効な AWS 資格情報が必要です。

環境変数

これらの環境変数は、datadog-ci lambda instrument を実行している環境で公開する必要があります。

環境変数説明
DATADOG_API_KEYDatadog API キー。Lambda 関数の構成に DD_API_KEY 環境変数を設定します。Datadog API キーの取得の詳細については、API キーのドキュメントを参照してください。export DATADOG_API_KEY=<API_KEY>
DATADOG_API_KEY_SECRET_ARNAWS Secrets Manager に Datadog の API キーを格納するシークレットの ARN です。Lambda 関数の構成に DD_API_KEY_SECRET_ARN を設定します。注: DD_KMS_API_KEY が設定されている場合、 DD_API_KEY_SECRET_ARN は無視されます。Lambda の実行ロールに secretsmanager:GetSecretValue 権限を追加してください。export DATADOG_API_KEY_SECRET_ARN=<SECRETS_MANAGER_RESOURCE_ARN>
DATADOG_KMS_API_KEYKMS を使用して暗号化された Datadog API キー。Lambda 関数のコンフィギュレーションに DD_KMS_API_KEY 環境変数を設定します。注: DD_KMS_API_KEY が設定されている場合、DD_API_KEY は無視されます。export DATADOG_KMS_API_KEY=<KMS_ENCRYPTED_API_KEY>
DATADOG_SITEデータを送信する Datadog サイトを設定します。Datadog Lambda Extension を使用する場合にのみ必要です。可能な値は、datadoghq.comdatadoghq.euus3.datadoghq.comus5.datadoghq.comap1.datadoghq.comddog-gov.com です。デフォルトは datadoghq.com です。Lambda 関数設定に DD_SITE 環境変数を設定します。export DATADOG_SITE="datadoghq.com"

引数

コンフィギュレーションは、コマンドライン引数または JSON コンフィギュレーションファイル (次のセクションを参照) を使って行うことができます。

instrument

以下の引数を instrument に渡してその行動を指定します。引数は、コンフィギュレーションファイルに設定されている値がある場合、これを上書きします。

引数省略形説明デフォルト
--function-fインスツルメントする Lambda 関数の ARN、または Lambda 関数の名前 (--region を定義する必要があります)。
--functions-regexLambda 関数名とマッチする正規表現パターン。
--interactive-i関数がどのようにインスツルメントされるかを、ユーザーが対話的に選択できるようにします。インタラクティブモードを使用する場合は、代わりに情報の入力を求められるため、他のフラグを指定する必要はありません。
--region-r--function が ARN ではなく関数名で指定されている場合に使用するデフォルトのリージョン。
--service類似のワークロードに属する関連関数をグループ化するには、--service を使用します。service タグについて詳しくは、こちらを参照してください。
--version—version タグを追加して、遅延、負荷、エラーのスパイクを新しいバージョンに関連付けることができます。version タグについて詳しくは こちらを参照してください。
--envステージング環境、開発環境、本番環境を分けるには、—env を使用します。env タグについて詳しくは こちらを参照してください。
--extra-tagsDatadog の Lambda 関数にカスタムタグを追加します。layer:api,team:intake のようなカンマで区切られた <key>:<value> のリストである必要があります。
--profileインスツルメンテーションに使用する AWS 名前付きプロファイルの資格情報を指定します。AWS 名前付きプロファイルの詳細はこちらを参照してください。
--layer-version-v適用する Datadog Lambda ライブラリレイヤーのバージョン。これはランタイムによって異なります。最新のレイヤーバージョンを確認するには、JS または python datadog-lambda-layer リポジトリのリリースノートを確認してください。
--extension-version-e適用する Datadog Lambda Extension レイヤーのバージョン。extension-version が設定されている場合は、お使いの環境でも必ず DATADOG_API_KEY (または暗号化されている場合は DATADOG_KMS_API_KEY または DATADOG_API_KEY_SECRET_ARN) をエクスポートしてください。extension-version を使用する場合は、forwarder を省略します。Lambda Extension の詳細はこちら
--tracingLambda で dd-trace トレースを有効にするかどうか。true
--merge-xray-tracesdd-trace トレースを AWS X-Ray トレースに結合するかどうか。API ゲートウェイスパンのトレースに役立ちます。false
--flush-metrics-to-logsDatadog Forwarder 経由でメトリクスを非同期で送信するかどうか。このパラメーターを無効にすると、DATADOG_API_KEY (暗号化されている場合は DATADOG_KMS_API_KEY または DATADOG_API_KEY_SECRET_ARN) をエクスポートする必要があります。true
--capture-lambda-payloadLambda 呼び出しのペイロードとレスポンスをキャプチャして保存するかどうか。false
--forwarderこの関数の LogGroup をアタッチする datadog forwarder の ARN。
--dry-run-dコマンドを実行している変更のプレビューが適用されます。false
--log-levelDatadog Lambda ライブラリおよび/または Lambda 拡張機能から追加の出力をトラブルシューティングのために確認するには、debug を設定します。
--source-code-integration-sDatadog ソースコードインテグレーションを有効にするかどうか。これにより、Lambda に Git リポジトリの URL と、現在のローカルディレクトリの最新のコミットハッシュがタグ付けされます。: Git リポジトリはリモートより先に存在してはいけませんし、ダーティであってはいけません。true
--no-source-code-integrationDatadog ソースコードインテグレーションを無効にします。
--upload-git-metadata-uソースコードインテグレーションの一部として、Git メタデータのアップロードを有効にするかどうか。Git メタデータのアップロードは、Datadog Github インテグレーションをインストールしていない場合のみ必要です。true
--no-upload-git-metadataソースコードインテグレーションの一部として、Git メタデータのアップロードを無効にします。Datadog Github インテグレーションをインストールしている場合、このフラグを使用すると、Git メタデータのアップロードが不要になります。
--apm-flush-deadlineタイムアウトが発生する前にスパンを送信するタイミングをミリ秒単位で決定するために使用されます。AWS Lambda の呼び出しの残り時間が設定された値よりも小さい場合、トレーサーは、現在のアクティブなスパンとすべての終了したスパンの送信を試みます。NodeJS と Python でサポートされています。デフォルトは 100 ミリ秒です。

uninstrument

以下の引数を uninstrument に渡してその行動を指定します。引数は、コンフィギュレーションファイルに設定されている値がある場合、これを上書きします。

必要であれば、より早くアンインスツルメントできるように、instrument テーブルに記述された他の引数は無視されます。

引数省略形説明デフォルト
--function-fアンインスツルメントする Lambda 関数の ARN、または Lambda 関数の名前 (--region を定義する必要があります)。
--functions-regexアンインスツルメントする Lambda 関数名とマッチする正規表現パターン。
--region-r--function が ARN ではなく関数名で指定されている場合に使用するデフォルトのリージョン。
--profileアンインスツルメンテーションに使用する AWS 名前付きプロファイルの資格情報を指定します。AWS 名前付きプロファイルの詳細はこちらを参照してください。
--forwarderこの関数から削除する datadog forwarder の ARN。
--dry-run-dコマンドを実行している変更のプレビューが適用されます。false

構成ファイル

引数を指定する代わりに、プロジェクト内にコンフィギュレーションファイルを作成し、各デプロイで datadog-ci lambda {instrument|uninstrument} --config datadog-ci.json コマンドを実行します。--config 引数を使って datadog-ci.json を指定し、このコンフィギュレーションファイルの構造を使用します。

{
    "lambda": {
        "layerVersion": 10,
        "extensionVersion": 8,
        "functions": ["arn:aws:lambda:us-east-1:000000000000:function:autoinstrument"],
        "region": "us-east-1",
        "tracing": true,
        "mergeXrayTraces": true,
        "captureLambdaPayload": true,
        "forwarder": "arn:aws:lambda:us-east-1:000000000000:function:datadog-forwarder",
        "logLevel": "debug",
        "service": "some-service",
        "version": "b17s47h3w1n",
        "profile": "my-credentials",
        "environment": "staging",
        "extraTags": "layer:api,team:intake"
    }
}

Lambda インスツルメンテーションのトラブルシューティング

Lambda 関数の Datadog モニタリングで発生した問題をトラブルシューティングするには、プロジェクトディレクトリの root で datadog-ci lambda flare コマンドを実行します。このコマンドは、環境変数やコンフィギュレーションファイルなど、Lambda 関数に関する重要なデータを収集します。これらのファイルは、提供された Zendesk のケース ID に一致するチケットを介して Datadog サポートに送信されます。

: このコマンドは datadog-ci lambda instrument を使用して Lambda 関数をインスツルメントしてもしなくても動作します。

# Datadog サポートに単一関数でファイルを収集・送信する
datadog-ci lambda flare -f <function-arn> -c <case-id> -e <email-on-case-id>

# 最近の CloudWatch ログを含める
datadog-ci lambda flare -f <function-name> -r <AWS region> -c <case-id> -e <email-on-case-id> --with-logs

# ドライラン: データを収集するが、Datadog サポートには送信しない
datadog-ci lambda flare -f <function-arn> -c <case-id> -e <email-on-case-id> --with-logs --dry-run

引数

引数省略形説明デフォルト
--function-fデータを収集する Lambda 関数の ARN、または Lambda 関数の名前 (--region が定義されている必要があります)。
--region-r--function が ARN ではなく関数名で指定されている場合に使用するデフォルトのリージョン。
--case-id-cファイル送信先の Datadog ケース ID。
--email-e指定されたケース ID に関連付けられたメールアドレス。
--with-logs指定した関数の最近の CloudWatch ログを収集します。false
--start および --end時間範囲内のログのみを収集します (--with-logs を含める必要があります)。どちらの引数も Unix Epoch からのミリ秒単位です。
--dry-run-dDatadog サポートに送信される収集データをプレビューします。false

コミュニティ

製品のフィードバックや質問については、Slack の Datadog コミュニティ#serverless チャンネルに参加してください。

Icon/world Created with Sketch.   日本語