Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Uso de capas para funciones de Lambda en Ruby

Modo de enfoque
Uso de capas para funciones de Lambda en Ruby - AWS Lambda

Una capa de Lambda es un archivo .zip que contiene código o datos adicionales. Las capas suelen contener dependencias de biblioteca, un tiempo de ejecución personalizado o archivos de configuración. La creación de una capa implica tres pasos generales:

  1. Empaquete el contenido de su capa. Esto significa crear un archivo de archivo. zip que contenga las dependencias que desea usar en sus funciones.

  2. Cree la capa en Lambda.

  3. Agregue la capa a sus funciones.

Este tema contiene los pasos y las instrucciones sobre cómo empaquetar y crear correctamente una capa de Lambda en Ruby con dependencias de bibliotecas externas.

Requisitos previos

Para completar los pasos de esta sección, debe disponer de lo siguiente:

A lo largo de este tema, haremos referencia a la aplicación de muestra layer-ruby en el repositorio de GitHub awsdocs. Esta aplicación contiene scripts que descargan las dependencias y generan las capas. La aplicación también contiene las funciones correspondientes que utilizan las dependencias de las capas. Tras crear una capa, puede implementar e invocar la función correspondiente para comprobar que todo funciona correctamente. Como utiliza el tiempo de ejecución de Ruby 3.3 para las funciones, las capas también deben ser compatibles con Ruby 3.3.

En la aplicación de muestra layer-ruby, empaqueta la biblioteca tzinfo en una capa de Lambda. El directorio layer/ contiene los scripts para generar la capa. El directorio function/ contiene una función de ejemplo que ayuda a comprobar el funcionamiento de la capa. La mayor parte de este tutorial explica cómo crear y empaquetar esta capa.

Compatibilidad de la capa de Ruby con el tiempo de ejecución de Lambda

Al empaquetar el código en una capa de Ruby, se especifica el tiempo de ejecución de Lambda con el que es compatible el código. Para evaluar la compatibilidad del código con un tiempo de ejecución, tenga en cuenta las versiones de Ruby, los sistemas operativos y las arquitecturas de conjunto de instrucciones para las que está diseñado el código.

Los tiempos de ejecución de Ruby de Lambda especifican su versión y sistema operativo de Ruby. En este documento, utiliza el tiempo de ejecución de Ruby 3.3, que se basa en AL2023. Para obtener más información acerca de las versiones de tiempo de ejecución, consulte Tiempos de ejecución admitidos. Cuando crea una función de Lambda, especifica la arquitectura del conjunto de instrucciones. En este documento, utiliza la arquitectura x86_64. Para obtener más información acerca de las arquitecturas en Lambda, consulte Configuración y selección de la arquitectura del conjunto de instrucciones para una función de Lambda.

Cuando se utiliza el código incluido en un paquete, cada responsable del paquete define de forma independiente su compatibilidad. La mayoría de las gemas están escritas completamente en Ruby y son compatibles con cualquier tiempo de ejecución que utilice una versión compatible con el lenguaje de Ruby.

A veces, las gemas utilizan una característica de Ruby conocida como extensiones para compilar código o incluir código precompilado como parte de su proceso de instalación. Si depende de una gema con una extensión nativa, debes evaluar la compatibilidad entre el sistema operativo y la arquitectura del conjunto de instrucciones. Para evaluar la compatibilidad entre las gemas y el tiempo de ejecución de Ruby, debe inspeccionar las gemas y su documentación. Para identificar si la gema usa extensiones, compruebe si se define extensions en la especificación de la gema. Ruby identifica la plataforma en la que se ejecuta mediante la constante global RUBY_PLATFORM. El tiempo de ejecución de Ruby de Lambda define la plataforma como aarch64-linux cuando se ejecuta en la arquitectura arm64 o x86_64-linux cuando se ejecuta en la arquitectura x86_64. No existe una forma garantizada de comprobar si una gema es compatible con estas plataformas, pero algunas gemas declaran sus plataformas compatibles mediante el atributo de especificación de gema platform.

Rutas de capa para tiempos de ejecución de Ruby

Cuando agrega una capa a una función, Lambda carga el contenido de la capa en el directorio /opt de ese entorno de ejecución. Para cada tiempo de ejecución de Lambda, la variable PATH ya incluye rutas de carpeta específicas en el directorio /opt. Para garantizar que Lambda recoja el contenido de la capa, el archivo .zip de la capa, debe tener sus dependencias en las siguientes rutas de carpeta:

  • ruby/gems/x, donde x es la versión de Ruby del tiempo de ejecución, como 3.3.0.

  • ruby/lib/

En este documento, utilice la ruta ruby/gems/x. Lambda espera que el contenido de este directorio coincida con la estructura de un directorio de instalación de Bundler. Guarde las dependencias de las gemas en el subdirectorio /gems de la ruta de la capa, junto con otros subdirectorios de metadatos. Por ejemplo, el archivo .zip de capa resultante que cree en este tutorial tiene la siguiente estructura de directorios:

layer_content.zip └ ruby └ gems └ 3.3.0 └ gems └ tzinfo-2.0.6 └ <other_dependencies> (i.e. dependencies of the tzinfo package) └ ... └ <metadata generated by bundle>

La biblioteca tzinfo está ubicada correctamente en el directorio ruby/gems/3.3.0/. Esto garantiza que Lambda pueda localizar la biblioteca durante las invocaciones de funciones.

Empaquetado del contenido de la capa

En este ejemplo, empaqueta la biblioteca tzinfo de Ruby en un archivo .zip de capa. Siga los pasos que se indican a continuación para instalar y empaquetar el contenido de la capa.

Instalación y empaquetado del contenido de la capa
  1. Clone el repositorio de aws-lambda-developer-guide de GitHub, que contiene el código de muestra que necesita en el directorio sample-apps/layer-ruby.

    git clone https://github.com/awsdocs/aws-lambda-developer-guide.git
  2. Navegue hasta el directorio layer de la aplicación de ejemplo layer-ruby. Este directorio contiene los scripts que usa para crear y empaquetar la capa correctamente.

    cd aws-lambda-developer-guide/sample-apps/layer-ruby/layer
  3. Examine Gemfile. Este archivo define las dependencias que desea incluir en la capa, es decir, la biblioteca tzinfo. Puede actualizar este archivo para incluir cualquier dependencia que desee incluir en su propia capa.

    ejemplo Archivo Gemfile
    source "https://rubygems.org" gem "tzinfo"
  4. Asegúrese de tener los permisos para ejecutar ambos scripts.

    chmod 744 1-install.sh && chmod 744 2-package.sh
  5. Ejecute el script 1-install.sh mediante el siguiente comando:

    ./1-install.sh

    Este script configura Bundler para instalar las dependencias en el directorio del proyecto. A continuación, instala todas las dependencias necesarias en el directorio vendor/bundle/.

    ejemplo 1-install.sh
    bundle config set --local path 'vendor/bundle' bundle install
  6. Ejecute el script 2-package.sh mediante el siguiente comando:

    ./2-package.sh

    Este script copia el contenido del directorio vendor/bundle a un nuevo directorio denominado ruby. Luego, comprime el contenido del directorio ruby en un archivo llamado layer_content.zip. Este es el archivo .zip para su capa. Puede descomprimir el archivo y comprobar que contiene la estructura de archivos correcta, como se muestra en la sección Rutas de capa para tiempos de ejecución de Ruby.

    ejemplo 2-package.sh
    mkdir -p ruby/gems/3.3.0 cp -r vendor/bundle/ruby/3.3.0/* ruby/gems/3.3.0/ zip -r layer_content.zip ruby

Creación de la capa

En esta sección, seleccione el archivo layer_content.zip que generó en la sección anterior y cárguelo como una capa de Lambda. Puede cargar una capa mediante la AWS Management Console o la API de Lambda en la AWS Command Line Interface (AWS CLI). Al cargar el archivo .zip de la capa, en el siguiente comando de AWS CLI PublishLayerVersion, especifique ruby3.3 como tiempo de ejecución compatible y arm64 como arquitectura compatible.

aws lambda publish-layer-version --layer-name ruby-requests-layer \ --zip-file fileb://layer_content.zip \ --compatible-runtimes ruby3.3 \ --compatible-architectures "arm64"

En la respuesta, anote el LayerVersionArn, que tiene este aspecto: arn:aws:lambda:us-east-1:123456789012:layer:ruby-requests-layer:1. Necesitará este nombre de recurso de Amazon (ARN) en el siguiente paso de este tutorial cuando agregue la capa a la función.

Adición de la capa a la función

En esta sección, implementa una función de Lambda de ejemplo que utiliza la biblioteca tzinfo en su código de función y, a continuación, adjunta la capa. Para implementar la función, necesita un Definición de permisos de funciones de Lambda con un rol de ejecución. Si no dispone de un rol de ejecución existente, siga los pasos de la sección desplegable.

Para crear un rol de ejecución
  1. Abra la página Roles en la consola de IAM.

  2. Elija Crear rol.

  3. Cree un rol con las propiedades siguientes.

    • Trusted entity (Entidad de confianza).Lambda:.

    • Permisos: AWSLambdaBasicExecutionRole.

    • Nombre de rol: lambda-role.

    La política AWSLambdaBasicExecutionRole tiene permisos que la función necesita para escribir registros a Registros de CloudWatch.

Para crear un rol de ejecución
  1. Abra la página Roles en la consola de IAM.

  2. Elija Crear rol.

  3. Cree un rol con las propiedades siguientes.

    • Trusted entity (Entidad de confianza).Lambda:.

    • Permisos: AWSLambdaBasicExecutionRole.

    • Nombre de rol: lambda-role.

    La política AWSLambdaBasicExecutionRole tiene permisos que la función necesita para escribir registros a Registros de CloudWatch.

El código de la función de Lambda importa la biblioteca tzinfo y, a continuación, devuelve el código de estado y una cadena de fecha localizada.

require 'json' require 'tzinfo' def lambda_handler(event:, context:) tz = TZInfo::Timezone.get('America/New_York') { statusCode: 200, body: tz.to_local(Time.utc(2018, 2, 1, 12, 30, 0)) } end
Implementación de la función de Lambda
  1. Vaya al directorio function/. Si se encuentra actualmente en el directorio layer/, ejecute el siguiente comando:

    cd ../function
  2. Cree un archivo .zip del paquete de implementación utilizando el siguiente comando:

    zip my_deployment_package.zip lambda_function.rb
  3. Implemente la función. En el siguiente comando de AWS CLI, sustituya el parámetro --role por el ARN del rol de ejecución:

    aws lambda create-function --function-name ruby_function_with_layer \ --runtime ruby3.3 \ --architectures "arm64" \ --handler lambda_function.lambda_handler \ --role arn:aws:iam::123456789012:role/lambda-role \ --zip-file fileb://my_deployment_package.zip
  4. A continuación, adjunte la capa a la función. En el siguiente comando de AWS CLI, sustituya el parámetro --layers por el ARN de la versión de capa que indicó anteriormente:

    aws lambda update-function-configuration --function-name ruby_function_with_layer \ --cli-binary-format raw-in-base64-out \ --layers "arn:aws:lambda:us-east-1:123456789012:layer:ruby-requests-layer:1"
  5. Finalmente, intente invocar su función usando el siguiente comando de AWS CLI:

    aws lambda invoke --function-name ruby_function_with_layer \ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json

    Debería ver un resultado con un aspecto similar al siguiente:

    { "StatusCode": 200, "ExecutedVersion": "$LATEST" }

    El archivo de salida response.json contiene detalles sobre la respuesta.

A menos que desee conservar los recursos que creó para este tutorial, puede eliminarlos ahora. Si elimina los recursos de AWS que ya no utiliza, evitará gastos innecesarios en su Cuenta de AWS.

Eliminación de la capa de Lambda
  1. Abra la página de Capas de la consola de Lambda.

  2. Seleccione la capa que ha creado.

  3. Elija Eliminar; luego, vuelva a elegir Eliminar.

Cómo eliminar la función de Lambda
  1. Abra la página de Funciones en la consola de Lambda.

  2. Seleccione la función que ha creado.

  3. Elija Acciones, Eliminar.

  4. Escriba confirm en el campo de entrada de texto y seleccione Delete (Eliminar).

A menos que desee conservar los recursos que creó para este tutorial, puede eliminarlos ahora. Si elimina los recursos de AWS que ya no utiliza, evitará gastos innecesarios en su Cuenta de AWS.

Eliminación de la capa de Lambda
  1. Abra la página de Capas de la consola de Lambda.

  2. Seleccione la capa que ha creado.

  3. Elija Eliminar; luego, vuelva a elegir Eliminar.

Cómo eliminar la función de Lambda
  1. Abra la página de Funciones en la consola de Lambda.

  2. Seleccione la función que ha creado.

  3. Elija Acciones, Eliminar.

  4. Escriba confirm en el campo de entrada de texto y seleccione Delete (Eliminar).

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.