Si tus funciones de Go Lambda todavía utilizan el tiempo de ejecución go1.x y no puedes migrar al tiempo de ejecución provided.al2, debes instrumentar utilizando Datadog Forwarder. De lo contrario, sigue las instrucciones de esta guía para instrumentar utilizando Datadog Lambda Extension.
La versión 67+ de Datadog Lambda Extension está optimizada para reducir significativamente la duración del arranque en frío. Más información.
Agentically add Datadog to your Lambda Functions

La incorporación del Agent para Datadog Serverless está en la vista previa. Utiliza tu herramienta de codificación de IA favorita, como Cursor o Claude, para agregar en bloque la monitorización de Datadog a tus funciones Lambda.

Request Access

Instalación

Nota: Datadog recomienda utilizar el rastreador de Go v2 para instrumentar las funciones de AWS Lambda. Consulta las Instrucciones para la migración del rastreador de Go para obtener orientación sobre la actualización de v1 a v2.

Puedes instrumentar tu aplicación de Go AWS Lambda directamente dentro de Datadog. Ve a la page (página) Serverless > AWS Lambda y selecciona Instrument Functions (Instrumentar funciones).

Para obtener más información, consulta Instrumentación remota para AWS Lambda.

La Datadog CLI modifica la configuración de las funciones de Lambda existentes para permitir la instrumentación sin tener que volver a desplegar. Es la forma más rápida de empezar a trabajar con la monitorización serverless de Datadog.

  1. Instalar el cliente de la Datadog CLI

    npm install -g @datadog/datadog-ci @datadog/datadog-ci-plugin-lambda
    
  2. Si es la primera vez que usas la monitorización serverless de Datadog, inicia la Datadog CLI en el modo interactivo para recibir instrucciones sobre cómo realizar la primera instalación. Esto te permitirá entrar en materia rápidamente y saltarte los demás pasos. Si deseas instalar Datadog de forma permanente en tus aplicaciones de producción, omite ese paso y dirígete directamente a los siguientes para ejecutar el comando de la Datadog CLI en tus pipelines de CI/CD después de haber desplegado como lo haces normalmente.

    datadog-ci lambda instrument -i
    
  3. Configurar las credenciales de AWS

    La Datadog CLI necesita acceder al servicio AWS Lambda y depende del SDK de AWS para JavaScript a la hora de configurar las credenciales. Asegúrate de que tus credenciales de AWS estén configuradas con el mismo método que utilizarás para invocar la AWS CLI.

  4. Configurar el sitio de Datadog

    export DATADOG_SITE="<DATADOG_SITE>"
    

    Reemplaza <DATADOG_SITE> por (asegúrate de seleccionar el sitio [SITE] correcto del lado derecho).

  5. Configurar la clave de la API de Datadog

    Datadog recomienda guardar la clave de la API de Datadog en AWS Secrets Manager para una mayor seguridad y una rotación más sencilla. La clave debe almacenarse en una cadena de texto sin formato (no en un blob JSON). Además, asegúrate de que tus funciones de Lambda tengan el permiso de IAM obligatorio secretsmanager:GetSecretValue.

    export DATADOG_API_KEY_SECRET_ARN="<DATADOG_API_KEY_SECRET_ARN>"
    

    Si quieres hacer un testeo rápido, también puedes configurar la clave de la API de Datadog en texto sin formato:

    export DATADOG_API_KEY="<DATADOG_API_KEY>"
    
  6. Instrumentación de tus funciones Lambda

    Nota: Antes que nada, instrumenta tus funciones de Lambda en un entorno de desarrollo o de prueba. Si el resultado de la instrumentación no es satisfactorio, ejecuta uninstrument con los mismos argumentos para revertir los cambios.

    Para instrumentar tus funciones Lambda, ejecuta el siguiente comando.

    datadog-ci lambda instrument -f <functionname> -f <another_functionname> -r <aws_region> -e 92
    

    Para rellenar los parámetros:

    • Reemplaza <functionname> y <another_functionname> por los nombres de tus funciones de Lambda. Otra posibilidad es usar --functions-regex para instrumentar automáticamente varias funciones cuyos nombres coincidan con una expresión regular determinada.
    • Sustituye <aws_region> por el nombre de la región AWS.

    Si necesitas parámetros adicionales, consulta la documentación acerca de la CLI.

