View a markdown version of this page

Use o comando AWS FIS aws:lambda: ações de função - AWS Serviço de injeção de falhas

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Use o comando AWS FIS aws:lambda: ações de função

Você pode usar as ações aws:lambda:function para injetar falhas nas invocações de suas funções. AWS Lambda

Essas ações usam uma extensão AWS FIS gerenciada para injetar falhas. Para usar as ações aws:lambda:function, você precisará anexar a extensão como uma camada às suas funções do Lambda e configurar um bucket do Amazon S3 para se comunicar entre e a extensão. AWS FIS

Quando você executa um AWS FIS experimento direcionado a aws:lambda:function, AWS FIS lê a configuração do Amazon S3 da sua função Lambda e grava as informações de injeção de falhas no local especificado do Amazon S3, conforme mostrado no diagrama abaixo.

Diagrama mostrando a configuração da extensão AWS Fault Injection Service Lambda.

Ações

Limitações

  • A extensão AWS FIS Lambda não pode ser usada com funções que usam streaming de resposta. Mesmo quando nenhuma falha for aplicada, a extensão AWS FIS Lambda suprimirá as configurações de streaming. Para obter mais informações, consulte Streaming de respostas para funções do Lambda no guia do AWS Lambda usuário.

Pré-requisitos

Antes de usar as ações do AWS FIS Lambda, certifique-se de ter concluído essas tarefas únicas:

  • Crie um bucket do Amazon S3 na região em que você planeja iniciar um experimento - Você pode usar um único bucket do Amazon S3 para vários experimentos e compartilhar o bucket entre várias AWS contas. No entanto, você deve ter um bucket separado para cada um Região da AWS.

  • Crie uma política do IAM para conceder acesso de leitura para a extensão Lambda ao bucket do Amazon S3 - No modelo a seguir, my-config-distribution-bucket substitua pelo nome do bucket do Amazon S3 que você criou acima e FisConfigs pelo nome de uma pasta no bucket do Amazon S3 que você deseja usar.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowListingConfigLocation", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::my-config-distribution-bucket"], "Condition": { "StringLike": { "s3:prefix": ["FisConfigs/*"] } } }, { "Sid": "AllowReadingObjectFromConfigLocation", "Effect": "Allow", "Action": "s3:GetObject", "Resource": ["arn:aws:s3:::my-config-distribution-bucket/FisConfigs/*"] } ] }
  • Crie uma política do IAM para conceder acesso de gravação para o AWS FIS experimento ao bucket do Amazon S3 - No modelo a seguir, my-config-distribution-bucket substitua pelo nome do bucket do Amazon S3 que você criou acima e FisConfigs pelo nome de uma pasta no bucket do Amazon S3 que você deseja usar.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowFisToWriteAndDeleteFaultConfigurations", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::my-config-distribution-bucket/FisConfigs/*" }, { "Sid": "AllowFisToInspectLambdaFunctions", "Effect": "Allow", "Action": [ "lambda:GetFunction" ], "Resource": "*" }, { "Sid": "AllowFisToDoTagLookups", "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": "*" } ] }

Configurar funções do Lambda

Siga as etapas abaixo para cada função do Lambda que você deseja impactar:

  1. Anexe a política de acesso de leitura do Amazon S3 criada acima à função Lambda.

  2. Anexe a AWS FIS extensão como uma camada à função. Para obter mais informações sobre os ARNs da camada, consulteVersões disponíveis do AWS FIS extensão para Lambda.

  3. Defina a AWS_FIS_CONFIGURATION_LOCATION variável como o ARN da pasta de configuração do Amazon S3, por exemplo. arn:aws:s3:::my-config-distribution-bucket/FisConfigs/

  4. Defina a variável AWS_LAMBDA_EXEC_WRAPPER como /opt/aws-fis/bootstrap.

Configurar um AWS FIS experimento

Antes de executar seu experimento, certifique-se de ter anexado a política de acesso de gravação do Amazon S3 que você criou nos pré-requisitos às funções do experimento que AWS FIS usarão ações do Lambda. Para obter mais informações sobre como configurar um AWS FIS experimento, consulteGerenciando modelos AWS de experimentos do FIS.

