Habilitación de sus aplicaciones en Lambda
Puede habilitar Application Signals para las funciones de Lambda. Application Signals instrumenta de forma automática sus funciones de Lambda mediante las bibliotecas mejoradas de AWS Distro para OpenTelemetry (ADOT), que se proporcionan a través de una capa de Lambda. Esta capa de AWS Lambda para OpenTelemetry empaqueta e implementa las bibliotecas necesarias para la instrumentación automática de Application Signals.
Además de admitir Application Signals, esta capa de Lambda también es un componente de la compatibilidad de Lambda con OpenTelemetry y proporciona funcionalidad de seguimiento.
Temas
Introducción
Existen tres métodos para habilitar Application Signals para las funciones de Lambda.
Tras habilitar Application Signals para una función de Lambda, la telemetría de esa función tarda unos minutos en aparecer en la consola de Application Signals.
Uso de la consola de CloudWatch Application Signals
Utilice la consola de Lambda
Agregue de forma manual la capa de AWS Lambda para OpenTelemetry al tiempo de ejecución de su función de Lambda.
Cada uno de estos métodos agrega una capa de AWS Lambda para OpenTelemetry a la función.
Uso de la consola de CloudWatch Application Signals
Siga estos pasos para utilizar la consola de Application Signals para habilitar Application Signals para una función de Lambda.
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/
. En el panel de navegación de servicio, elija Application Signals, Servicios.
En el área de la lista Servicios, seleccione Habilitar señales de aplicaciones.
Elija el mosaico Lambda.
Seleccione cada función que quiera habilitar para Application Signals y, a continuación, elija Listo.
Utilice la consola de Lambda
Siga estos pasos para utilizar la consola de Lambda para habilitar Application Signals para una función de Lambda.
Abra la consola de AWS Lambda en https://console.aws.amazon.com/lambda/
. En el panel de navegación, elija Funciones y, a continuación, elija el nombre de la función de que quiera habilitar.
Elija la pestaña Configuración, y luego Herramientas de monitoreo y operaciones.
Seleccione Editar.
En la sección CloudWatch Application Signals y X-Ray, seleccione Recopilar automáticamente seguimientos de aplicaciones y métricas de aplicaciones estándar con Application Signals y Recopilar automáticamente seguimientos del servicio Lambda para obtener visibilidad integral con X-Ray.
Seleccione Save.
Habilitación de Application Signals en Lambda con el AWS CDK
Si aún no ha activado Application Signals en esta cuenta, debe conceder a Application Signals los permisos que necesita para detectar los servicios. Para obtener más información, consulte Habilitación de Application Signals en su cuenta.
Habilite Application Signals para sus aplicaciones
import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );
El recurso Discovery de CloudFormation otorga a Application Signals los siguientes permisos:
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
Para obtener más información acerca de este rol, consulte Permisos de roles vinculados a un servicio para CloudWatch Application Signals.
-
Agregue la política de IAM
CloudWatchLambdaApplicationSignalsExecutionRolePolicy
a la función de Lambda.const fn = new Function(this, 'DemoFunction', { code: Code.fromAsset('$YOUR_LAMBDA.zip'), runtime: Runtime.PYTHON_3_12, handler: '$YOUR_HANDLER' }) fn.role?.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLambdaApplicationSignalsExecutionRolePolicy'));
Sustituya
$AWS_LAMBDA_LAYER_FOR_OTEL_ARN
con el ARN real de la capa de AWS Lambda para OpenTelemetry en la región correspondiente.fn.addLayers(LayerVersion.fromLayerVersionArn( this, 'AwsLambdaLayerForOtel', '$AWS_LAMBDA_LAYER_FOR_OTEL_ARN' )) fn.addEnvironment("AWS_LAMBDA_EXEC_WRAPPER", "/opt/otel-instrument");
(Opcional) Supervisión del estado de su aplicación
Una vez que haya habilitado sus aplicaciones en Lambda, podrá supervisar el estado de las mismas. Para obtener más información, consulte Monitoreo del estado operativo de sus aplicaciones con Application Signals.
Habilitación manual de Application Signals
Siga estos pasos para habilitar de manera manual Application Signals para una función de Lambda.
Agregue la capa de AWS Lambda para OpenTelemetry al tiempo de ejecución de Lambda. Para buscar el ARN de la capa, consulte ARN de la capa de AWS Lambda para OpenTelemetry.
Agregue la variable de entorno
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
.Agregue la variable de entorno
LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT
para configurar entornos de Lambda personalizados. Los entornos lambda están configurados enlambda:default
de forma predeterminada.Conecte la política de IAM administrada por AWS CloudWatchLambdaApplicationSignalsExecutionRolePolicy al rol de ejecución de Lambda.
(Opcional) Se recomienda habilitar el seguimiento activo de Lambda para obtener una mejor experiencia de seguimiento. Para obtener más información, consulte Visualización de las invocaciones de la función de Lambda mediante AWS X-Ray.
Deshabilitación manual de Application Signals
Para deshabilitar de forma manual Application Signals para una función de Lambda, quite la capa de AWS Lambda para OpenTelemetry del tiempo de ejecución de Lambda y quite la variable de entorno AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
.
Configuración de Application Signals
Puede usar esta sección para configurar Application Signals en Lambda.
Agrupación de varias funciones de Lambda en un solo servicio
La variable del entorno OTEL_SERVICE_NAME
establece el nombre del servicio. Esto se mostrará como el nombre del servicio de la aplicación en los paneles de Application Signals. Puede asignar el mismo nombre de servicio a varias funciones de Lambda y se fusionarán en un solo servicio en Application Signals. Si no proporciona ningún valor para esta clave, se utiliza el nombre predeterminado de la función de Lambda.
Muestreo
Por defecto, la estrategia de muestreo de rastros se basa en la principal. Puede ajustar la estrategia de muestreo configurando variables de entorno en OTEL_TRACES_SAMPLER
.
Por ejemplo, establezca la tasa de muestreo de rastros en un 30 %.
OTEL_TRACES_SAMPLER=traceidratio OTEL_TRACES_SAMPLER_ARG=0.3
Para obtener más información, consulte OpenTelemetry Environment Variable Specification
Habilitación de toda la instrumentación de la biblioteca
Para reducir los inicios en frío de Lambda, de forma predeterminada, solo la instrumentación del AWS SDK y HTTP está habilitada para Python, Node y Java. Puede establecer variables de entorno para habilitar la instrumentación de otras bibliotecas utilizadas en su función de Lambda.
Python:
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS=none
Nodo:
OTEL_NODE_DISABLED_INSTRUMENTATIONS=none
Java:
OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=true
ARN de la capa de AWS Lambda para OpenTelemetry
En las siguientes tablas se enumeran los ARN para utilizar la capa de AWS Lambda para OpenTelemetry para cada región en la que se admite.
- Python
-
Región ARN Este de EE. UU. (Norte de Virginia)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:16
Este de EE. UU. (Ohio)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
Oeste de EE. UU. (Norte de California)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:20
Oeste de EE. UU. (Oregón)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:20
África (Ciudad del Cabo)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroPython:10
Asia-Pacífico (Hong Kong)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroPython:10
Asia-Pacífico (Hyderabad)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroPython:10
Asia-Pacífico (Yakarta)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroPython:10
Asia-Pacífico (Melbourne)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroPython:10
Asia-Pacífico (Bombay)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Asia-Pacífico (Osaka)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroPython:12
Asia-Pacífico (Seúl)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
Asia-Pacífico (Singapur)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:12
Asia-Pacífico (Sídney)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
Asia-Pacífico (Tokio)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Canadá (centro)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Europa (Fráncfort)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Europa (Irlanda)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Europa (Londres)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
Europa (Milán)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroPython:10
Europa (París)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroPython:13
Europa (España)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroPython:10
Europa (Estocolmo)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Europa (Zúrich)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroPython:10
Israel (Tel Aviv)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroPython:10
Medio Oriente (Baréin)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroPython:10
Medio Oriente (EAU)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroPython:10
América del Sur (São Paulo)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
- Node.js
-
Región ARN Este de EE. UU. (Norte de Virginia)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Este de EE. UU. (Ohio)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
Oeste de EE. UU. (Norte de California)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Oeste de EE. UU. (Oregón)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
África (Ciudad del Cabo)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJs:8
Asia-Pacífico (Hong Kong)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJs:8
Asia-Pacífico (Hyderabad)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJs:6
Asia-Pacífico (Yakarta)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJs:8
Asia-Pacífico (Melbourne)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJs:8
Asia-Pacífico (Bombay)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Asia-Pacífico (Osaka)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
Asia-Pacífico (Seúl)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
Asia-Pacífico (Singapur)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Asia-Pacífico (Sídney)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
Asia-Pacífico (Tokio)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Canadá (centro)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Europa (Fráncfort)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Europa (Irlanda)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Europa (Londres)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
Europa (Milán)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJs:8
Europa (París)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
Europa (España)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJs:8
Europa (Estocolmo)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Europa (Zúrich)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJs:8
Israel (Tel Aviv)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJs:8
Medio Oriente (Baréin)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJs:8
Medio Oriente (EAU)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJs:8
América del Sur (São Paulo)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
- .Net
-
Región ARN Este de EE. UU. (Norte de Virginia)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:6
Este de EE. UU. (Ohio)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Oeste de EE. UU. (Norte de California)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Oeste de EE. UU. (Oregón)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
África (Ciudad del Cabo)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Hong Kong)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Hyderabad)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Yakarta)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Melbourne)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Bombay)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Osaka)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Seúl)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Singapur)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Sídney)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Asia-Pacífico (Tokio)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Canadá (centro)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Fráncfort)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Irlanda)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Londres)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Milán)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroDotNet:5
Europa (París)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Europa (España)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Estocolmo)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Zúrich)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroDotNet:5
Israel (Tel Aviv)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroDotNet:5
Medio Oriente (Baréin)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroDotNet:5
Medio Oriente (EAU)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroDotNet:5
América del Sur (São Paulo)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
- Java
-
Región ARN Este de EE. UU. (Norte de Virginia)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Este de EE. UU. (Ohio)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
Oeste de EE. UU. (Norte de California)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Oeste de EE. UU. (Oregón)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
África (Ciudad del Cabo)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Hong Kong)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Hyderabad)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Yakarta)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Melbourne)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Bombay)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Osaka)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Seúl)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Singapur)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Sídney)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
Asia-Pacífico (Tokio)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Canadá (centro)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Europa (Fráncfort)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Europa (Irlanda)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Europa (Londres)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
Europa (Milán)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJava:5
Europa (París)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
Europa (España)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJava:5
Europa (Estocolmo)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Europa (Zúrich)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJava:5
Israel (Tel Aviv)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJava:5
Medio Oriente (Baréin)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJava:5
Medio Oriente (EAU)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJava:5
América del Sur (São Paulo)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Implementación de las funciones de Lambda mediante el contenedor de Amazon ECR
Las funciones de Lambda implementadas como imágenes de contenedor no admiten las capas Lambda de la manera tradicional. Al utilizar imágenes de contenedor, no puede adjuntar una capa como lo haría con otros métodos de implementación de Lambda. En su lugar, debe incorporar de forma manual el contenido de la capa a la imagen del contenedor durante el proceso de compilación.
- Java
-
Puede aprender a integrar la capa de AWS Lambda para OpenTelemetry en su función de Lambda de Java en contenedores, descargar el artefacto
layer.zip
e integrarlo en su contenedor de función de Lambda de Java para habilitar la supervisión de Application Signals.Requisitos previos
-
AWS CLI configurada con sus credenciales
-
Docker instalado
-
Estas instrucciones asumen que está en una plataforma x86_64
Configure la estructura del proyecto
Cree un directorio para la función de Lambda
mkdir java-appsignals-container-lambda && \ cd java-appsignals-container-lambda
Cree una estructura de proyecto de Maven
mkdir -p src/main/java/com/example/java/lambda mkdir -p src/main/resources
Cree un archivo Dockerfile
Descargue e integre la capa de OpenTelemetry con soporte para Application Signals directamente en la imagen de contenedor de Lambda. Para ello, se crea el archivo
Dockerfile
.FROM public.ecr.aws/lambda/java:21 # Install utilities RUN dnf install -y unzip wget maven # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip # Copy and build function code COPY pom.xml ${LAMBDA_TASK_ROOT} COPY src ${LAMBDA_TASK_ROOT}/src RUN mvn clean package -DskipTests # Copy the JAR file to the Lambda runtime directory (from inside the container) RUN mkdir -p ${LAMBDA_TASK_ROOT}/lib/ RUN cp ${LAMBDA_TASK_ROOT}/target/function.jar ${LAMBDA_TASK_ROOT}/lib/ # Set the handler CMD ["com.example.java.lambda.App::handleRequest"]
nota
El archivo
layer.zip
contiene la instrumentación de OpenTelemetry necesaria para que el soporte de AWS Application Signals pueda supervisar su función de Lambda.Los pasos de extracción de la capa garantizan lo siguiente:
El contenido del archivo layer.zip se extrae correctamente en el
/opt/ directory
El script
otel-instrument
recibe los permisos de ejecución adecuadosEl archivo temporal layer.zip se elimina para reducir el tamaño de la imagen
Código de la función de Lambda: cree un archivo Java para su controlador de Lambda en
src/main/java/com/example/lambda/App.java:
Su proyecto debe tener un aspecto similar al siguiente:
. ├── Dockerfile ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── java │ └── lambda │ └── App.java └── resources
Cree e implemente la imagen de contenedor
Configure las variables de entorno
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
Autentique con el ECR
Primero con el ECR público (para la imagen base):
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Luego, con su ECR privado:
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
Cree, etiquete y envíe imágenes
# Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest
Cree y configure la función de Lambda
Cree una nueva función con la consola de Lambda.
Seleccione Imagen del contenedor como opción de implementación.
Elija Examinar imágenes para seleccionar su imagen de Amazon ECR.
Pruebas y verificaciones: pruebe su Lambda con un evento simple. Si la integración de la capa se realiza correctamente, su Lambda aparecerá en el mapa de servicios de Application Signals.
Verá rastros y métricas de su función de Lambda en la consola de CloudWatch.
Solución de problemas
Si Application Signals no funciona, compruebe lo siguiente:
Compruebe los registros de la función para ver si hay algún error relacionado con la instrumentación de OpenTelemetry
Verifique si la variable de entorno
AWS_LAMBDA_EXEC_WRAPPER
está configurada correctamenteAsegúrese de que la extracción de la capa en el archivo de Docker se haya completado correctamente
Confirme si los permisos de IAM están correctamente asociados
Si es necesario, aumente los valores de Tiempo de espera y memoria en la configuración general de la función de Lambda
-
- .Net
-
Puede aprender a integrar la capa de OpenTelemetry compatible con Application Signals en su función de Lambda de .Net en contenedores, descargar el artefacto
layer.zip
e integrarlo en su función de Lambda de .Net para habilitar la supervisión de Application Signals.Requisitos previos
-
AWS CLI configurada con sus credenciales
-
Docker instalado
-
SDK para .NET 8
-
Estas instrucciones asumen que está en una plataforma x86_64
Configure la estructura del proyecto
Cree un directorio para la imagen del contenedor de su función de Lambda
mkdir dotnet-appsignals-container-lambda && \ cd dotnet-appsignals-container-lambda
Cree un archivo Dockerfile
Descargue e integre la capa de OpenTelemetry con soporte para Application Signals directamente en la imagen de contenedor de Lambda. Para ello, se crea el archivo
Dockerfile
.FROM public.ecr.aws/lambda/dotnet:8 # Install utilities RUN dnf install -y unzip wget dotnet-sdk-8.0 which # Add dotnet command to docker container's PATH ENV PATH="/usr/lib64/dotnet:${PATH}" # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip WORKDIR ${LAMBDA_TASK_ROOT} # Copy the project files COPY dotnet-lambda-function/src/dotnet-lambda-function/*.csproj ${LAMBDA_TASK_ROOT}/ COPY dotnet-lambda-function/src/dotnet-lambda-function/Function.cs ${LAMBDA_TASK_ROOT}/ COPY dotnet-lambda-function/src/dotnet-lambda-function/aws-lambda-tools-defaults.json ${LAMBDA_TASK_ROOT}/ # Install dependencies and build the application RUN dotnet restore # Use specific runtime identifier and disable ReadyToRun optimization RUN dotnet publish -c Release -o out --self-contained false /p:PublishReadyToRun=false # Copy the published files to the Lambda runtime directory RUN cp -r out/* ${LAMBDA_TASK_ROOT}/ CMD ["dotnet-lambda-function::dotnet_lambda_function.Function::FunctionHandler"]
nota
El archivo
layer.zip
contiene la instrumentación de OpenTelemetry necesaria para que el soporte de AWS Application Signals pueda supervisar su función de Lambda.Los pasos de extracción de la capa garantizan lo siguiente:
El contenido del archivo layer.zip se extrae correctamente en el
/opt/ directory
El script
otel-instrument
recibe los permisos de ejecución adecuadosEl archivo temporal layer.zip se elimina para reducir el tamaño de la imagen
Código de función de Lambda: inicialice su proyecto Lambda mediante la plantilla AWS Lambda .NET:
# Install the Lambda templates if you haven't already dotnet new -i Amazon.Lambda.Templates # Create a new Lambda project dotnet new lambda.EmptyFunction -n dotnet-lambda-function
Su proyecto debe tener un aspecto similar al siguiente:
. ├── Dockerfile └── dotnet-lambda-function ├── src │ └── dotnet-lambda-function │ ├── Function.cs │ ├── Readme.md │ ├── aws-lambda-tools-defaults.json │ └── dotnet-lambda-function.csproj └── test └── dotnet-lambda-function.Tests ├── FunctionTest.cs └── dotnet-lambda-function.Tests.csproj
Cree e implemente la imagen de contenedor
Configure las variables de entorno
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
Actualice el código
Function.cs
para:Actualice el código
dotnet-lambda-function.csproj
para:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0>/TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="2.5.0" /> <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.4" /> <PackageReference Include="AWSSDK.S3" Version="3.7.305.23" /> </ItemGroup> </Project>
-
Cree e implemente la imagen de contenedor
Configure las variables de entorno
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
Autenticarse con Amazon ECR público
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Autenticarse con Amazon ECR privado
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
Cree un repositorio de Amazon ECR (si es necesario)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
Cree, etiquete y envíe imágenes de Docker
# Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
Cree y configure la función de Lambda
Cree una nueva función con la consola de Lambda.
Seleccione Imagen del contenedor como opción de implementación.
Elija Examinar imágenes para seleccionar su imagen de Amazon ECR.
Pruebas y verificaciones: pruebe su Lambda con un evento simple. Si la integración de la capa se realiza correctamente, su Lambda aparecerá en el mapa de servicios de Application Signals.
Verá rastros y métricas de su función de Lambda en la consola de CloudWatch.
Solución de problemas
Si Application Signals no funciona, compruebe lo siguiente:
Compruebe los registros de la función para ver si hay algún error relacionado con la instrumentación de OpenTelemetry
Verifique si la variable de entorno
AWS_LAMBDA_EXEC_WRAPPER
está configurada correctamenteAsegúrese de que la extracción de la capa en el archivo de Docker se haya completado correctamente
Confirme si los permisos de IAM están correctamente asociados
Si es necesario, aumente los valores de Tiempo de espera y memoria en la configuración general de la función de Lambda
-
- Node.js
-
Puede aprender a integrar la capa de OpenTelemetry compatible con Application Signals en su función de Lambda de Node.js en contenedores, descargar el artefacto
layer.zip
e integrarlo en su función Lambda de Node.js para habilitar la supervisión de Application Signals.Requisitos previos
-
AWS CLI configurada con sus credenciales
-
Docker instalado
-
Estas instrucciones asumen que está en una plataforma x86_64
Configure la estructura del proyecto
Cree un directorio para la imagen del contenedor de su función de Lambda
mkdir nodejs-appsignals-container-lambda &&\ cd nodejs-appsignals-container-lambda
Cree un archivo Dockerfile
Descargue e integre la capa de OpenTelemetry con soporte para Application Signals directamente en la imagen de contenedor de Lambda. Para ello, se crea el archivo
Dockerfile
.# Dockerfile FROM public.ecr.aws/lambda/nodejs:22 # Install utilities RUN dnf install -y unzip wget # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-js-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip # Install npm dependencies RUN npm init -y RUN npm install # Copy function code COPY *.js ${LAMBDA_TASK_ROOT}/ # Set the CMD to your handler CMD [ "index.handler" ]
nota
El archivo
layer.zip
contiene la instrumentación de OpenTelemetry necesaria para que el soporte de AWS Application Signals pueda supervisar su función de Lambda.Los pasos de extracción de la capa garantizan lo siguiente:
El contenido del archivo layer.zip se extrae correctamente en el
/opt/ directory
El script
otel-instrument
recibe los permisos de ejecución adecuadosEl archivo temporal layer.zip se elimina para reducir el tamaño de la imagen
Código de la función de Lambda
Cree un archivo
index.js
, con el siguiente contenido:const { S3Client, ListBucketsCommand } = require('@aws-sdk/client-s3'); // Initialize S3 client const s3Client = new S3Client({ region: process.env.AWS_REGION }); exports.handler = async function(event, context) { console.log('Received event:', JSON.stringify(event, null, 2)); console.log('Handler initializing:', exports.handler.name); const response = { statusCode: 200, body: {} }; try { // List S3 buckets const command = new ListBucketsCommand({}); const data = await s3Client.send(command); // Extract bucket names const bucketNames = data.Buckets.map(bucket => bucket.Name); response.body = { message: 'Successfully retrieved buckets', buckets: bucketNames }; } catch (error) { console.error('Error listing buckets:', error); response.statusCode = 500; response.body = { message: `Error listing buckets: ${error.message}` }; } return response; };
La estructura de su proyecto debería tener un aspecto similar a este:
. ├── Dockerfile └── index.js
Cree e implemente la imagen de contenedor
Configure las variables de entorno
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
Autenticarse con Amazon ECR público
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Autenticarse con Amazon ECR privado
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
Cree un repositorio de Amazon ECR (si es necesario)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
Cree, etiquete y envíe imágenes de Docker
# Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
Cree y configure la función de Lambda
Cree una nueva función con la consola de Lambda.
Seleccione Imagen del contenedor como opción de implementación.
Elija Examinar imágenes para seleccionar su imagen de Amazon ECR.
Pruebas y verificaciones: pruebe su Lambda con un evento simple. Si la integración de la capa se realiza correctamente, su Lambda aparecerá en el mapa de servicios de Application Signals.
Verá rastros y métricas de su función de Lambda en la consola de CloudWatch.
Solución de problemas
Si Application Signals no funciona, compruebe lo siguiente:
Compruebe los registros de la función para ver si hay algún error relacionado con la instrumentación de OpenTelemetry
Verifique si la variable de entorno
AWS_LAMBDA_EXEC_WRAPPER
está configurada correctamenteAsegúrese de que la extracción de la capa en el archivo de Docker se haya completado correctamente
Confirme si los permisos de IAM están correctamente asociados
Si es necesario, aumente los valores de Tiempo de espera y memoria en la configuración general de la función de Lambda
-
- Python
-
Puede aprender a integrar la capa de OpenTelemetry compatible con Application Signals en su función de Lambda de Python en contenedores, descargar el
layer.zip
artefacto e integrarlo en su función Lambda de Python para habilitar la supervisión de Application Signals.Requisitos previos
-
AWS CLI configurada con sus credenciales
-
Docker instalado
-
Estas instrucciones asumen que está en una plataforma x86_64
Configure la estructura del proyecto
Cree un directorio para la imagen del contenedor de su función de Lambda
mkdir python-appsignals-container-lambda &&\ cd python-appsignals-container-lambda
Cree un archivo Dockerfile
Descargue e integre la capa de OpenTelemetry con soporte para Application Signals directamente en la imagen de contenedor de Lambda. Para ello, se crea el archivo
Dockerfile
.nota
El archivo
layer.zip
contiene la instrumentación de OpenTelemetry necesaria para que el soporte de AWS Application Signals pueda supervisar su función de Lambda.Los pasos de extracción de la capa garantizan lo siguiente:
El contenido del archivo layer.zip se extrae correctamente en el
/opt/ directory
El script
otel-instrument
recibe los permisos de ejecución adecuadosEl archivo temporal layer.zip se elimina para reducir el tamaño de la imagen
Código de la función de Lambda
Cree su función de Lambda en un archivo
app.py
:import json import boto3 def lambda_handler(event, context): """ Sample Lambda function that can be used in a container image. Parameters: ----------- event: dict Input event data context: LambdaContext Lambda runtime information Returns: __ dict Response object """ print("Received event:", json.dumps(event, indent=2)) # Create S3 client s3 = boto3.client('s3') try: # List buckets response = s3.list_buckets() # Extract bucket names buckets = [bucket['Name'] for bucket in response['Buckets']] return { 'statusCode': 200, 'body': json.dumps({ 'message': 'Successfully retrieved buckets', 'buckets': buckets }) } except Exception as e: print(f"Error listing buckets: {str(e)}") return { 'statusCode': 500, 'body': json.dumps({ 'message': f'Error listing buckets: {str(e)}' }) }
La estructura de su proyecto debería tener un aspecto similar a este:
. ├── Dockerfile ├── app.py └── instructions.md
Cree e implemente la imagen de contenedor
Configure las variables de entorno
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)
Autenticarse con Amazon ECR público
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Autenticarse con Amazon ECR privado
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
Cree un repositorio de Amazon ECR (si es necesario)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
Cree, etiquete y envíe imágenes de Docker
# Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
Cree y configure la función de Lambda
Cree una nueva función con la consola de Lambda.
Seleccione Imagen del contenedor como opción de implementación.
Elija Examinar imágenes para seleccionar su imagen de Amazon ECR.
Pruebas y verificaciones: pruebe su Lambda con un evento simple. Si la integración de la capa se realiza correctamente, su Lambda aparecerá en el mapa de servicios de Application Signals.
Verá rastros y métricas de su función de Lambda en la consola de CloudWatch.
Solución de problemas
Si Application Signals no funciona, compruebe lo siguiente:
Compruebe los registros de la función para ver si hay algún error relacionado con la instrumentación de OpenTelemetry
Verifique si la variable de entorno
AWS_LAMBDA_EXEC_WRAPPER
está configurada correctamenteAsegúrese de que la extracción de la capa en el archivo de Docker se haya completado correctamente
Confirme si los permisos de IAM están correctamente asociados
Si es necesario, aumente los valores de Tiempo de espera y memoria en la configuración general de la función de Lambda
-