Go Lambda 関数がまだランタイム go1.x を使用していて、provided.al2 ランタイムに移行できない場合、Datadog Forwarder を使用してインスツルメントする必要があります。それ以外の場合は、このガイドの指示に従って、Datadog Lambda 拡張機能を使用してインスツルメンテーションを行います。
Lambda 関数が公共のインターネットにアクセスできない VPC にデプロイされている場合、datadoghq.com Datadog サイトには AWS PrivateLink を、それ以外のサイトにはプロキシを使用してデータを送信することができます。

インストール

Datadog Serverless Plugin は、Datadog Lambda 拡張機能 を介してメトリクス、トレース、ログを Datadog に送信するように関数を自動的に構成します。

Datadog サーバーレスプラグインをインストールして構成するには、次の手順に従います。

Datadog サーバーレスプラグインをインストールします。

serverless plugin install --name serverless-plugin-datadog

serverless.yml を更新します:

custom:
  datadog:
    site: <DATADOG_SITE>
    apiKeySecretArn: <DATADOG_API_KEY_SECRET_ARN>

関数をインスツルメントするには、AWS CDK アプリの Stack オブジェクトに DatadogServerless 変換と CfnMapping を追加します。以下の Python のサンプルコードを参照してください (他の言語での使用方法も同様です)。

  • <DATADOG_SITE> を、テレメトリーの送信先となる Datadog サイトに置き換えます。
  • <DATADOG_API_KEY_SECRET_ARN> を、Datadog API キーが安全に保存されている AWS シークレットの ARN に置き換えます。キーはプレーンテキスト文字列として保存する必要があります (JSON blob ではありません)。また、secretsmanager:GetSecretValue権限が必要です。迅速なテストのために、代わりに apiKey を使用して、Datadog API キーをプレーンテキストで設定することができます。

詳細および追加設定については、プラグインドキュメントを参照してください。

  1. Datadog Lambda 拡張機能のインストール

    COPY --from=public.ecr.aws/datadog/lambda-extension:<TAG> /opt/. /opt/
    

    <TAG> を特定のバージョン番号 (たとえば 43) または latest に置き換えます。利用可能なタグのリストは、Amazon ECR リポジトリで確認できます。

  2. 必要な環境変数を設定する

    • DD_SITE を設定します。(右側で正しい SITE が選択されていることを確認してください)。
    • DD_API_KEY_SECRET_ARN を、Datadog API キーが安全に保存されている AWS シークレットの ARN に設定します。キーはプレーンテキスト文字列として保存する必要があります (JSON blob ではありません)。また、secretsmanager:GetSecretValue権限が必要です。迅速なテストのために、代わりに DD_API_KEY を使用して、Datadog API キーをプレーンテキストで設定することができます。
    • オプションで DD_UNIVERSAL_INSTRUMENTATION: true を設定すると、Lambda のリクエストとレスポンスのペイロードをキャプチャしたり、受信する Lambda イベントから APM スパンを推測したりといった高度な構成を活用できます。

Datadog Lambda 拡張機能のインストール

AWS のリージョンやアーキテクチャに応じた ARN 形式で、Datadog Lambda 拡張機能の Lambda レイヤーを Lambda 関数に追加します。

# AWS 商用リージョンにデプロイされた x86 ベースの Lambda にはこの形式を使用します
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:43

# AWS 商用リージョンにデプロイされた arm64 ベースの Lambda にはこの形式を使用します
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:43

# AWS GovCloud リージョンにデプロイされた x86 ベースの Lambda にはこの形式を使用します
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:43

# AWS GovCloud リージョンにデプロイされた arm64 ベースの Lambda にはこの形式を使用します
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:43

# AWS 商用リージョンにデプロイされた x86 ベースの Lambda にはこの形式を使用します
arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-Extension:43

# AWS 商用リージョンにデプロイされた arm64 ベースの Lambda にはこの形式を使用します
arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-Extension-ARM:43

# AWS GovCloud リージョンにデプロイされた x86 ベースの Lambda にはこの形式を使用します
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:43

# AWS GovCloud リージョンにデプロイされた arm64 ベースの Lambda にはこの形式を使用します
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:43

<AWS_REGION>us-east-1 などの有効な AWS リージョンに置き換えてください。

必要な環境変数を構成する

  • DD_SITE を設定します。(右側で正しい SITE が選択されていることを確認してください)。
  • DD_API_KEY_SECRET_ARN を、Datadog API キーが安全に保存されている AWS シークレットの ARN に設定します。キーはプレーンテキスト文字列として保存する必要があります (JSON blob ではありません)。また、secretsmanager:GetSecretValue権限が必要です。迅速なテストのために、代わりに DD_API_KEY を使用して、Datadog API キーをプレーンテキストで設定することができます。

Datadog Lambda ライブラリのインストール

go get github.com/DataDog/datadog-lambda-go

Lambda 関数のコードを更新する

package main

import (
  "github.com/aws/aws-lambda-go/lambda"
  "github.com/DataDog/datadog-lambda-go"
  "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
  httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http"
)

func main() {
  // Lambda ハンドラーをラップします
  lambda.Start(ddlambda.WrapFunction(myHandler, nil))
}

func myHandler(ctx context.Context, event MyEvent) (string, error) {
  // HTTP リクエストをトレースします
  req, _ := http.NewRequestWithContext(ctx, "GET", "https://www.datadoghq.com", nil)
  client := http.Client{}
  client = *httptrace.WrapClient(&client)
  client.Do(req)

  // カスタムメトリクスを送信します
  ddlambda.Metric(
    "coffee_house.order_value", // メトリクス名
    12.45, // メトリクス値
    "product:latte", "order:online" // 関連タグ
  )

  // カスタムスパンを作成します
  s, _ := tracer.StartSpanFromContext(ctx, "child.span")
  time.Sleep(100 * time.Millisecond)
  s.Finish()
}

次のステップ

  • おめでとうございます。Serverless Homepage でメトリクス、ログ、トレースを見ることができるようになりました。
  • テレメトリーの収集に問題がある場合は、トラブルシューティングガイドを参照してください
  • 高度な構成を参照して以下のことを行ってください。
    • タグを使ったテレメトリー接続
    • AWS API Gateway、SQS などのテレメトリーを収集する
    • Lambda のリクエストとレスポンスのペイロードを取得する
    • Lambda 関数のエラーをソースコードにリンクする
    • ログまたはトレースから機密情報をフィルタリングまたはスクラブする

その他の参考資料