Registro em log

A extensão AWS FIS Lambda grava registros no console e CloudWatch registra. O registro pode ser configurado usando a AWS_FIS_LOG_LEVEL variável. Os valores compatíveis são INFO, WARN e ERROR. Os registros serão gravados no formato de log configurado para sua função do Lambda.

Veja a seguir um exemplo de registro em formato de texto:

2024-08-09T18:51:38.599984Z INFO AWS FIS EXTENSION - extension enabled 1.0.1

Veja a seguir um exemplo de registro no formato JSON:

{ "timestamp": "2024-10-08T17:15:36.953905Z", "level": "INFO", "fields": { "message": "AWS FIS EXTENSION - adding 5000 milliseconds of latency to function invocation", "requestId":"0608bf70-908f-4a17-bbfe-3782cd783d8b" } }

Os registros emitidos podem ser usados com os filtros CloudWatch métricos da Amazon para gerar métricas personalizadas. Para obter mais informações sobre filtros métricos, consulte Criação de métricas a partir de eventos de log usando filtros no guia do usuário do Amazon CloudWatch Logs.

Usando o formato métrico CloudWatch incorporado (EMF)

Você pode configurar a extensão AWS FIS Lambda para emitir registros EMF definindo a AWS_FIS_EXTENSION_METRICS variável como. all Por padrão, a extensão não emite registros EMF e usa como AWS_FIS_EXTENSION_METRICS padrão. none Os registros EMF são publicados aws-fis-extension namespace no CloudWatch console.

Dentro do aws-fis-extension namespace, você pode selecionar determinadas métricas para serem exibidas em um gráfico. O exemplo abaixo mostra algumas das métricas disponíveis no aws-fis-extension namespace.

Exemplo de gráfico de métricas de EMF de saída no CloudWatch painel.

Tópicos avançados

Esta seção fornece informações adicionais sobre como AWS FIS funciona com a extensão Lambda e casos de uso especiais.

Entendendo a pesquisa

Você pode notar um período de aceleração de até 60° C antes que as falhas comecem a afetar todas as invocações. Isso ocorre porque a extensão Lambda pesquisa informações de configuração com pouca frequência enquanto espera o início de um experimento. Você pode ajustar o intervalo de pesquisa definindo a variável de AWS_FIS_SLOW_POLL_INTERVAL_SECONDS ambiente (padrão 60s). Um valor menor será pesquisado com mais frequência, mas gerará maior impacto e custo no desempenho. Você também pode notar um período de redução de até 20 segundos após a injeção da falha. Isso ocorre porque as pesquisas de extensão são mais frequentes durante a execução dos experimentos.

Entendendo a concorrência

Você pode direcionar as mesmas funções do Lambda com várias ações simultaneamente. Se as ações forem todas diferentes umas das outras, todas as ações serão aplicadas. Por exemplo, você pode adicionar um atraso inicial antes de retornar um erro. Se duas ações idênticas ou conflitantes forem aplicadas à mesma função, somente a ação com a data de início mais próxima será aplicada.

A figura abaixo mostra duas ações conflitantes, aws:lambda:invocation-error e aws:lambda:invocation-http-integration-response, sobrepostas. Inicialmente, aws:lambda:invocation-error aumenta às 11:38 e é executado por 2 minutos. Em seguida, aws:lambda:invocation-http-integration-response tenta começar às 11:39, mas só entra em vigor às 11:40 após a conclusão da primeira ação. Para manter o tempo do experimento, aws:lambda:invocation-http-integration-response ainda termina no horário originalmente planejado de 11:41.

Gráficos de código de erro e resposta mostrando duas ações sobrepostas de 11:38 a 11:41 no x86 e no arm.

Entendendo a porcentagem de invocação

As ações do AWS Fault Injection Service Lambda usam um alvo aws:lambda:function que permite selecionar um ou mais ARNs de função. AWS Lambda Usando esses ARNs, as ações do AWS Fault Injection Service Lambda podem injetar falhas em cada invocação da função Lambda selecionada. Para permitir que você injete falhas em apenas uma fração das invocações, cada ação permite especificar um invocationPercentage parâmetro com valores de 0 a 100. Usando o invocationPercentage parâmetro, você pode garantir que as ações sejam simultâneas mesmo para porcentagens de invocação abaixo de 100%.

Considerações especiais para SnapStart

AWS Lambda as funções SnapStart ativadas terão uma probabilidade maior de aguardar toda a duração AWS_FIS_SLOW_POLL_INTERVAL_SECONDS antes de pegar a primeira configuração de falha, mesmo que um experimento já esteja em execução. Isso ocorre porque o Lambda SnapStart usa um único snapshot como estado inicial para vários ambientes de execução e persiste no armazenamento temporário. Para a extensão AWS Fault Injection Service Lambda, a frequência de pesquisa persistirá e ignorará a verificação inicial da configuração na inicialização do ambiente de execução. Para obter mais informações sobre o Lambda SnapStart, consulte Melhorando o desempenho de inicialização com o Lambda SnapStart no guia do AWS Lambda usuário.

Considerações especiais para funções rápidas e pouco frequentes

Se sua função do Lambda for executada por menos do que a duração média da pesquisa de 70 milissegundos, o thread de pesquisa poderá precisar de várias invocações para obter configurações de falha. Se a função for executada com pouca frequência, por exemplo, uma vez a cada 15 minutos, a pesquisa nunca será concluída. Para garantir que a linha de pesquisa possa terminar, defina o AWS_FIS_POLL_MAX_WAIT_MILLISECONDS parâmetro. A extensão aguardará até a duração que você definiu para que uma enquete a bordo termine antes de iniciar a função. Observe que isso aumentará a duração da função cobrada e levará a um atraso adicional em algumas invocações.

Configurando várias extensões usando o proxy da API Lambda Runtime

A extensão Lambda usa o proxy da AWS Lambda Runtime API para interceptar invocações de funções antes que elas atinjam o tempo de execução. Isso é feito expondo um proxy da AWS Lambda Runtime API ao tempo de execução e anunciando sua localização na AWS_LAMBDA_RUNTIME_API variável.

O diagrama a seguir mostra a configuração de uma única extensão usando o proxy da API Lambda Runtime:

A configuração padrão.

Para usar a extensão AWS FIS Lambda com outra extensão usando o padrão de proxy da AWS Lambda Runtime API, você precisará encadear os proxies usando um script de bootstrap personalizado. A extensão AWS FIS Lambda aceita as seguintes variáveis de ambiente:

  • AWS_FIS_PROXY_RUNTIME_API_ENDPOINT‐ Pega uma string no formato 127.0.0.1:9876 representando o IP local e a porta do ouvinte para a AWS Lambda Runtime API. Esse pode ser o valor original AWS_LAMBDA_RUNTIME_API ou a localização de outro proxy.

  • AWS_FIS_PROXY_LISTENER_PORT‐ Pega um número de porta na qual a AWS FIS extensão deve iniciar seu próprio proxy, por padrão9100.

Com essas configurações, você pode encadear a AWS FIS extensão com outra extensão usando o proxy da API Lambda Runtime em duas ordens diferentes.

Duas extensões em cadeia usando o proxy da API Lambda.

Para obter mais informações sobre o proxy da AWS Lambda Runtime API, consulte Aprimorando a segurança e a governança do tempo de AWS Lambda execução com a extensão proxy da Runtime API e Usando a API de tempo de execução do Lambda para tempos de execução personalizados no guia do AWS Lambda usuário.

Utilizar AWS FIS com tempos de execução de contêineres

