AWS Lambda - Função em Python

Neste capítulo, criaremos uma função simples do AWS Lambda em Python e entenderemos seus conceitos de trabalho seguindo os detalhes.

Antes de continuar a trabalhar na criação de uma função Lambda no AWS, precisamos do suporte do kit de ferramentas AWS para Python. Para isso, siga os passos abaixo e observe as capturas de tela correspondentes anexadas -

Passo 1

Faça login no console AWS, crie a função Lambda e selecione o idioma como Python.

Passo 2

Agora clique Create functione insira os detalhes para criar um AWS Lambda simples em Python. Este código retorna a mensagemHello from Lambda using Python e parece como mostrado aqui -

etapa 3

Agora, salve as alterações e teste o código para ver a saída. Você deve ver a seguinte saída e logs ao testá-lo no console da AWS usando o botão de teste da IU.

Passo 4

Agora, você pode escrever código dentro de qualquer editor ou IDE para Python. Aqui, estamos usando o código do Visual Studio para escrever o código. Posteriormente, você deve compactar o arquivo e fazer o upload no console da AWS.

Aqui, compactamos o código e o usamos no console da AWS.

Etapa 5

Agora, selecione Upload a .ZIP file opção como mostrado abaixo -

Detalhes do manipulador para Python

Observe que o manipulador deve ser o nome do arquivo seguido pelo nome da função. No caso acima, nosso nome de arquivo éhellopython.py e o nome da função é my_handler; então o manipulador será hellopython.my_handler.

Depois que o upload é feito e as alterações salvas, ele realmente mostra os detalhes do arquivo zip no editor online no console do AWS Lambda. Agora, vamos testar o código para ver a saída e os logs.

Agora, vamos entender os detalhes da função Lambda usando o seguinte código de exemplo -

def my_handler(event, context):
   return "aws lambda in python using zip file"

No código acima, o nome da função my_handler tem 2 parâmetros, evento e contexto.

Objeto de contexto em Python

O objeto de contexto fornece detalhes como o nome da função Lambda, tempo restante em milissegundos, ID da solicitação, nome do grupo de observação da nuvem, detalhes de tempo limite etc.

Os métodos e atributos disponíveis no objeto de contexto são mostrados nas tabelas fornecidas abaixo -

Sr. Não Nome e descrição do método
1

get_remaining_time_in_millis()

Este método fornece o tempo restante em milissegundos até que a função lambda termine a função

Sr. Não Atributo e descrição
1

function_name

Isso dá o nome da função aws lambda

2

function_version

Isso dá a versão da função lambda de aws em execução

3

invoked_function_arn

Isso fornecerá detalhes do ARN.

4

memory_limit_in_mb

Isso mostra o limite de memória adicionado ao criar a função lambda

5

aws_request_id

Isso fornece o id do pedido aws.

6

og_group_name

Isso dará o nome do grupo Cloudwatch

7

log_stream_name

Isso fornecerá o nome do fluxo de log do Cloudwatch onde os logs são gravados.

8

identity

Isso fornecerá detalhes sobre o provedor de identidade cognito amazon quando usado com o aws mobile sdk. Os detalhes fornecidos são os seguintes -

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

client_context

Isso fornecerá detalhes do aplicativo cliente quando usado com o aws mobile sdk. Os detalhes fornecidos são os seguintes -

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom - possui ditado de valores personalizados do aplicativo cliente móvel
  • client_context.env - possui detalhes de ambiente do AWS Mobile SDK

Vamos ver um exemplo de trabalho em Python que mostra os detalhes do contexto. Observe o código fornecido abaixo -

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

A saída correspondente do código mostrado acima é fornecida abaixo -

Registro usando Python

Para registrar informações usando Python, podemos usar a função de impressão ou logger disponível. Vamos usar o exemplo de contexto acima e verificar inCloudWatch para ver se os logs são impressos. Observe o seguinte código -

def my_handler(event, context):
   print("Log stream name:", context.log_stream_name)
   print("Log group name:",  context.log_group_name)
   print("Request ID:",context.aws_request_id)
   print("Mem. limits(MB):", context.memory_limit_in_mb)
   print("Time remaining (MS):", context.get_remaining_time_in_millis())
   return "aws lambda in python using zip file"

A saída deste código no CloudWatch é mostrada abaixo -

Observe o exemplo a seguir para entender sobre como usar o logger para imprimir logs para CloudWatch -

import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_handler(event, context):
   logger.info('Using logger to print messages to cloudwatch logs')
   return "aws lambda in python using zip file"

A saída para isso será como mostrado na captura de tela fornecida abaixo -

Tratamento de erros em Python para função Lambda

Nesta seção, vamos ver um exemplo prático que mostra como manipular erros em Python. Observe o trecho de código fornecido aqui -

def error_handler(event, context):
   raise Exception('Error Occured!')

A exibição do log é como mostrado na imagem aqui -