El complemento Datadog Serverless Plugin configura automáticamente tus funciones para enviar métricas, trazas (traces) y logs a Datadog mediante la Datadog Lambda Extension.

Para instalar y configurar el Datadog Serverless Plugin, sigue estos pasos:

Instala el Datadog Serverless Plugin:

serverless plugin install --name serverless-plugin-datadog

Actualiza tu archivo serverless.yml:

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

Para rellenar los parámetros, haz lo siguiente:

  • Reemplaza <DATADOG_SITE> por el sitio de Datadog al que quieres enviar la telemetría.
  • Reemplaza <DATADOG_API_KEY_SECRET_ARN> por el ARN del secreto de AWS en el que almacenas la clave de la API de Datadog de forma segura. La clave debe estar almacenada en una cadena de texto sin formato (no en un blob JSON). Además, el permiso secretsmanager:GetSecretValue es obligatorio. Si quieres hacer un testeo rápido, puedes usar apiKey en lugar del ARN y configurar la clave de la API de Datadog en texto sin formato.

Para obtener más información y parámetros adicionales, consulta la documentación acerca del complemento.

La macro de CloudFormation de Datadog transforma automáticamente tu plantilla de aplicación de SAM para instalar Datadog en tus funciones mediante capas de Lambda. Además, configura las funciones para enviar métricas, trazas y logs a Datadog a través de la Datadog Lambda Extension.

  1. Instalar la macro de CloudFormation de Datadog

    Ejecuta el siguiente comando con tus credenciales de AWS para desplegar un stack tecnológico de CloudFormation que instale el recurso de AWS de la macro. Solo tienes que instalar la macro una vez en una región determinada de tu cuenta. Luego, debes reemplazar create-stack por update-stack para actualizar la macro a la versión más reciente.

    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
    

    Con estos pasos, la macro ya está desplegada y lista para usar.

  2. Instrumentación de tus funciones Lambda

    Añade la transformación DatadogServerless después de la transformación AWS::Serverless en la sección Transform de tu archivo template.yml para SAM.

    Transform:
      - AWS::Serverless-2016-10-31
      - Name: DatadogServerless
        Parameters:
          stackName: !Ref "AWS::StackName"
          extensionLayerVersion: 92
          site: "<DATADOG_SITE>"
          apiKeySecretArn: "<DATADOG_API_KEY_SECRET_ARN>"
    

    Para rellenar los parámetros:

    • Sustituye <DATADOG_SITE> por (asegúrate de haber seleccionado el SITIO correcto del lado derecho).
    • Reemplaza <DATADOG_API_KEY_SECRET_ARN> por el ARN del secreto de AWS en el que almacenas la clave de la API de Datadog de forma segura. La clave debe estar almacenada en una cadena de texto sin formato (no en un blob JSON). Además, el permiso secretsmanager:GetSecretValue es obligatorio. Si quieres hacer un testeo rápido, puedes usar apiKey en lugar del ARN y configurar la clave de la API de Datadog en texto sin formato.

    Obtén más información y parámetros adicionales en la documentación de la macro.

Instrumenting Go functions through the Datadog CDK construct is only available for AWS CDK apps written in Typescript, Python, and Go.

The Datadog CDK construct automatically installs Datadog on your functions using Lambda layers. It configures your functions to send metrics, traces, and logs to Datadog through the Datadog Lambda Extension.

