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.
También puede mejorar la observabilidad de Lambda mediante Transaction Search, que permite capturar las unidades de seguimiento de los seguimientos para la invocación de funciones de Lambda sin muestreo. Esta característica le permite recopilar las unidades de seguimiento de las funciones, sin que se vea afectado por la marca sampled en la propagación del contexto de seguimiento. Esto garantiza que no haya ningún impacto adicional en los servicios dependientes de las fases posteriores. Al habilitar Transaction Search en Lambda, obtiene una visibilidad completa del rendimiento de las funciones y puede solucionar problemas poco frecuentes. Para empezar, consulte Transaction Search
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.
-
Elija Edit (Edición de).
-
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 por el ARN real de la capa de AWS Lambda para OpenTelemetry de la región.
fn.addLayers(LayerVersion.fromLayerVersionArn(
this, 'AwsLambdaLayerForOtel',
'$AWS_LAMBDA_LAYER_FOR_OTEL_ARN'
))
fn.addEnvironment("AWS_LAMBDA_EXEC_WRAPPER", "/opt/otel-instrument");
Activación de Application Signals en Lambda con el protocolo de contexto para modelos (MCP)
Puede usar el servidor Protocolo de contexto para modelos (MCP) de CloudWatch Application Signals para activar Application Signals en funciones de Lambda mediante interacciones de IA conversacional. Proporciona una interfaz de lenguaje natural para configurar la supervisión de Application Signals.
El servidor MCP automatiza el proceso de activación al comprender sus requisitos y generar la configuración adecuada. En lugar de seguir manualmente los pasos de la consola o escribir el código del CDK, simplemente puede describir lo que desea activar.
Requisitos previos
Antes de usar el servidor MCP para activar Application Signals, asegúrese de lo siguiente:
Entorno de desarrollo compatible con MCP (como Kiro, Claude Desktop, VSCode con extensiones MCP u otras herramientas compatibles con MCP)
El servidor MCP de CloudWatch Application Signals configurado en el IDE. Para obtener instrucciones de configuración detalladas, consulte la documentación del servidor MCP de CloudWatch Application Signals.
Uso del servidor MCP
Una vez que haya configurado el servidor MCP de CloudWatch Application Signals en el IDE, puede solicitar una guía de activación mediante instrucciones en lenguaje natural. Si bien el asistente de codificación puede inferir el contexto a partir de la estructura del proyecto, proporcionar detalles específicos en las instrucciones ayuda a garantizar una orientación más precisa y pertinente. Incluya información como el lenguaje de programación de la función de Lambda, el nombre de la función y las rutas absolutas al código de la función de Lambda y al código de la infraestructura.
Peticiones de prácticas recomendadas (específicas y completas):
"Enable Application Signals for my Python Lambda function.
My function code is in /home/user/order-processor/lambda and IaC is in /home/user/order-processor/terraform"
"I want to add observability to my Node.js Lambda function 'checkout-handler'.
The function code is at /Users/dev/checkout-function and
the CDK infrastructure is at /Users/dev/checkout-function/cdk"
"Help me instrument my Java Lambda function with Application Signals.
Function directory: /opt/apps/payment-lambda
CDK infrastructure: /opt/apps/payment-lambda/cdk"
Peticiones menos efectivas:
"Enable monitoring for my Lambda"
→ Missing: language, paths
"Enable Application Signals. My code is in ./src and IaC is in ./infrastructure"
→ Problem: Relative paths instead of absolute paths
"Enable Application Signals for my Lambda at /home/user/myfunction"
→ Missing: programming language
Plantilla rápida:
"Enable Application Signals for my [LANGUAGE] Lambda function.
Function code: [ABSOLUTE_PATH_TO_FUNCTION]
IaC code: [ABSOLUTE_PATH_TO_IAC]"
Beneficios de usar el servidor MCP
El uso del servidor MCP de CloudWatch Application Signals ofrece varias ventajas:
Interfaz en lenguaje natural: describa lo que desea activar sin memorizar comandos ni sintaxis de la configuración.
Guía adaptada al contexto: el servidor MCP comprende el entorno específico y proporciona recomendaciones personalizadas
Reducción de errores: la generación automática de configuraciones minimiza los errores de escritura manual.
Configuración más rápida: cambie de la intención a la implementación con mayor rapidez.
Herramienta de aprendizaje: vea las configuraciones generadas y comprenda cómo funciona Application Signals.
Para obtener más información sobre la configuración y el uso del servidor MCP de CloudWatch Application Signals, consulte la documentación del servidor MCP.
(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 encontrar el ARN de capa de la región, consulte ADOT Lambda Layer ARNs.
-
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 en lambda: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
Para obtener la lista completa de los ARN de capa de AWS Lambda para OpenTelemetry por región y tiempo de ejecución, consulte ADOT Lambda Layer ARNs en la documentación de AWS Distro para OpenTelemetry. La capa está disponible para tiempos de ejecución de Python, Node.js, .NET y Java.
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
-
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"]
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 adecuados
-
El 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 correctamente
-
Asegú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
-
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"]
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 adecuados
-
El 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 correctamente
-
Asegú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
-
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" ]
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 adecuados
-
El 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 correctamente
-
Asegú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
-
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.
# Dockerfile
FROM public.ecr.aws/lambda/python:3.13
# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT}
# Install unzip and wget utilities
RUN dnf install -y unzip wget
# Download the OpenTelemetry Layer with AppSignals Support
RUN wget https://github.com/aws-observability/aws-otel-python-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
# Set the CMD to your handler
CMD [ "app.lambda_handler" ]
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 adecuados
-
El 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 correctamente
-
Asegú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