Implementar funciones Node.js de Lambda con archivos de archivo.zip - AWS Lambda

Implementar funciones Node.js de Lambda con archivos de archivo.zip

El código de la función AWS Lambda se compone de scripts o programas compilados y sus dependencias. Utiliza un paquete de implementación para implementar su código de función en Lambda. Lambda admite dos tipos de paquetes de implementación: imágenes de contenedor y archivos .zip.

Para crear un paquete de implementación de un archivo de archivos .zip, puede utilizar una utilidad de archivo de archivos. zip integrada o cualquier otra utilidad de archivo.zip (como 7zip) para la herramienta de línea de comandos. Tenga en cuenta los siguientes requisitos para utilizar un archivo.zip como paquete de implementación:

  • El archivo.zip contiene el código de su función y cualquier dependencia utilizada para ejecutar el código de su función (si corresponde) en Lambda. Si su función depende solo de bibliotecas estándar o bibliotecas SDK AWS, no necesita incluir estas bibliotecas en su archivo.zip. Estas bibliotecas se incluyen con los entornos de tiempo de ejecución de Lambda admitidos.

  • Si el archivo .zip tiene más de 50 MB, le recomendamos cargarlo a su función desde un bucket Amazon Simple Storage Service (AmazonS3).

  • Si el paquete de implementación contiene bibliotecas nativas, puede compilar el paquete de implementación con AWS Serverless Application Model (AWS SAM). Puede utilizar el comando AWS SAM de la CLI de sam build con --use-container para crear el paquete de implementación. Esta opción crea un paquete de implementación dentro de una imagen de Docker que es compatible con el entorno de ejecución de Lambda.

    Para obtener más información, consulte creación de sam en la Guía para desarrolladores de AWS Serverless Application Model.

  • Debe crear el paquete de implementación para que sea compatible con esta arquitectura del conjunto de instrucciones de la función.

  • Lambda usa permisos de archivo de POSIX, por lo que puede necesitar establecer permisos para la carpeta del paquete de implementación antes de crear el archivo .zip.

Prerequisites

La AWS CLI es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante el uso de comandos en el shell de la línea de comandos. Para completar los pasos en esta sección, debe disponer de lo siguiente:

Actualización de una función sin dependencias

Para actualizar una función mediante la API de Lambda, utilice la operación UpdateFunctionCode. Cree un archivo que contenga el código de la función y cárguelo con la AWS Command Line Interface (AWS CLI).

Para actualizar una función de Node.js sin dependencias

  1. Cree un archivado mediante archivos .zip.

    zip function.zip index.js
  2. Utilice el comando update-function-code para cargar el paquete.

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    Debería ver los siguientes datos de salida:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

Actualización de una función con dependencias adicionales

Si su función depende de bibliotecas distintas de AWS SDK for JavaScript, utilice npm para incluirlas en el paquete de implementación. Asegúrese de que la versión Node.js del entorno local coincide con la versión Node.js de la función. Si alguna de las bibliotecas utiliza código nativo, utilice un entorno Amazon Linux para crear el paquete de implementación.

Puede agregar SDK para JavaScript al paquete de implementación si necesita una versión más reciente que la incluida en el tiempo de ejecución o para asegurarse de que la versión no cambie en el futuro.

Si el paquete de implementación contiene bibliotecas nativas, puede compilar el paquete de implementación con AWS Serverless Application Model (AWS SAM). Puede utilizar el comando AWS SAM de la CLI de sam build con --use-container para crear el paquete de implementación. Esta opción crea un paquete de implementación dentro de una imagen de Docker que es compatible con el entorno de ejecución de Lambda.

Para obtener más información, consulte Creación de sam en la Guía para desarrolladores de AWS Serverless Application Model.

Como alternativa, puede crear el paquete de implementación utilizando una instancia de Amazon EC2 que proporciona un entorno de Amazon Linux. Para obtener instrucciones, consulte Uso de paquetes y módulos nodejs nativos en AWS en el blog de informática de AWS.

Para actualizar una función de Node.js con dependencias

  1. Abra un terminal o shell de línea de comandos. Asegúrese de que la versión Node.js del entorno local coincide con la versión Node.js de la función.

  2. Cree una carpeta para el paquete de implementación. En los siguientes pasos se supone que la carpeta se denomina my-function.

  3. Instale bibliotecas en el directorio node_modules con el comando npm install.

    npm install aws-xray-sdk

    De este modo se crea una estructura de carpetas similar a la siguiente:

    ~/my-function ├── index.js └── node_modules ├── async ├── async-listener ├── atomic-batcher ├── aws-sdk ├── aws-xray-sdk ├── aws-xray-sdk-core
  4. Cree un archivo .zip con el contenido de la carpeta del proyecto. Utilice la opción r (recursiva) para asegurarse de que el zip contiene las subcarpetas.

    zip -r function.zip .
  5. Cargue el paquete mediante el comando update-function-code.

    aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip

    Debería ver los siguientes datos de salida:

    { "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", "Handler": "index.handler", "CodeSha256": "Qf0hMc1I2di6YFMi9aXm3JtGTmcDbjniEuiYonYptAk=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "983ed1e3-ca8e-434b-8dc1-7d72ebadd83d", ... }

Además del código y las bibliotecas, su paquete de implementación también puede incluir archivos ejecutables y otros recursos. Para obtener más información, consulte Ejecución de ejecutables arbitrarios en AWS Lambda en el blog de informática de AWS.