Monitorar o estado de uma função com a API do Lambda - AWS Lambda

Monitorar o estado de uma função com a API do Lambda

Quando você cria ou atualiza uma função, o Lambda provisiona os recursos de computação e rede que permitem que ela seja executada. Na maioria dos casos, esse processo é muito rápido, e sua função está pronta para ser invocada ou modificada imediatamente.

Se você configurar sua função para se conectar a uma nuvem privada virtual (VPC), o processo poderá demorar mais tempo. Quando você conecta uma função pela primeira vez a uma VPC, o Lambda provisiona interfaces de rede, o que leva cerca de um minuto. Para comunicar o estado atual da sua função, o Lambda inclui campos adicionais no documento de configuração da função que é retornado por várias ações de API do Lambda.

Quando você cria uma função, ela está inicialmente no estado Pending. Quando a função está pronta para ser invocada, o estado muda de Pending para Active. Enquanto o estado é Pending, invocações e outras ações de API que operam na função retornam um erro. Se você criar automação em torno da criação e atualização de funções, aguarde a função se tornar ativa antes de executar ações adicionais operadas na função.

É possível usar a API do Lambda para obter informações sobre o estado de uma função. Informações de estado são incluídas no documento FunctionConfiguration retornado por várias ações de API. Para visualizar o estado da função com a AWS CLI, use o comando get-function-configuration.

$ aws lambda get-function-configuration --function-name my-function { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "TracingConfig": { "Mode": "Active" }, "State": "Pending", "StateReason": "The function is being created.", "StateReasonCode": "Creating", ... }

O StateReason e o StateReasonCode contêm informações adicionais sobre o estado quando não é Active. Ocorre falha nas seguintes operações enquanto a criação da função está pendente:

Quando você atualiza a configuração de uma função, a atualização pode acionar uma operação assíncrona para provisionar recursos. Enquanto esse processo estiver em andamento, você poderá invocar a função, mas ocorrerá uma falha em outras operações na função. As invocações ocorridas enquanto a atualização está em andamento são executadas na configuração anterior. O estado da função é Active, mas LastUpdateStatus é InProgress.

exemplo Configuração de funções – conectar-se a uma VPC

{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "VpcConfig": { "SubnetIds": [ "subnet-071f712345678e7c8", "subnet-07fd123456788a036", "subnet-0804f77612345cacf" ], "SecurityGroupIds": [ "sg-085912345678492fb" ], "VpcId": "vpc-08e1234569e011e83" }, "State": "Active", "LastUpdateStatus": "InProgress", ... }

Ocorre falha nas seguintes operações enquanto uma atualização assíncrona está em andamento:

Outras operações, incluindo invocação, funcionam enquanto as atualizações estão em andamento.

Por exemplo, quando você conecta sua função a uma nuvem privada virtual (VPC), o Lambda provisiona uma interface de rede elástica para cada sub-rede. Esse processo pode deixar a função em um estado pendente por cerca de um minuto. O Lambda também recupera interfaces de rede que não estão em uso, colocando a função em um estado Inactive. Quando a função está inativa, uma invocação faz com que ela entre no estado Pending enquanto o acesso à rede é restaurado. Uma falha ResourceNotReadyException ocorrerá na invocação que aciona a restauração e outras invocações enquanto a operação estiver pendente.

Se o Lambda encontrar um erro ao restaurar a interface de rede de uma função, a função voltará ao estado Inactive. A próxima invocação pode acionar outra tentativa. Para alguns erros de configuração, o Lambda aguarda pelo menos 5 minutos antes de tentar criar outra interface de rede. Esses erros têm os seguintes valores de LastUpdateStatusReasonCode:

  • InsufficientRolePermission – a função não existe ou há permissões ausentes.

  • SubnetOutOfIPAddresses – todos os endereços IP em uma sub-rede estão em uso.

Para obter mais informações sobre como os estados funcionam com a conectividade da VPC, consulte Configurar uma função do Lambda para acessar recursos em uma VPC.