¿Cómo puedo utilizar los paquetes binarios nativos de AMI de Amazon Linux 2 con Lambda?

4 minutos de lectura
0

Quiero crear una función de AWS Lambda que contenga dependencias de bibliotecas compartidas binarias y que se ejecute en una imagen de máquina de Amazon (AMI) de Amazon Linux 2. ¿Hay alguna forma de utilizar los paquetes de software de AMI de Amazon Linux 2 sin volver a compilar el paquete?

Descripción breve

La AMI de Amazon Linux 2 y la AMI de Amazon Linux que se utilizan para las versiones ejecutables de Lambda no admiten los mismos paquetes binarios nativos.

Como solución alternativa, primero puede crear una imagen de contenedor de Lambda mediante la interfaz de la línea de comandos de Docker (CLI). A continuación, utilice la imagen del contenedor para ejecutar la función de Lambda.

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.

Las siguientes instrucciones describen cómo instalar una biblioteca curl en una imagen de Docker (imagen de contenedor de Lambda). Luego, cómo usar la imagen para ejecutar una función de Lambda de Python versión 3.9. Para otros lenguajes de codificación, adapte los pasos en consecuencia.

  1. Si aún no lo ha hecho, instale la Docker CLI.

  2. Cree un directorio de proyectos denominado lambda-project.

  3. Utilice un editor de texto para crear un Dockerfile en el directorio lambda-project que incluya el siguiente código de ejemplo:

FROM public.ecr.aws/lambda/python:3.9

# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}

# Install the binary packages using yum install
RUN yum install -y curl

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "lambda_function.lambda_handler" ]
  1. Utilice un editor de texto para crear un archivo lambda_function.py en el directorio lambda-project que incluya el siguiente código de ejemplo:
import subprocess

def lambda_handler(event, context):
    my_output = subprocess.check_output(["curl","-X", "GET", "https://www.httpbin.org/get"], stderr=subprocess.STDOUT, shell=False)
    print(my_output.decode('utf8'))

Importante: Asegúrese de ejecutar todos los siguientes comandos (pasos 5 a 10) en el directorio lambda-project.

  1. Cree la imagen del contenedor de Lambda ejecutando el siguiente comando docker build de la Docker CLI:
docker build -t hello-world
  1. Pruebe la configuración de la imagen del contenedor iniciando la imagen del contenedor localmente. Para iniciar la imagen del contenedor localmente, ejecute el siguiente comando docker run de la Docker CLI:
docker run -p 9000:8080 hello-world
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
  1. Autentique Docker en su registro de Amazon Elastic Container Registry (Amazon ECR) mediante la ejecución del siguiente comando get-login-password de la AWS CLI:

Importante: Sustituya us-east-1 por su región de AWS. Sustituya 123456789012 por el ID de su cuenta de AWS.

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com

Para obtener más información, consulte Usar un token de autorización en la Guía del usuario de Amazon ECR.

  1. Cree un repositorio de Amazon ECR mediante la ejecución del siguiente comando create-repository de la AWS CLI:

**Importante:**Sustituya hello-world por el nombre de su repositorio de Amazon ECR.

aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE

Para obtener más información, consulte el Paso 3: Cree un repositorio en la Guía del usuario de Amazon ECR.

  1. Etiquete la imagen de su contenedor para enviarla a su repositorio ejecutando el siguiente comando docker tag de la Docker CLI:

**Importante:**Sustituya 123456789012 por el ID de su cuenta de AWS. Sustituya us-east-1 por su región de AWS.

docker tag  hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
  1. Envíe la imagen de su contenedor a su repositorio ejecutando el siguiente comando docker push de la Docker CLI:

**Importante:**Sustituya 123456789012 por el ID de su cuenta de AWS. Sustituya us-east-1 por su región de AWS.

docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

La imagen de su contenedor se encuentra ahora en su repositorio de Amazon ECR. Para obtener más información, consulte el Paso 4: Envíe una imagen a Amazon ECR en la Guía del usuario de Amazon ECR.

  1. Cree y pruebe la función de Lambda con la imagen del contenedor que creó. Para obtener instrucciones, consulte Crear funciones de Lambda definidas como imágenes de contenedor en la Guía para desarrolladores de Lambda.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años