- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
Datadog Forwarder Lambda 関数は、AWS Lambda トレース、拡張メトリクス、カスタムメトリクス、ログの取り込みに必要です。
Datadog CLI は、既存の Lambda 関数のコンフィギュレーションを修正し、新しいデプロイを必要とせずにインスツルメンテーションを可能にします。Datadog のサーバーレスモニタリングをすばやく開始するための最適な方法です。
CI/CD パイプラインにコマンドを追加してすべてのサーバーレスアプリケーションにインスツルメンテーションを有効化することも可能です。Datadog CLI コマンドによる変更が上書きされないよう、通常のサーバーレスアプリケーションのデプロイ後にコマンドを実行します。
NPM または Yarn を使用して Datadog CLI をインストールします。
# NPM
npm install -g @datadog/datadog-ci
# Yarn
yarn global add @datadog/datadog-ci
関数をインスツルメントするには、AWS 資格情報を使用して次のコマンドを実行します。
datadog-ci lambda instrument -f <functionname> -f <another_functionname> -r <aws_region> -v <layer_version> --forwarder <forwarder_arn>
関数をインスツルメントするには、AWS CDK アプリの Stack
オブジェクトに DatadogServerless
変換と CfnMapping
を追加します。以下の Python のサンプルコードを参照してください (他の言語での使用方法も同様です)。
<functionname>
と <another_functionname>
を Lambda 関数名に置き換えます。<aws_region>
を AWS リージョン名に置き換えます。<layer_version>
を目的のバージョンの Datadog Lambda ライブラリに置き換えます。最新バージョンは 84
です。<forwarder_arn>
を Forwarder ARN に置き換えます (Forwarder のドキュメントを参照)。例:
datadog-ci lambda instrument -f my-function -f another-function -r us-east-1 -v 84 --forwarder "arn:aws:lambda:us-east-1:000000000000:function:datadog-forwarder"
Lambda 関数が、コード署名を使用するよう構成してある場合、Datadog CLI でインスツルメントするには事前に Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加する必要があります。
Lambda 関数が、コード署名を使用するよう構成してある場合、Datadog CLI でインスツルメントするには事前に Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加する必要があります。
CLI のドキュメントに詳細と追加のパラメーターがあります。
Datadog Serverless Plugin は、レイヤーを使用して Datadog Lambda ライブラリを関数に自動的に追加し、Datadog Forwarder を介してメトリクス、トレース、ログを Datadog に送信するように関数を構成します。
Lambda 関数が、コード署名を使用するよう構成してある場合、Datadog Serverless Plugin をインストールする前に Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加する必要があります。
Lambda 関数が、コード署名を使用するよう構成してある場合、Datadog Serverless Plugin をインストールする前に Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加する必要があります。
Datadog サーバーレスプラグインをインストールして構成するには、次の手順に従います。
yarn add --dev serverless-plugin-datadog
serverless.yml
に以下を追加します。plugins:
- serverless-plugin-datadog
serverless.yml
に、以下のセクションも追加します。custom:
datadog:
forwarderArn: # The Datadog Forwarder ARN goes here.
Datadog CloudFormation マクロは、SAM アプリケーションテンプレートを自動的に変換して、レイヤーを使用して Datadog Lambda ライブラリを関数に追加し、Datadog Forwarder を介してメトリクス、トレース、ログを Datadog に送信するように関数を構成します。
AWS 認証情報で次のコマンドを実行して、マクロ AWS リソースをインストールする CloudFormation スタックをデプロイします。アカウントの特定のリージョンに一度だけマクロをインストールする必要があります。マクロを最新バージョンに更新するには、create-stack
を update-stack
に置き換えます。
aws cloudformation create-stack \
--stack-name datadog-serverless-macro \
--template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM
マクロが表示され、使用を開始できます。
関数をインスツルメントするには、SAM の AWS::Serverless
変換の後に、Transform
セクションの下の template.yml
に以下を追加します。
Transform:
- AWS::Serverless-2016-10-31
- Name: DatadogServerless
Parameters:
pythonLayerVersion: "84"
stackName: !Ref "AWS::StackName"
forwarderArn: "<FORWARDER_ARN>"
service: "<SERVICE>" # オプション
env: "<ENV>" # オプション
関数をインスツルメントするには、AWS CDK アプリの Stack
オブジェクトに DatadogServerless
変換と CfnMapping
を追加します。以下の Python のサンプルコードを参照してください (他の言語での使用方法も同様です)。
<FORWARDER_ARN>
を Forwarder ARN に置き換えます (Forwarder のドキュメントを参照)。<SERVICE>
と <ENV>
をサービスと環境の値に置き換えます。Lambda 関数が、コード署名を使用するよう構成してある場合、マクロを使用するには事前に Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加する必要があります。
Lambda 関数が、コード署名を使用するよう構成してある場合、マクロを使用するには事前に Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加する必要があります。
マクロのドキュメントに詳細と追加のパラメーターがあります。
Datadog CloudFormation マクロは、AWS CDK によって生成された CloudFormation テンプレートを自動的に変換して、レイヤーを使用して Datadog Lambda ライブラリを関数に追加し、Datadog Forwarder を介してメトリクス、トレース、ログを Datadog に送信するように関数を構成します。
AWS 認証情報で次のコマンドを実行して、マクロ AWS リソースをインストールする CloudFormation スタックをデプロイします。アカウントの特定のリージョンに一度だけマクロをインストールする必要があります。マクロを最新バージョンに更新するには、create-stack
を update-stack
に置き換えます。
aws cloudformation create-stack \
--stack-name datadog-serverless-macro \
--template-url https://datadog-cloudformation-template.s3.amazonaws.com/aws/serverless-macro/latest.yml \
--capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_IAM
マクロが表示され、使用を開始できます。
関数をインスツルメントするには、AWS CDK アプリの Stack
オブジェクトに DatadogServerless
変換と CfnMapping
を追加します。以下の Python のサンプルコードを参照してください (他の言語での使用方法も同様です)。
from aws_cdk import core
class CdkStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
self.add_transform("DatadogServerless")
mapping = core.CfnMapping(self, "Datadog",
mapping={
"Parameters": {
"pythonLayerVersion": "84",
"forwarderArn": "<FORWARDER_ARN>",
"stackName": self.stackName,
"service": "<SERVICE>", # オプション
"env": "<ENV>", # オプション
}
})
関数をインスツルメントするには、AWS CDK アプリの Stack
オブジェクトに DatadogServerless
変換と CfnMapping
を追加します。以下の Python のサンプルコードを参照してください (他の言語での使用方法も同様です)。
<FORWARDER_ARN>
を Forwarder ARN に置き換えます (Forwarder のドキュメントを参照)。<SERVICE>
と <ENV>
をサービスと環境の値に置き換えます。Lambda 関数が、コード署名を使用するよう構成してある場合、マクロを使用するには事前に Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加する必要があります。
マクロのドキュメントに詳細と追加のパラメーターがあります。
zappa_settings.json
に下記の設定を追加します。{
"dev": {
"layers": ["arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:<VERSION>"],
"lambda_handler": "datadog_lambda.handler.handler",
"aws_environment_variables": {
"DD_LAMBDA_HANDLER": "handler.lambda_handler",
"DD_TRACE_ENABLED": "true",
"DD_FLUSH_TO_LOG": "true",
},
}
}
<AWS_REGION>
、<RUNTIME>
、<VERSION>
に適切な値を挿入します。RUNTIME
には Python27
、Python36
、Python37
、Python38
のいずれかを使用できます。最新の VERSION
は 84
です。例:# For regular regions
arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Python37:84
# For us-gov regions
arn:aws-us-gov:lambda:us-gov-east-1:002406178527:layer:Datadog-Python37:84
arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加します。zappa_settings.json
に下記の設定を追加します。{
"dev": {
"layers": ["arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-<RUNTIME>:<VERSION>"],
"lambda_handler": "datadog_lambda.handler.handler",
"aws_environment_variables": {
"DD_LAMBDA_HANDLER": "handler.lambda_handler",
"DD_TRACE_ENABLED": "true",
"DD_FLUSH_TO_LOG": "true",
},
}
}
<AWS_REGION>
、<RUNTIME>
、<VERSION>
に適切な値を挿入します。RUNTIME
には Python27
、Python36
、Python37
、Python38
のいずれかを使用できます。最新の VERSION
は 84
です。例:# For regular regions
arn:aws:lambda:us-east-1:417141415827:layer:Datadog-Python37:84
# For us-gov regions
arn:aws-us-gov:lambda:us-gov-east-1:002406178527:layer:Datadog-Python37:84
arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加します。メトリクス、トレース、ログを Datadog へ送信するには、関数の各ロググループに Datadog Forwarder Lambda 関数をサブスクライブします。
config.json
で環境変数 DD_TRACE_ENABLED
と DD_FLUSH_TO_LOG
を "true"
に設定します。{
"version": "2.0",
"app_name": "hello-chalice",
"stages": {
"dev": {
"api_gateway_stage": "api",
"environment_variables": {
"DD_TRACE_ENABLED": "true",
"DD_FLUSH_TO_LOG": "true"
}
}
}
}
requirements.txt
に datadog_lambda
を追加します。app.py
のミドルウェアとして datadog_lambda_wrapper
を登録します。from chalice import Chalice, ConvertToMiddleware
from datadog_lambda.wrapper import datadog_lambda_wrapper
app = Chalice(app_name='hello-chalice')
app.register_middleware(ConvertToMiddleware(datadog_lambda_wrapper))
@app.route('/')
def index():
return {'hello': 'world'}
arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加します。arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加します。メトリクス、トレース、ログを Datadog へ送信するには、関数の各ロググループに Datadog Forwarder Lambda 関数をサブスクライブします。
Lambda 関数をコンテナイメージとしてデプロイする場合は、Datadog Lambda ライブラリをレイヤーとして使用できません。代わりに、Datadog Lambda ライブラリを、イメージ内の関数の依存関係としてインストールする必要があります。
pip install datadog-lambda
datadog-lambda
パッケージのマイナーバージョンは、常にレイヤーのバージョンに一致します。たとえば、datadog-lambda v0.5.0
は、レイヤーバージョン 5 のコンテンツに一致します。
以下の手順に従って、関数を構成します。
CMD
値を datadog_lambda.handler.handler
に設定します。AWS で設定するか、Dockerfile 内で直接設定します。両方の値を設定した場合、AWS で設定した値が Dockerfile 内の値をオーバーライドします。DD_LAMBDA_HANDLER
を設定します。例: myfunc.handler
。DD_TRACE_ENABLED
を true
に設定します。DD_FLUSH_TO_LOG
を true
に設定します。service
および env
タグを適切な値とともに追加します。メトリクス、トレース、ログを Datadog へ送信するには、関数の各ロググループに Datadog Forwarder Lambda 関数をサブスクライブします。
Datadog Lambda ライブラリは、レイヤー (推奨) または Python パッケージとしてインストールできます。
datadog-lambda
パッケージのマイナーバージョンは、常にレイヤーのバージョンに一致します。たとえば、datadog-lambda v0.5.0 は、レイヤーバージョン 5 のコンテンツに一致します。
以下のフォーマットで、ARN を使用して Lambda 関数にレイヤーを構成します。
# us,us3,us5,eu リージョンの場合
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:<VERSION>
# us-gov リージョンの場合
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:<VERSION>
# us-gov リージョンの場合
arn:aws-us-gov:lambda:<AWS_REGION>:417141415827:layer:Datadog-<RUNTIME>:<VERSION>
使用できる RUNTIME
オプションは、Python27
、Python36
、Python37
、Python38
です。最新の VERSION
は 84
です。例:
arn:aws:lambda:us-east-1:464622532012:layer:Datadog-Python37:84
Lambda 関数が、コード署名を使用するよう構成してある場合、Datadog Lambda ライブラリをレイヤーとして追加する前に、Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加する必要があります。
Lambda 関数が、コード署名を使用するよう構成してある場合、Datadog Lambda ライブラリをレイヤーとして追加する前に、Datadog の署名プロフィール ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を関数のコード署名コンフィギュレーションに追加する必要があります。
datadog-lambda
とその依存関係を、ローカルで関数プロジェクトフォルダーにインストールします。注: datadog-lambda
はネイティブ拡張機能である ddtrace
に依存するため、これらは Linux 環境でインストールおよびコンパイルを行う必要があります。例えば、Serverless Framework には dockerizePip を、AWS SAM には –use-container を使用することができます。詳しくは、関数デプロイメントパッケージに依存関係を追加する方法をご参照ください。
pip install datadog-lambda -t ./
最新リリースを参照。
以下の手順に従って、関数を構成します。
datadog_lambda.handler.handler
に設定します。DD_LAMBDA_HANDLER
を設定します。例: myfunc.handler
。DD_TRACE_ENABLED
を true
に設定します。DD_FLUSH_TO_LOG
を true
に設定します。service
および env
タグを適切な値とともに追加します。メトリクス、トレース、ログを Datadog へ送信するには、関数の各ロググループに Datadog Forwarder Lambda 関数をサブスクライブします。
オプションではありますが、Datadog では以下の統合サービスタグ付けのドキュメントに従いサーバーレスアプリケーションに env
、service
、version
タグをタグ付けすることをお勧めします。
以上の方法で関数を構成すると、Serverless Homepage でメトリクス、ログ、トレースを確認できるようになります。
カスタムメトリクスまたはスパンの送信をご希望の場合は、以下のコード例をご参照ください。
import time
from ddtrace import tracer
from datadog_lambda.metric import lambda_metric
def lambda_handler(event, context):
# Lambda 関数スパンにカスタムタグを追加します
# X-Ray トレーシングが有効になっている場合は機能しません
current_span = tracer.current_span()
if current_span:
current_span.set_tag('customer.id', '123456')
# カスタムスパンを送信します
with tracer.trace("hello.world"):
print('Hello, World!')
# カスタムメトリクスを送信します
lambda_metric(
metric_name='coffee_house.order_value',
value=12.45,
timestamp=int(time.time()), # オプション、過去 20 分以内である必要があります
tags=['product:latte', 'order:online']
)
return {
'statusCode': 200,
'body': get_message()
}
# 関数をトレースします
@tracer.wrap()
def get_message():
return 'Hello from serverless!'
カスタムメトリクス送信の詳細については、ここを参照してください。カスタムインスツルメンテーションの詳細については、カスタムインスツルメンテーションの Datadog APM ドキュメントを参照してください。
お役に立つドキュメント、リンクや記事: