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

インストール

Datadog は、サーバーレスアプリケーションのインスツルメンテーションを有効にするためのさまざまな方法を提供しています。以下からニーズに合った方法を選択してください。Datadog では、一般的に Datadog CLI の使用を推奨しています。アプリケーションがコンテナイメージとしてデプロイされる場合は、「コンテナイメージ」の指示に従うことが必要です

Datadog CLI は、既存の Lambda 関数のコンフィギュレーションを修正し、新しいデプロイを必要とせずにインスツルメンテーションを可能にします。Datadog のサーバーレスモニタリングをすばやく開始するための最適な方法です。

  1. Lambda 関数を構成する

    Datadog APM を有効にし、Datadog Lambda ライブラリが提供するラッパーを使用して Lambda ハンドラー関数をラップします。

    require 'datadog/lambda'
    
    Datadog::Lambda.configure_apm do |c|
    # Enable the instrumentation
    end
    
    def handler(event:, context:)
        Datadog::Lambda.wrap(event, context) do
            return { statusCode: 200, body: 'Hello World' }
        end
    end
    
  2. Datadog CLI クライアントをインストールする

    npm install -g @datadog/datadog-ci
    
  3. Datadog サーバーレスモニタリングに慣れていない場合は、クイックスタートとして最初のインストールを導くためにインタラクティブモードで Datadog CLI を起動し、残りのステップを無視することができます。本番アプリケーションに Datadog を恒久的にインストールするには、このステップをスキップし、残りのステップに従って通常のデプロイの_後に_ CI/CD パイプラインで Datadog CLI コマンドを実行します。

    datadog-ci lambda instrument -i
    
  4. AWS の認証情報を構成する

    Datadog CLI は、AWS Lambda サービスへのアクセスを必要とし、AWS JavaScript SDK に依存して資格情報を解決します。AWS CLI を呼び出すときに使用するのと同じ方法を使用して、AWS の資格情報が構成されていることを確認します。

  5. Datadog サイトを構成する

    export DATADOG_SITE="<DATADOG_SITE>"
    

    <DATADOG_SITE> に置き換えます。(右側で正しい SITE が選択されていることを確認してください)。

  6. Datadog API キーを構成する

    Datadog は、セキュリティと簡単なローテーションのために、AWS Secrets Manager に Datadog API キーを保存することを推奨します。キーはプレーンテキスト文字列として保存する必要があります (JSON blob ではありません)。Lambda 関数に必要な secretsmanager:GetSecretValue IAM 権限があることを確認します。

    export DATADOG_API_KEY_SECRET_ARN="<DATADOG_API_KEY_SECRET_ARN>"
    

    迅速なテスト目的のために、Datadog API キーをプレーンテキストで設定することも可能です。

    export DATADOG_API_KEY="<DATADOG_API_KEY>"
    
  7. Lambda 関数をインスツルメントする

    : Lambda 関数は、まず開発環境またはステージング環境でインスツルメントしてください。インスツルメンテーションの結果が思わしくない場合は、同じ引数で uninstrument を実行し、変更を元に戻してください。

    Lambda 関数をインスツルメントするには、次のコマンドを実行します。

    datadog-ci lambda instrument -f <functionname> -f <another_functionname> -r <aws_region> -v 20 -e 48
    

    プレースホルダーを埋めるには

    • <functionname><another_functionname> は Lambda 関数の名前に置き換えます。また、--functions-regex を使用すると、指定した正規表現にマッチする名前を持つ複数の関数を自動的にインスツルメントすることができます。
    • <aws_region> を AWS リージョン名に置き換えます。

    その他のパラメーターは、CLI ドキュメントに記載されています。

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

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

  1. Lambda 関数を構成する

    Datadog APM を有効にし、Datadog Lambda ライブラリが提供するラッパーを使用して Lambda ハンドラー関数をラップします。

    require 'datadog/lambda'
    
    Datadog::Lambda.configure_apm do |c|
    # Enable the instrumentation
    end
    
    def handler(event:, context:)
        Datadog::Lambda.wrap(event, context) do
            return { statusCode: 200, body: 'Hello World' }
        end
    end
    
  2. Datadog サーバーレスプラグインをインストールします。

    serverless plugin install --name serverless-plugin-datadog
    
  3. serverless.yml を更新します:

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

    プレースホルダーを埋めるには

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

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

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

    Lambda 関数をコンテナイメージとしてデプロイする場合は、Datadog Lambda ライブラリを Lambda レイヤーとして使用できません。代わりに、イメージ内に Datadog Lambda とトレーシングライブラリをパッケージ化する必要があります。

    Gemfile に下記を追加します。

    gem 'datadog-lambda'
    gem 'ddtrace'
    

    ddtrace は、Amazon Linux が AWS Lambda で動作するためにコンパイルする必要があるネイティブ拡張機能を含んでいます。

    お使いの関数の Dockerfile で bundle install を実行する前に、gccgmp-develmake をインストールし、ネイティブ拡張機能を正常にコンパイルします。

    FROM <base image>
    
    # assemble your container image
    
    RUN yum -y install gcc gmp-devel make
    RUN bundle config set path 'vendor/bundle'
    RUN bundle install
    
  2. Datadog Lambda 拡張機能のインストール

    Dockerfile に以下を追加して、Datadog Lambda 拡張機能をコンテナイメージに追加します。

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

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

  3. Lambda 関数を構成する

    Datadog APM を有効にし、Datadog Lambda ライブラリが提供するラッパーを使用して Lambda ハンドラー関数をラップします。

    require 'datadog/lambda'
    
    Datadog::Lambda.configure_apm do |c|
    # Enable the instrumentation
    end
    
    def handler(event:, context:)
        Datadog::Lambda.wrap(event, context) do
            return { statusCode: 200, body: 'Hello World' }
        end
    end
    
  4. Datadog サイトと API キーの構成

    • 環境変数 DD_SITE を設定します。(右側で正しい SITE が選択されていることを確認してください)。
    • 環境変数 DD_API_KEY_SECRET_ARN を、Datadog API キーが安全に保存されている AWS シークレットの ARN で設定します。キーはプレーンテキスト文字列として保存する必要があります (JSON blob ではありません)。また、secretsmanager:GetSecretValue権限が必要です。迅速なテストのために、代わりに DD_API_KEY を使用して、Datadog API キーをプレーンテキストで設定することができます。
