Habilitar aplicações no Lambda
Você pode habilitar o Application Signals para as funções do Lambda. O Application Signals instrumentaliza automaticamente as funções do Lambda usando bibliotecas aprimoradas do AWS Distro para OpenTelemetry (ADOT), fornecidas por meio de uma camada do Lambda. Essa camada do AWS Lambda para OpenTelemetry empacota e implanta as bibliotecas necessárias para a instrumentação automática do Application Signals.
Além de ser compatível com o Application Signals, essa camada do Lambda também é um componente do suporte ao Lambda OpenTelemetry e fornece funcionalidade de rastreamento.
Também é possível aprimorar a observabilidade do Lambda usando o Transaction Search, que permite capturar todas as extensões de rastreamento para invocação da função do Lambda sem amostragem. Esse recurso permite que você colete extensões das funções, não afetadas pelo sinalizador sampled
na propagação do contexto de rastreamento. Isso garante que não haja impacto adicional nos serviços dependentes a jusante. Ao habilitar o Transaction Search no Lambda, você obtém visibilidade completa da performance da função e pode solucionar problemas que ocorrem raramente. Para começar, consulte o Transaction Search.
Conceitos básicos
Há três métodos para habilitar o Application Signals das funções do Lambda.
Depois de habilitar o Application Signals para uma função do Lambda, leva alguns minutos para que a telemetria dessa função apareça no console do Application Signals.
-
Usar o console do CloudWatch Application Signals
-
Usar o console do Lambda
-
Adicione manualmente a camada do AWS Lambda para OpenTelemetry ao runtime da função do Lambda.
Cada um desses métodos adiciona uma camada do AWS Lambda para OpenTelemetry à função.
Usar o console do CloudWatch Application Signals
Use estas etapas para usar o console do Application Signals para habilitar o Application Signals para uma função do Lambda.
Abra o console do CloudWatch, em https://console.aws.amazon.com/cloudwatch/
. -
No painel de navegação, escolha Application Signals e, em seguida, Serviços.
-
Na área da lista de Serviços, escolha Habilitar o Application Signals.
-
Escolha o bloco Lambda.
-
Selecione cada função que você deseja habilitar do Application Signals e escolha Concluído.
Usar o console do Lambda
Realize estas etapas para usar o console do Lambda para habilitar o Application Signals para uma função do Lambda.
Abra o console AWS Lambda em https://console.aws.amazon.com/lambda/
. -
No painel de navegação, escolha Funções e, em seguida, escolha o nome da função que você deseja habilitar.
-
Escolha a guia Configuração e depois Ferramentas de monitoramento e operações.
-
Escolha Editar.
-
Na seção CloudWatch Application Signals e X-Ray, selecione Coletar automaticamente rastreamentos de aplicações e métricas de aplicações padrão com o Application Signals e Coletar automaticamente rastreamentos de serviços do Lambda para visibilidade de ponta a ponta com o X-Ray.
-
Escolha Salvar.
Habilitar o Application Signals no Lambda usando o AWS CDK
Caso ainda não tenha habilitado o Application Signals nessa conta, você deve conceder as permissões necessárias para o Application Signals descobrir seus serviços. Para obter mais informações, consulte Habilitar o Application Signals na conta.
-
Habilitar o Application Signals para aplicações
import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );
O recurso Discovery CloudFormation concede as seguintes permissões ao Application Signals:
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
Para obter mais informações sobre essa função, consulte Permissões de perfis vinculados ao serviço para o CloudWatch Application Signals.
-
-
Adicione a política do IAM
CloudWatchLambdaApplicationSignalsExecutionRolePolicy
à função do 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'));
-
Substitua
$AWS_LAMBDA_LAYER_FOR_OTEL_ARN
pelo ARN da camada do AWS Lambda para OpenTelemetry atual na região correspondente.fn.addLayers(LayerVersion.fromLayerVersionArn( this, 'AwsLambdaLayerForOtel', '$AWS_LAMBDA_LAYER_FOR_OTEL_ARN' )) fn.addEnvironment("AWS_LAMBDA_EXEC_WRAPPER", "/opt/otel-instrument");
(Opcional) Monitorar a integridade da aplicação
Depois de habilitar as aplicações no Lambda, você pode monitorar a integridade da aplicação. Para obter mais informações, consulte Monitorar a integridade operacional das suas aplicações com o Application Signals.
Habilite manualmente o Application Signals.
Use estas etapas para habilitar manualmente o Application Signals para uma função do Lambda.
-
Adicione a camada do AWS Lambda para OpenTelemetry ao runtime do Lambda. Para encontrar o ARN da camada, consulte ARNs da camada do AWS Lambda para OpenTelemetry.
-
Adicionar a variável de ambiente
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
Adicione a variável de ambiente
LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT
para configurar ambientes personalizados do Lambda. Por padrão, os ambientes lambda são configurados comolambda:default
. -
Anexar a política do IAM CloudWatchLambdaApplicationSignalsExecutionRolePolicy gerenciada pela AWS ao perfil de execução do Lambda.
-
(Opcional) Recomendamos que você habilite o rastreamento ativo do Lambda para obter uma melhor experiência de rastreamento. Para obter mais informações, consulte Visualizar as invocações da função do Lambda usando o AWS X-Ray.
Desabilitar manualmente o Application Signals
Para desabilitar manualmente o Application Signals para uma função do Lambda, remova a camada do AWS Lambda para OpenTelemetry do runtime do Lambda e remova a variável de ambiente AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
.
Configuração do Application Signals
Você pode usar esta seção para configurar o Application Signals no Lambda.
Como agrupar várias funções do Lambda em um serviço
A variável de ambiente OTEL_SERVICE_NAME
define o nome do serviço. Isso será exibido como o nome do serviço para a aplicação nos painéis do Application Signals. Você poderá atribuir o mesmo nome de serviço a várias funções do Lambda, e elas serão mescladas em um único serviço no Application Signals. Quando você não fornecer um valor para essa chave, o nome padrão da função do Lambda será usado.
Amostragem
Por padrão, a estratégia de amostragem de rastreamento é baseada no pai. Você pode ajustar a estratégia de amostragem ao definir variáveis de ambiente OTEL_TRACES_SAMPLER
.
Por exemplo, defina a taxa de amostragem de rastreamento como 30%.
OTEL_TRACES_SAMPLER=traceidratio OTEL_TRACES_SAMPLER_ARG=0.3
Para obter mais informações, consulte OpenTelemetry Environment Variable Specification
Como habilitar todas as instrumentações da biblioteca
Para reduzir inicializações a frio do Lambda, por padrão, somente as instrumentações do AWS SDK e de HTTP estão habilitadas para Python, Node e Java. Você pode definir variáveis de ambiente para habilitar a instrumentação para outras bibliotecas usadas na função do Lambda.
-
Python:
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS=none
-
Nó:
OTEL_NODE_DISABLED_INSTRUMENTATIONS=none
-
Java:
OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=true
ARNs da camada do AWS Lambda para OpenTelemetry
As tabelas a seguir listam os ARNs a serem usados na camada do AWS Lambda para OpenTelemetry para cada região em que são compatíveis.
- Python
-
Região ARN Leste dos EUA (Norte da Virgínia)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:16
Leste dos EUA (Ohio)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
Oeste dos EUA (Norte da Califórnia)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:20
Oeste dos EUA (Oregon)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:20
África (Cidade do Cabo)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroPython:10
Ásia-Pacífico (Hong Kong)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroPython:10
Ásia-Pacífico (Hyderabad)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroPython:10
Ásia-Pacífico (Jacarta)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroPython:10
Ásia-Pacífico (Melbourne)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroPython:10
Ásia-Pacífico (Mumbai)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Ásia-Pacífico (Osaka)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroPython:12
Ásia-Pacífico (Seul)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
Ásia-Pacífico (Singapura)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:12
Ásia-Pacífico (Sydney)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
Ásia-Pacífico (Tóquio)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Canadá (Central)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Europa (Frankfurt)
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ão)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroPython:10
Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroPython:13
Europa (Espanha)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroPython:10
Europa (Estocolmo)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
Europa (Zurique)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroPython:10
Israel (Tel Aviv)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroPython:10
Oriente Médio (Bahrein)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroPython:10
Oriente Médio (Emirados Árabes Unidos)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroPython:10
América do Sul (São Paulo)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
- Node.js
-
Região ARN Leste dos EUA (Norte da Virgínia)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Leste dos EUA (Ohio)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
Oeste dos EUA (Norte da Califórnia)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Oeste dos EUA (Oregon)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
África (Cidade do Cabo)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJs:8
Ásia-Pacífico (Hong Kong)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJs:8
Ásia-Pacífico (Hyderabad)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJs:6
Ásia-Pacífico (Jacarta)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJs:8
Ásia-Pacífico (Melbourne)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJs:8
Ásia-Pacífico (Mumbai)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Ásia-Pacífico (Osaka)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
Ásia-Pacífico (Seul)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
Ásia-Pacífico (Singapura)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Ásia-Pacífico (Sydney)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
Ásia-Pacífico (Tóquio)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Canadá (Central)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Europa (Frankfurt)
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ão)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJs:8
Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
Europa (Espanha)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJs:8
Europa (Estocolmo)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
Europa (Zurique)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJs:8
Israel (Tel Aviv)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJs:8
Oriente Médio (Bahrein)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJs:8
Oriente Médio (Emirados Árabes Unidos)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJs:8
América do Sul (São Paulo)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
- .Net
-
Região ARN Leste dos EUA (Norte da Virgínia)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:6
Leste dos EUA (Ohio)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Oeste dos EUA (Norte da Califórnia)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Oeste dos EUA (Oregon)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
África (Cidade do Cabo)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Hong Kong)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Hyderabad)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Jacarta)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Melbourne)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Mumbai)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Osaka)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Seul)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Singapura)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Sydney)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Ásia-Pacífico (Tóquio)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Canadá (Central)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Frankfurt)
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ão)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroDotNet:5
Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Espanha)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Estocolmo)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
Europa (Zurique)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroDotNet:5
Israel (Tel Aviv)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroDotNet:5
Oriente Médio (Bahrein)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroDotNet:5
Oriente Médio (Emirados Árabes Unidos)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroDotNet:5
América do Sul (São Paulo)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
- Java
-
Região ARN Leste dos EUA (Norte da Virgínia)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Leste dos EUA (Ohio)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
Oeste dos EUA (Norte da Califórnia)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Oeste dos EUA (Oregon)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
África (Cidade do Cabo)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Hong Kong)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Hyderabad)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Jacarta)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Melbourne)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Mumbai)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Osaka)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Seul)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Singapura)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Sydney)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
Ásia-Pacífico (Tóquio)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Canadá (Central)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Europa (Frankfurt)
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ão)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJava:5
Europe (Paris)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
Europa (Espanha)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJava:5
Europa (Estocolmo)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Europa (Zurique)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJava:5
Israel (Tel Aviv)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJava:5
Oriente Médio (Bahrein)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJava:5
Oriente Médio (Emirados Árabes Unidos)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJava:5
América do Sul (São Paulo)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Implementar funções do Lambda usando um contêiner do Amazon ECR
As funções do Lambda implantadas como imagens de contêiner não oferecem suporte a camadas do Lambda da maneira tradicional. Ao usar imagens de contêiner, você não pode anexar uma camada como faria com outros métodos de implantação do Lambda. Em vez disso, você deve incorporar manualmente o conteúdo da camada na imagem do contêiner durante o processo de criação.
- Java
-
Você pode aprender como integrar a camada do AWS Lambda para OpenTelemetry à função Java do Lambda em contêiner, baixar o artefato
layer.zip
e integrá-lo ao contêiner da função Java do Lambda para habilitar o monitoramento do Application Signals.Pré-requisitos
-
AWS CLI, configurada com suas credenciais
-
Docker instalado
-
Estas instruções pressupõem que você esteja na plataforma x86_64
-
Configurar a estrutura do projeto
Criar um diretório para a função do Lambda
mkdir java-appsignals-container-lambda && \ cd java-appsignals-container-lambda
Criar uma estrutura de projeto Maven
mkdir -p src/main/java/com/example/java/lambda mkdir -p src/main/resources
-
Criar um Dockerfile
Baixe e integre a camada do OpenTelemetry com suporte ao Application Signals diretamente na imagem de contêiner do Lambda. Para fazer isso, o arquivo
Dockerfile
é criado.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
O arquivo
layer.zip
contém a instrumentação necessária do OpenTelemetry para o suporte do AWS Application Signals para monitorar a função do Lambda.As etapas de extração da camada garantem que:
-
O conteúdo do layer.zip seja extraído corretamente para o
/opt/ directory
-
O script
otel-instrument
receba as permissões de execução adequadas -
O arquivo temporário layer.zip seja removido para manter o tamanho da imagem menor
-
-
Código da função do Lambda: criar um arquivo Java para o manipulador do Lambda em
src/main/java/com/example/lambda/App.java:
Seu projeto será semelhante ao seguinte:
. ├── Dockerfile ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── java │ └── lambda │ └── App.java └── resources
-
Criar e implantar a imagem do contêiner
Configurar variáveis de ambiente
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)
Autenticar com ECR
Primeiro com ECR público (para imagem base):
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Depois, com seu 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
Criar, marcar e enviar a imagem por push
# 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
-
Criar e configurar a função do Lambda
Crie uma função usando o console do Lambda.
Selecione Imagem de contêiner como a opção de implantação.
Escolha Procurar imagens para selecionar a imagem do Amazon ECR.
-
Testes e verificações: teste o Lambda com um evento simples. Se a integração da camada for bem-sucedida, o Lambda será exibido sob o mapa dos serviços do Application Signals.
Você verá rastreamentos e métricas para a função do Lambda no console do CloudWatch.
Solução de problemas
Se o Application Signals não estiver funcionando, verifique o seguinte:
-
Verificar os logs de função em busca de erros relacionados à instrumentação do OpenTelemetry
-
Verificar se a variável de ambiente
AWS_LAMBDA_EXEC_WRAPPER
está definida corretamente -
Certificar-se de que a extração da camada no arquivo Docker foi concluída com sucesso
-
Confirmar se as permissões do IAM estão anexadas corretamente
-
Se necessário, aumentar as definições de tempo limite e memória na configuração geral da função do Lambda
-
- .Net
-
Você pode aprender como integrar a camada do OpenTelemetry com suporte do Application Signals à função .NET do Lambda em contêiner, baixar o artefato
layer.zip
e integrá-lo à função .NET do Lambda para habilitar o monitoramento do Application Signals.Pré-requisitos
-
AWS CLI, configurada com suas credenciais
-
Docker instalado
-
SDK do .Net 8
-
Estas instruções pressupõem que você esteja na plataforma x86_64
-
Configurar a estrutura do projeto
Criar um diretório para a imagem do contêiner da função do Lambda
mkdir dotnet-appsignals-container-lambda && \ cd dotnet-appsignals-container-lambda
-
Criar um Dockerfile
Baixe e integre a camada do OpenTelemetry com suporte ao Application Signals diretamente na imagem de contêiner do Lambda. Para fazer isso, o arquivo
Dockerfile
é criado.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
O arquivo
layer.zip
contém a instrumentação necessária do OpenTelemetry para o suporte do AWS Application Signals para monitorar a função do Lambda.As etapas de extração da camada garantem que:
-
O conteúdo do layer.zip seja extraído corretamente para o
/opt/ directory
-
O script
otel-instrument
receba as permissões de execução adequadas -
O arquivo temporário layer.zip seja removido para manter o tamanho da imagem menor
-
-
Código da função do Lambda: inicialize o projeto do Lambda usando o modelo .NET do AWS Lambda:
# 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
Seu projeto será semelhante ao seguinte:
. ├── 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
-
Criar e implantar a imagem do contêiner
Configurar variáveis de ambiente
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)
Atualize o código
Function.cs
para:Atualize o 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>
-
Criar e implantar a imagem do contêiner
Configurar variáveis de ambiente
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)
Autenticar com o Amazon ECR público
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Autenticar com o 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
Criar um repositório do Amazon ECR (se necessário)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
Criar, marcar e enviar a imagem por push
# 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
-
Criar e configurar a função do Lambda
Crie uma função usando o console do Lambda.
Selecione Imagem de contêiner como a opção de implantação.
Escolha Procurar imagens para selecionar a imagem do Amazon ECR.
-
Testes e verificações: teste o Lambda com um evento simples. Se a integração da camada for bem-sucedida, o Lambda será exibido sob o mapa dos serviços do Application Signals.
Você verá rastreamentos e métricas para a função do Lambda no console do CloudWatch.
Solução de problemas
Se o Application Signals não estiver funcionando, verifique o seguinte:
-
Verificar os logs de função em busca de erros relacionados à instrumentação do OpenTelemetry
-
Verificar se a variável de ambiente
AWS_LAMBDA_EXEC_WRAPPER
está definida corretamente -
Certificar-se de que a extração da camada no arquivo Docker foi concluída com sucesso
-
Confirmar se as permissões do IAM estão anexadas corretamente
-
Se necessário, aumentar as definições de tempo limite e memória na configuração geral da função do Lambda
-
- Node.js
-
Você pode aprender como integrar a camada do OpenTelemetry com suporte do Application Signals à função Node.js do Lambda em contêiner, baixar o artefato
layer.zip
e integrá-lo à função Node.js do Lambda para habilitar o monitoramento do Application Signals.Pré-requisitos
-
AWS CLI, configurada com suas credenciais
-
Docker instalado
-
Estas instruções pressupõem que você esteja na plataforma x86_64
-
Configurar a estrutura do projeto
Criar um diretório para a imagem do contêiner da função do Lambda
mkdir nodejs-appsignals-container-lambda &&\ cd nodejs-appsignals-container-lambda
-
Criar um Dockerfile
Baixe e integre a camada do OpenTelemetry com suporte ao Application Signals diretamente na imagem de contêiner do Lambda. Para fazer isso, o arquivo
Dockerfile
é criado.# 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
O arquivo
layer.zip
contém a instrumentação necessária do OpenTelemetry para o suporte do AWS Application Signals para monitorar a função do Lambda.As etapas de extração da camada garantem que:
-
O conteúdo do layer.zip seja extraído corretamente para o
/opt/ directory
-
O script
otel-instrument
receba as permissões de execução adequadas -
O arquivo temporário layer.zip seja removido para manter o tamanho da imagem menor
-
-
Código da função do Lambda
Crie um arquivo
index.js
com o seguinte conteúdo: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; };
A estrutura do projeto deve ser semelhante a esta:
. ├── Dockerfile └── index.js
-
Criar e implantar a imagem do contêiner
Configurar variáveis de ambiente
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)
Autenticar com o Amazon ECR público
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Autenticar com o 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
Criar um repositório do Amazon ECR (se necessário)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
Criar, marcar e enviar a imagem por push
# 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
-
Criar e configurar a função do Lambda
Crie uma função usando o console do Lambda.
Selecione Imagem de contêiner como a opção de implantação.
Escolha Procurar imagens para selecionar a imagem do Amazon ECR.
-
Testes e verificações: teste o Lambda com um evento simples. Se a integração da camada for bem-sucedida, o Lambda será exibido sob o mapa dos serviços do Application Signals.
Você verá rastreamentos e métricas para a função do Lambda no console do CloudWatch.
Solução de problemas
Se o Application Signals não estiver funcionando, verifique o seguinte:
-
Verificar os logs de função em busca de erros relacionados à instrumentação do OpenTelemetry
-
Verificar se a variável de ambiente
AWS_LAMBDA_EXEC_WRAPPER
está definida corretamente -
Certificar-se de que a extração da camada no arquivo Docker foi concluída com sucesso
-
Confirmar se as permissões do IAM estão anexadas corretamente
-
Se necessário, aumentar as definições de tempo limite e memória na configuração geral da função do Lambda
-
- Python
-
Você pode aprender como integrar a camada do OpenTelemetry com suporte do Application Signals à função Python do Lambda em contêiner, baixar o artefato
layer.zip
e integrá-lo à função Python do Lambda para habilitar o monitoramento do Application Signals.Pré-requisitos
-
AWS CLI, configurada com suas credenciais
-
Docker instalado
-
Estas instruções pressupõem que você esteja na plataforma x86_64
-
Configurar a estrutura do projeto
Criar um diretório para a imagem do contêiner da função do Lambda
mkdir python-appsignals-container-lambda &&\ cd python-appsignals-container-lambda
-
Criar um Dockerfile
Baixe e integre a camada do OpenTelemetry com suporte ao Application Signals diretamente na imagem de contêiner do Lambda. Para fazer isso, o arquivo
Dockerfile
é criado.nota
O arquivo
layer.zip
contém a instrumentação necessária do OpenTelemetry para o suporte do AWS Application Signals para monitorar a função do Lambda.As etapas de extração da camada garantem que:
-
O conteúdo do layer.zip seja extraído corretamente para o
/opt/ directory
-
O script
otel-instrument
receba as permissões de execução adequadas -
O arquivo temporário layer.zip seja removido para manter o tamanho da imagem menor
-
-
Código da função do Lambda
Crie a função do Lambda em um arquivo
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)}' }) }
A estrutura do projeto deve ser semelhante a esta:
. ├── Dockerfile ├── app.py └── instructions.md
-
Criar e implantar a imagem do contêiner
Configurar variáveis de ambiente
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)
Autenticar com o Amazon ECR público
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Autenticar com o 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
Criar um repositório do Amazon ECR (se necessário)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
Criar, marcar e enviar a imagem por push
# 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
-
Criar e configurar a função do Lambda
Crie uma função usando o console do Lambda.
Selecione Imagem de contêiner como a opção de implantação.
Escolha Procurar imagens para selecionar a imagem do Amazon ECR.
-
Testes e verificações: teste o Lambda com um evento simples. Se a integração da camada for bem-sucedida, o Lambda será exibido sob o mapa dos serviços do Application Signals.
Você verá rastreamentos e métricas para a função do Lambda no console do CloudWatch.
Solução de problemas
Se o Application Signals não estiver funcionando, verifique o seguinte:
-
Verificar os logs de função em busca de erros relacionados à instrumentação do OpenTelemetry
-
Verificar se a variável de ambiente
AWS_LAMBDA_EXEC_WRAPPER
está definida corretamente -
Certificar-se de que a extração da camada no arquivo Docker foi concluída com sucesso
-
Confirmar se as permissões do IAM estão anexadas corretamente
-
Se necessário, aumentar as definições de tempo limite e memória na configuração geral da função do Lambda
-