TypeScript

  1. Install the Datadog CDK constructs library

    For AWS CDK v1:

    npm install datadog-cdk-constructs --save-dev
    

    For AWS CDK v2:

    npm install datadog-cdk-constructs-v2 --save-dev
    
  2. Instrument your Lambda functions

    For AWS CDK v1:

    import { Datadog } from "datadog-cdk-constructs";
    
    const datadog = new Datadog(this, "Datadog", {
        extensionLayerVersion: 92,
        site: "<DATADOG_SITE>",
        apiKeySecretArn: "<DATADOG_API_KEY_SECRET_ARN>"
    });
    datadog.addLambdaFunctions([<LAMBDA_FUNCTIONS>])
    

    For AWS CDK v2:

    import { DatadogLambda } from "datadog-cdk-constructs-v2";
    
    const datadogLambda = new DatadogLambda(this, "datadogLambda", {
        extensionLayerVersion: 92,
        site: "<DATADOG_SITE>",
        apiKeySecretArn: "<DATADOG_API_KEY_SECRET_ARN>"
    });
    datadogLambda.addLambdaFunctions([<LAMBDA_FUNCTIONS>])
    

Python

  1. Install the Datadog CDK constructs library

    For AWS CDK v1:

    pip install datadog-cdk-constructs
    

    For AWS CDK v2:

    pip install datadog-cdk-constructs-v2
    
  2. Instrument your Lambda functions

    For AWS CDK v1:

    from datadog_cdk_constructs import Datadog
    datadog = Datadog(self, "Datadog",
        extension_layer_version=92,
        site="<DATADOG_SITE>",
        api_key_secret_arn="<DATADOG_API_KEY_SECRET_ARN>",
      )
    datadog.add_lambda_functions([<LAMBDA_FUNCTIONS>])
    

    For AWS CDK v2:

    from datadog_cdk_constructs_v2 import DatadogLambda
    
    datadog = DatadogLambda(self, "datadogLambda",
        extension_layer_version=92,
        site="<DATADOG_SITE>",
        api_key_secret_arn="<DATADOG_API_KEY_SECRET_ARN>",
      )
    datadog.add_lambda_functions([<LAMBDA_FUNCTIONS>])
    

Go

Note: Go CDK constructs are only available for AWS CDK v2.

  1. Install the Datadog CDK constructs library

    go get github.com/DataDog/datadog-cdk-constructs-go/ddcdkconstruct/v3
    
  2. Instrument your Lambda functions

    import (
        "github.com/DataDog/datadog-cdk-constructs-go/ddcdkconstruct/v3"
    )
    
    datadogLambda := ddcdkconstruct.NewDatadogLambda(
        stack,
        jsii.String("Datadog"),
        &ddcdkconstruct.DatadogLambdaProps{
            ExtensionLayerVersion: jsii.Number(92),
            Site:                  jsii.String("<DATADOG_SITE>"),
            ApiKeySecretArn:       jsii.String("<DATADOG_API_KEY_SECRET_ARN>"),
        })
    datadogLambda.AddLambdaFunctions(&[]interface{}{<LAMBDA_FUNCTIONS>}, nil)
    

To fill in the placeholders:

  • Replace <DATADOG_SITE> with (ensure the correct SITE is selected on the right).
  • Replace <DATADOG_API_KEY_SECRET_ARN> with the ARN of the AWS secret where your Datadog API key is securely stored. The key needs to be stored as a plaintext string (not a JSON blob). Ensure your Lambda execution role has the secretsmanager:GetSecretValue IAM permission in order to read the secret value. For quick testing, you can use apiKey instead and set the Datadog API key in plaintext.

More information and additional parameters can be found on the Datadog CDK documentation.

  1. Instalar la Datadog Lambda Extension

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

    Reemplaza <TAG> por un número de versión específico (por ejemplo, 92) o por latest. Alpine también es compatible con números de versión específicos (como 92-alpine) o con latest-alpine. Puedes ver una lista completa de posibles etiquetas (tags) en el repositorio de Amazon ECR.

  2. Configurar las variables de entorno obligatorias

    • Configura DD_SITE como (asegúrate de seleccionar el sitio [SITE] correcto del lado derecho).
    • Configura DD_API_KEY_SECRET_ARN con el ARN del secreto de AWS en el que almacenas la clave de la API de Datadog de forma segura. La clave debe estar almacenada en una cadena de texto sin formato (no en un blob JSON). Además, el permiso secretsmanager:GetSecretValue es obligatorio. Si quieres hacer un testeo rápido, puedes usar DD_API_KEY en lugar del ARN y configurar la clave de la API de Datadog en texto sin formato.
    • De manera opcional, puedes configurar DD_UNIVERSAL_INSTRUMENTATION: true para aprovechar las ventajas de las configuraciones avanzadas, como capturar las cargas útiles de solicitud y respuesta de Lambda e inferir tramos (spans) de APM de los eventos de Lambda entrantes.