Para AWS Lambda funções que usam imagens de contêiner que aceitam a variável de AWS_LAMBDA_RUNTIME_API ambiente, você pode empacotar a extensão AWS FIS Lambda em sua imagem de contêiner seguindo as etapas abaixo:

  1. Determine o ARN da camada da qual extrair a extensão. Para obter mais informações sobre como encontrar o ARN, consulteConfigurar funções do Lambda.

  2. Use a AWS Command Line Interface (CLI) para solicitar detalhes sobre a extensãoaws lambda get-layer-version-by-arn --arn fis-extension-arn. A resposta conterá um Location campo contendo um URL pré-assinado do qual você poderá baixar a extensão FIS como um arquivo ZIP.

  3. Descompacte o conteúdo da extensão em seu sistema /opt de arquivos Docker. Veja a seguir um exemplo de Dockerfile baseado no tempo de execução do NodeJS Lambda:

    # extension installation # FROM amazon/aws-lambda-nodejs:12 AS builder COPY extension.zip extension.zip RUN yum install -y unzip RUN mkdir -p /opt RUN unzip extension.zip -d /opt RUN rm -f extension.zip FROM amazon/aws-lambda-nodejs:12 WORKDIR /opt COPY --from=builder /opt . # extension installation finished # # JS example. Modify as required by your runtime WORKDIR ${LAMBDA_TASK_ROOT} COPY index.js package.json . RUN npm install CMD [ "index.handler" ]

Para obter mais informações sobre imagens de contêiner, consulte Criar uma função Lambda usando uma imagem de contêiner no guia do AWS Lambda usuário.

AWS FIS Variáveis de ambiente do Lambda

A seguir está uma lista de variáveis de ambiente para a extensão AWS FIS Lambda

  • AWS_FIS_CONFIGURATION_LOCATION‐ Obrigatório. Local onde AWS FIS gravará as configurações de falha ativas e a extensão lerá as configurações de falha. Os locais devem estar no formato ARN do Amazon S3, incluindo um bucket e um caminho. Por exemplo, .arn:aws:s3:::my-fis-config-bucket/FisConfigs/

  • AWS_LAMBDA_EXEC_WRAPPER‐ Obrigatório. Localização do script AWS Lambda wrapper usado para configurar a extensão AWS FIS Lambda. Isso deve ser definido para o /opt/aws-fis/bootstrap script incluído na extensão.

  • AWS_FIS_LOG_LEVEL‐ Opcional. Nível de log para mensagens emitidas pela extensão AWS FIS Lambda. Os valores compatíveis são INFO, WARN e ERROR. Se não for definida, a AWS FIS extensão assumirá como padrãoINFO.

  • AWS_FIS_EXTENSION_METRICS‐ Opcional. Os possíveis valores são all e none. Se definido como all a extensão, emitirá métricas EMF sob o. aws-fis-extension namespace

  • AWS_FIS_SLOW_POLL_INTERVAL_SECONDS‐ Opcional. Se definido, substituirá o intervalo de pesquisa (em segundos) enquanto a extensão não estiver injetando falhas e aguardando que uma configuração de falha seja adicionada ao local de configuração. O padrão é 60.

  • AWS_FIS_PROXY_RUNTIME_API_ENDPOINT‐ Opcional. Se definido, substituirá o valor de AWS_LAMBDA_RUNTIME_API para definir onde a AWS FIS extensão interage com a API de tempo de AWS Lambda execução para controlar a invocação da função. IP:PORTEspera, por exemplo,127.0.0.1:9000. Para obter mais informações sobreAWS_LAMBDA_RUNTIME_API, consulte Como usar a API de tempo de execução do Lambda para tempos de execução personalizados no guia do AWS Lambda usuário.

  • AWS_FIS_PROXY_LISTENER_PORT‐ Opcional. Define a porta na qual a extensão AWS FIS Lambda expõe um proxy AWS Lambda de API de tempo de execução que pode ser usado por outra extensão ou pelo tempo de execução. O padrão é 9100.

  • AWS_FIS_POLL_MAX_WAIT_MILLISECONDS‐ Opcional. Se definida como um valor diferente de zero, essa variável define o número de milissegundos que a extensão aguardará pela conclusão de uma pesquisa assíncrona em andamento antes de avaliar as configurações de falha e iniciar a invocação do tempo de execução. O padrão é 0. Ao usar preventExecution set to true na aws:lambda:invocation-error ação, recomendamos definir essa variável para pelo menos 2000 (2 segundos) para garantir que a extensão tenha uma configuração de falha atualizada antes de decidir se deseja bloquear a execução da função.