¿Cómo puedo resolver los errores «unknown service», «parameter validation failed» u «object has no attribute» de una función de Lambda de Python (Boto3)?

5 minutos de lectura
0

Mi función de AWS Lambda de Python (Boto3) devuelve los errores «unknown service», «parameter validation failed» u «object has no attribute».

Descripción breve

Una función de Lambda de Python (Boto3) que no utilice la versión más reciente de Boto3 podría devolver alguno de los siguientes errores:

  • unknown service
  • parameter validation failed
  • object has no attribute

Estos errores se producen cuando la función intenta llamar a un servicio de AWS o a una API de AWS que requiere la versión más reciente de Boto3.
Para resolver este problema, cree una capa de Lambda que utilice la versión más reciente de Boto3. Puede hacerlo manualmente o puede usar Docker. Es más eficiente actualizar la capa de Lambda mediante Docker, y así se asegura de que los binarios sean correctos para el sistema operativo de Lambda.

Importante: Los siguientes procedimientos asumen que tiene la versión más reciente de Botocore (en GitHub). Si no tiene la versión más reciente de Botocore, debe actualizar Botocore antes de poder actualizar a la versión más reciente de Boto3. Implemente la resolución según sea necesario para su configuración específica y de Python.

Resolución

Nota: Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de la AWS CLI.

Se recomienda crear una capa de Lambda en el mismo sistema operativo en el que se basa el entorno de ejecución de Lambda. Por ejemplo, las versiones 3.8 y 3.9 de Python se basan en una imagen de máquina de Amazon (AMI) de Amazon Linux 2. Sin embargo, Python 3.7 y Python 3.6 se basan en la AMI de Amazon Linux.

(Requisitos previos) Instale pip3 y la versión más reciente de la AWS CLI

1.    Si aún no lo ha hecho, instale pip3 para el paquete de Python 3 desde el sitio web de pip. 

o bien

Si tiene una versión anterior de pip, actualícela desde el sitio web de pip.

2.    Instale o actualice la AWS CLI mediante pip3.

Nota: La versión más reciente de la AWS CLI incluye el modelo de API Lambda Layers.

Use Docker para crear o actualizar una capa de Lambda que utilice la versión más reciente de Boto3

(Requisitos previos) Instalar Docker

Asegúrese de haber instalado Docker en su sistema y de que se esté ejecutando. Para descargar la versión más reciente de Docker, consulte Installing Docker (Instalación de Docker).

Creación y aplicación de la capa

1.    Navegue hasta el directorio en el que desee crear el archivo de la capa.

2.    Ejecute el siguiente comando en la CLI del sistema:

docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/python:3.9.2023.03.21.20" /bin/sh -c "mkdir -p /tmp/python && pip3 install boto3 -t /tmp/python && cd /tmp && yum install -y zip && zip -r /var/task/boto3-mylayer.zip ."

Nota: Sustituya public.ecr.aws/lambda/python:3.9.2023.03.21.20 por la imagen base de su versión de Python. Puede sustituir boto3-mylayer por un nombre personalizado para su paquete.

3.    Espere a que se complete el comando. Cuando se complete correctamente, verá un archivo con el nombre del paquete en el directorio actual, como boto3-mylayer.zip.

4.    Para crear o actualizar la capa de Lambda, ejecute el siguiente comando:

aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb://boto3-mylayer.zip --compatible-runtimes python3.9 --region REGION_NAME

Nota: Sustituya boto3-mylayer por el nombre de su paquete. Sustituya REGION_NAME por su región de AWS. Además, incluya los tiempos de ejecución compatibles que ha especificado anteriormente.

Creación de forma manual de una capa de Lambda que utiliza la versión más reciente de Boto3

Importante: Los siguientes comandos de la AWS CLI funcionan para los sistemas operativos Linux, Unix y macOS. En cada comando, asegúrese de sustituir boto3-mylayer por su nombre preferido para la carpeta lib y la capa de Lambda.

1.    Cree una carpeta lib:

LIB_DIR=boto3-mylayer/python
mkdir -p $LIB_DIR

2.    Instale la biblioteca en LIB_DIR:

pip3 install boto3 -t $LIB_DIR

3.    Comprima todas las dependencias en /tmp/boto3-mylayer.zip:

cd boto3-mylayer
zip -r /tmp/boto3-mylayer.zip .

4.    Publique la capa:

aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip

El comando devuelve el nombre de recurso de Amazon (ARN) de la nueva capa.

Ejemplo de ARN de capa de Lambda

arn:aws:lambda:region:$ACC_ID:layer:boto3-mylayer:1

Añadir la nueva capa a la configuración de su función de Lambda

Para añadir la nueva capa a la configuración de la función de Lambda, ejecute el siguiente comando:

Importante: Sustituya MY_FUNCTION por el nombre de su función. Sustituya LAYER_ARN por el ARN de su capa.

aws lambda update-function-configuration --function-name MY_FUNCTION --layers LAYER_ARN

Todos los servicios y argumentos de AWS están ahora disponibles para su función de Lambda.

Consejo: Para confirmar la versión de Boto3 y Botocore, use print(boto3.__version__) y print(botocore.__version__) en el código de su función

Información relacionada

Creación de funciones de Lambda con Python

Tiempos de ejecución de Lambda

Implementar funciones Python Lambda con archivos .zip

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año