El módulo de Terraform lambda-datadog envuelve el recurso aws_lambda_function y configura automáticamente tu función de Lambda para Datadog Serverless Monitoring mediante las siguientes acciones:

  • adición de las capas de Lambda de Datadog,
  • redireccionamiento del controlador de Lambda,
  • habilitación de la recopilación de métricas, trazas y logs y su envío a Datadog.
module "lambda-datadog" {
  source  = "DataDog/lambda-datadog/aws"
  version = "4.0.0"

  environment_variables = {
    "DD_API_KEY_SECRET_ARN" : "<DATADOG_API_KEY_SECRET_ARN>"
    "DD_ENV" : "<ENVIRONMENT>"
    "DD_SERVICE" : "<SERVICE_NAME>"
    "DD_SITE": "<DATADOG_SITE>"
    "DD_VERSION" : "<VERSION>"
  }

  datadog_extension_layer_version = 92

  # aws_lambda_function arguments
}
  1. Reemplaza el recurso aws_lambda_function por el módulo de Terraform lambda-datadog. Luego, especifica el origen source y la versión version del módulo.

  2. Configura los argumentos de aws_lambda_function:

    Todos los argumentos disponibles en el recurso aws_lambda_function están disponibles en este módulo de Terraform. Los argumentos definidos como bloques en el recurso aws_lambda_function se redefinen como variables con sus argumentos anidados.

    Por ejemplo, en aws_lambda_function, environment está definido como un bloque con un argumento variables. En el módulo de Terraform lambda-datadog, el valor de environment_variables se pasa al argumento environment.variables en aws_lambda_function. Consulta las entradas para ver una lista completa de las variables de este módulo.

  3. Rellena los parámetros de las variables de entorno de la siguiente manera:

    • Reemplaza <DATADOG_API_KEY_SECRET_ARN> por el ARN del secreto de AWS en el que almacenas la clave de la API de Datadog de forma segura. La clave debe estar almacenada en una cadena de texto sin formato (no en un blob JSON). Además, el permiso secretsmanager:GetSecretValue es obligatorio. Si quieres hacer un testeo rápido, puedes usar la variable de entorno DD_API_KEY en lugar del ARN y configurar la clave de la API de Datadog en texto sin formato.
    • Reemplaza <ENVIRONMENT> por el entorno de la función de Lambda, como prod o staging.
    • Reemplaza <SERVICE_NAME> por el nombre del servicio de la función de Lambda.
    • Reemplaza <DATADOG_SITE> por . (Asegúrate de seleccionar el sitio de Datadog correcto en esta página).
    • Reemplaza <VERSION> por el número de versión de la función de Lambda.
  4. Selecciona la versión de la capa de Datadog Extension Lambda que desees utilizar. Si se deja en blanco, se utilizará la última versión de la capa.

  datadog_extension_layer_version = 92

Para configurar Datadog utilizando SST v3, sigue estos steps (UI) / pasos (generic):

const app = new sst.aws.Function("MyApp", {
  handler: "./src",
  runtime: "go",
  environment: {
    DD_ENV: "<ENVIRONMENT>",
    DD_SERVICE: "<SERVICE_NAME>",
    DD_VERSION: "<VERSION>",
    DATADOG_API_KEY_SECRET_ARN: "<DATADOG_API_KEY_SECRET_ARN>",
    DD_SITE: "<DATADOG_SITE>",
  },
  layers: [
    $interpolate`arn:aws:lambda:${aws.getRegionOutput().name}:464622532012:layer:Datadog-Extension:92`,
  ],
});