Serverless Framework などの Datadog をサポートするサーバーレス開発ツールを使用していない場合は、Datadog はお使いのサーバーレスアプリケーションを Datadog CLI でインスツルメントすることを強く推奨します。

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

    Datadog Lambda ライブラリは、レイヤーまたは gem としてインストールできます。Datadog では、ほとんどの関数でライブラリをレイヤーとしてインストールすることを推奨しています。お使いの Lambda 関数がコンテナイメージとしてデプロイされている場合は、ライブラリを gem としてインストールする必要があります。

    datadog-lambda gem のマイナーバージョンは、常にレイヤーのバージョンに一致します。たとえば、datadog-lambda v0.5.0 は、レイヤーバージョン 5 のコンテンツに一致します。

    • オプション A: 以下のフォーマットで、ARN を使用して Lambda 関数にレイヤーを構成します。

      # Use this format for AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:20
      
      # Use this format for AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:20
      

      <AWS_REGION>us-east-1 などの有効な AWS リージョンに置き換えてください。RUNTIME オプションは、Ruby2-7 または Ruby3-2 が利用可能です。

    • オプション B: もし、ビルド済みの Datadog Lambda レイヤーを使用できない場合は、Gemfile に追加して gem datadog-lambdaddtrace をインストールすることができます

      gem 'datadog-lambda'
      gem 'ddtrace'
      

      ddtrace には、AWS Lambda で動作するよう Amazon Linux 用にコンパイルする必要のあるネイティブ拡張機能が含まれています。そのため、Datadog では Lambda をコンテナイメージとして構築しデプロイすることを推奨しています。AWS Lambda を使用するが関数をコンテナイメージとしてデプロイできない、という場合は、Lambda ライブラリを gem ではなくレイヤーとしてインストールすることをおすすめします。

      お使いの関数の Dockerfile で bundle install を実行する前に、gccgmp-develmake をインストールし、ネイティブ拡張機能を正常にコンパイルします。

      FROM <base image>
      
      # assemble your container image
      
      RUN yum -y install gcc gmp-devel make
      RUN bundle config set path 'vendor/bundle'
      RUN bundle install
      
  2. Datadog Lambda 拡張機能のインストール

    • オプション A: 以下のフォーマットで、ARN を使用して Lambda 関数にレイヤーを構成します。

      # Use this format for x86-based Lambda deployed in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:48
      
      # Use this format for arm64-based Lambda deployed in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:48
      
      # Use this format for x86-based Lambda deployed in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:48
      
      # Use this format for arm64-based Lambda deployed in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:48
      

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

    • オプション B: Dockerfile に以下を追加して、Datadog Lambda 拡張機能をコンテナイメージに追加します。

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

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

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

    Datadog Lambda ライブラリは、レイヤーまたは gem としてインストールできます。Datadog では、ほとんどの関数でライブラリをレイヤーとしてインストールすることを推奨しています。お使いの Lambda 関数がコンテナイメージとしてデプロイされている場合は、ライブラリを gem としてインストールする必要があります。

    datadog-lambda gem のマイナーバージョンは、常にレイヤーのバージョンに一致します。たとえば、datadog-lambda v0.5.0 は、レイヤーバージョン 5 のコンテンツに一致します。

    • オプション A: 以下のフォーマットで、ARN を使用して Lambda 関数にレイヤーを構成します。

      # Use this format for AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-<RUNTIME>:20
      
      # Use this format for AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:20
      

      <AWS_REGION>us-east-1 などの有効な AWS リージョンに置き換えてください。RUNTIME オプションは、Ruby2-7 または Ruby3-2 が利用可能です。

    • オプション B: もし、ビルド済みの Datadog Lambda レイヤーを使用できない場合は、Gemfile に追加して gem datadog-lambdaddtrace をインストールすることができます

      gem 'datadog-lambda'
      gem 'ddtrace'
      

      ddtrace には、AWS Lambda で動作するよう Amazon Linux 用にコンパイルする必要のあるネイティブ拡張機能が含まれています。そのため、Datadog では Lambda をコンテナイメージとして構築しデプロイすることを推奨しています。AWS Lambda を使用するが関数をコンテナイメージとしてデプロイできない、という場合は、Lambda ライブラリを gem ではなくレイヤーとしてインストールすることをおすすめします。

      お使いの関数の Dockerfile で bundle install を実行する前に、gccgmp-develmake をインストールし、ネイティブ拡張機能を正常にコンパイルします。

      FROM <base image>
      
      # assemble your container image
      
      RUN yum -y install gcc gmp-devel make
      RUN bundle config set path 'vendor/bundle'
      RUN bundle install
      
  2. Datadog Lambda 拡張機能のインストール

    • オプション A: 以下のフォーマットで、ARN を使用して Lambda 関数にレイヤーを構成します。

      # Use this format for x86-based Lambda deployed in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-Extension:48
      
      # Use this format for arm64-based Lambda deployed in AWS commercial regions
      arn:aws:lambda:<AWS_REGION>:417141415827:layer:Datadog-Extension-ARM:48
      
      # Use this format for x86-based Lambda deployed in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:48
      
      # Use this format for arm64-based Lambda deployed in AWS GovCloud regions
      arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:48
      

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

    • オプション B: Dockerfile に以下を追加して、Datadog Lambda 拡張機能をコンテナイメージに追加します。

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

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

  1. Lambda 関数を構成する

    Datadog APM を有効にし、Datadog Lambda ライブラリが提供するラッパーを使用して Lambda ハンドラー関数をラップします。

    require 'datadog/lambda'
    
    Datadog::Lambda.configure_apm do |c|
    # Enable the instrumentation
    end
    
    def handler(event:, context:)
        Datadog::Lambda.wrap(event, context) do
            return { statusCode: 200, body: 'Hello World' }
        end
    end
    
  2. Datadog サイトと API キーの構成

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