Rellena los parámetros de las variables de entorno de la siguiente manera:

  • Reemplaza <DATADOG_API_KEY_SECRET_ARN> por el ARN del secreto de AWS en el que almacenas la clave de la API de Datadog de forma segura. La clave debe estar almacenada en una cadena de texto sin formato (no en un blob JSON). Además, el permiso secretsmanager:GetSecretValue es obligatorio. Si quieres hacer un testeo rápido, puedes usar la variable de entorno DD_API_KEY en lugar del ARN y configurar la clave de la API de Datadog en texto sin formato.
  • Reemplaza <ENVIRONMENT> por el entorno de la función de Lambda, como prod o staging.
  • Reemplaza <SERVICE_NAME> por el nombre del servicio de la función de Lambda.
  • Sustituye <DATADOG_SITE> por . (Asegúrate de seleccionar el sitio de Datadog correcto en esta page (página)).
  • Reemplaza <VERSION> por el número de versión de la función de Lambda.

Instalar la Datadog Lambda Extension

Añade la capa de Lambda de la Datadog Lambda Extension a tus funciones de Lambda, con el formato del ARN definido según tu región y arquitectura de AWS:

# Use this format for x86-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:92

# Use this format for arm64-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:92

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

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

Reemplaza <AWS_REGION> por una región de AWS válida, como us-east-1.

Configurar las variables de entorno obligatorias

  • Configura DD_SITE como (asegúrate de seleccionar el sitio [SITE] correcto del lado derecho).
  • Configura DD_API_KEY_SECRET_ARN con el ARN del secreto de AWS en el que almacenas la clave de la API de Datadog de forma segura. La clave debe estar almacenada en una cadena de texto sin formato (no en un blob JSON). Además, el permiso secretsmanager:GetSecretValue es obligatorio. Si quieres hacer un testeo rápido, puedes usar DD_API_KEY en lugar del ARN y configurar la clave de la API de Datadog en texto sin formato.

Instalar la biblioteca Lambda de Datadog

go get github.com/DataDog/dd-trace-go/contrib/aws/datadog-lambda-go/v2

Actualizar el código de la función de Lambda

package main

import (
    "context"
    "net/http"
    "time"

  ddlambda "github.com/DataDog/dd-trace-go/contrib/aws/datadog-lambda-go/v2"
  "github.com/aws/aws-lambda-go/events"
  "github.com/aws/aws-lambda-go/lambda"
  httptrace "github.com/DataDog/dd-trace-go/contrib/net/http/v2"
  "github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
)

func main() {
    // Wrap your lambda handler
    lambda.Start(ddlambda.WrapFunction(myHandler, nil))
}

func myHandler(ctx context.Context, _ events.APIGatewayProxyRequest) (string, error) {
    // Trace an HTTP request
    req, _ := http.NewRequestWithContext(ctx, "GET", "https://www.datadoghq.com", nil)
    client := http.Client{}
    client = httptrace.WrapClient(&client)
    client.Do(req)

    // Submit a custom metric
    ddlambda.Metric(
        "coffee_house.order_value",      // Metric name
        12.45,                           // Metric value
        "product:latte", "order:online", // Associated tags
    )

    // Create a custom span
    s, _ := tracer.StartSpanFromContext(ctx, "child.span")
    time.Sleep(100 * time.Millisecond)
    s.Finish()
    return "ok", nil
}

Cumplimiento de FIPS

Datadog provides FIPS-compliant monitoring for AWS Lambda functions. For AWS GovCloud environments, the DD_LAMBDA_FIPS_MODE environment variable is enabled by default. When FIPS mode is enabled, AWS FIPS endpoints are used for Datadog API key lookups, and the Lambda metric helper function lambda_metric requires the FIPS-compliant extension for metric submission. While the FIPS-compliant Lambda components work with any Datadog site, end-to-end FIPS compliance requires using the US1-FED site. See AWS Lambda FIPS Compliance for more details.

AWS Lambda y VPC

If your Lambda functions are deployed in a Virtual Private Cloud (VPC) without access to the public internet, and you are using the datadoghq.com Datadog site, you can use AWS PrivateLink to send data.

If your Lambda functions are deployed in a VPC, and you are using a Datadog site that is not datadoghq.com, you can use a proxy to send data.

¿Qué toca hacer ahora?

Referencias adicionales