次のステップ

  • Serverless Homepage でメトリクス、ログ、トレースを見ることができるようになりました。
  • サービスを標的にしている攻撃者についてアラートを受け取るには、脅威の監視を有効にします。
  • カスタムビジネスロジックの監視のサンプルコードを参照してください
  • テレメトリーの収集に問題がある場合は、トラブルシューティングガイドを参照してください
  • 高度な構成を参照して以下のことを行ってください。
    • タグを使ったテレメトリー接続
    • AWS API Gateway、SQS などのテレメトリーを収集する
    • Lambda のリクエストとレスポンスのペイロードを取得する
    • Lambda 関数のエラーをソースコードにリンクする
    • ログまたはトレースから機密情報をフィルタリングまたはスクラブする

カスタムビジネスロジックの監視

カスタムビジネスロジックを監視するには、以下のサンプルコードを使用してカスタムメトリクスまたはスパンを送信します。その他のオプションについては、サーバーレスアプリケーションのためのカスタムメトリクスの送信およびカスタムインスツルメンテーションのための APM ガイドを参照してください。

require 'ddtrace'
require 'datadog/lambda'

Datadog::Lambda.configure_apm do |c|
# インスツルメンテーションを有効にします
end

def handler(event:, context:)
    # Datadog ラッパーを適用します
    Datadog::Lambda::wrap(event, context) do
        # Lambda 関数スパンにカスタムタグを追加します
        # X-Ray トレーシングが有効になっている場合は機能しません
        current_span = Datadog::Tracing.active_span
        current_span.set_tag('customer.id', '123456')

        some_operation()

        Datadog::Tracing.trace('hello.world') do |span|
          puts "Hello, World!"
        end

        # カスタムメトリクスを送信します
        Datadog::Lambda.metric(
          'coffee_house.order_value', # メトリクス名
          12.45, # メトリクス値
          time: Time.now.utc, # オプション、過去 20 分以内である必要があります
          "product":"latte", # タグ
          "order":"online" # タグ
        )
    end
end

# 関数をインスツルメントします
def some_operation()
    Datadog::Tracing.trace('some_operation') do |span|
        # ここで何かをします
    end
end

カスタムメトリクス送信の詳細については、Serverless Custom Metrics を参照してください。カスタムインスツルメンテーションの詳細については、カスタムインスツルメンテーションの Datadog APM ドキュメントを参照してください。

その他の参考資料