Implementar funciones de Lambda en Go con archivos .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.
En esta página se describe cómo crear un archivo .zip como paquete de despliegue para el tiempo de ejecución de Go y, a continuación, utilizar el archivo .zip para implementar el código de función con AWS Lambda mediante la AWS Management Console, la AWS Command Line Interface (AWS CLI) y AWS Serverless Application Model (AWS SAM).
Lambda usa permisos de archivo de POSIX, por lo que puede necesitar establecer permisos para la carpeta del paquete de despliegue
Secciones
Creación de un archivo.zip en macOS y Linux
En los siguientes pasos, se muestra cómo compilar el archivo ejecutable mediante el comando go build
y crear un paquete de implementación de archivos .zip para Lambda. Antes de compilar el código, asegúrese de haber instalado el paquete lambda
go get github.com/aws/aws-lambda-go/lambda
Si su función usa AWS SDK for Go, descargue el conjunto estándar de módulos del SDK, junto con los clientes de API de servicio de AWS que requiera su aplicación. Para obtener información sobre cómo instalar el SDK para Go, consulte Getting Started with the AWS SDK for Go V2
Uso de la familia de tiempo de ejecución proporcionada
Go se implementa de manera distinta a otros tiempos de ejecución administrados. Como Go se compila de forma nativa en un archivo binario ejecutable, no requiere un tiempo de ejecución de lenguaje dedicado. Utilice un tiempo de ejecución exclusivo para el sistema operativo (la familia de tiempos de ejecución provided
) para implementar las funciones de Go en Lambda.
Para crear un paquete de paquete de implementación .zip (macOS o Linux)
-
En el directorio del proyecto que contiene el archivo
main.go
de la aplicación, compile el ejecutable. Tenga en cuenta lo siguiente:-
El ejecutable debe denominarse
bootstrap
. Para obtener más información, consulte Convenciones de nomenclatura de controladores. -
Establezca su arquitectura del conjunto de instrucciones de destino. El tiempo de ejecución de OS solo admite arm64 y x86_64.
-
Puede utilizar la etiqueta opcional
lambda.norpc
para excluir el componente de llamada a procedimiento remoto (RPC) de la biblioteca lambda. El componente de RPC solo es necesario si utiliza el tiempo de ejecución obsoleto Go 1.x. La exclusión del RPC reduce el tamaño del paquete de implementación.
Para la arquitectura arm64:
GOOS=linux GOARCH=
arm64
go build -tags lambda.norpc -o bootstrap main.goPara la arquitectura x86_64:
GOOS=linux GOARCH=
amd64
go build -tags lambda.norpc -o bootstrap main.go -
-
(Opcional) Es posible que necesite compilar paquetes con
CGO_ENABLED=0
establecido en Linux:GOOS=linux GOARCH=
arm64
CGO_ENABLED=0 go build -o bootstrap -tags lambda.norpc main.goEste comando crea un paquete binario estable para las versiones estándar de la biblioteca de C (
libc
), que puede ser diferente en Lambda y en otros dispositivos. -
Empaquete el ejecutable en un archivo.zip para crear un paquete de implementación.
zip myFunction.zip bootstrap
nota
El archivo
bootstrap
debe estar en la raíz del archivo.zip. -
Cree la función. Tenga en cuenta lo siguiente:
-
El binario debe tener un nombre
bootstrap
, pero el nombre del controlador puede ser cualquier cosa. Para obtener más información, consulte Convenciones de nomenclatura de controladores. -
La opción
--architectures
es obligatoria si utiliza arm64. El valor predeterminado es x86_64. -
Para
--role
, especifique el Nombre de recurso de Amazon (ARN) del rol de ejecución.
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler
bootstrap
\ --architecturesarm64
\ --rolearn:aws:iam::111122223333:role/lambda-ex
\ --zip-file fileb://myFunction.zip -
Crear un archivo.zip en Windows
En los siguientes pasos, se muestra cómo descargar la herramienta build-lambda-zip
nota
Si aún no lo ha hecho, debe instalar gitgit
ejecutable a su variable de %PATH%
entorno de Windows.
Antes de compilar el código, asegúrese de haber instalado la biblioteca lambda
go get github.com/aws/aws-lambda-go/lambda
Si su función usa AWS SDK for Go, descargue el conjunto estándar de módulos del SDK, junto con los clientes de API de servicio de AWS que requiera su aplicación. Para obtener información sobre cómo instalar el SDK para Go, consulte Getting Started with the AWS SDK for Go V2
Uso de la familia de tiempo de ejecución proporcionada
Go se implementa de manera distinta a otros tiempos de ejecución administrados. Como Go se compila de forma nativa en un archivo binario ejecutable, no requiere un tiempo de ejecución de lenguaje dedicado. Utilice un tiempo de ejecución exclusivo para el sistema operativo (la familia de tiempos de ejecución provided
) para implementar las funciones de Go en Lambda.
Para crear un paquete de implementación .zip (Windows)
-
Descargue la herramienta build-lambda-zip de GitHub.
go install github.com/aws/aws-lambda-go/cmd/build-lambda-zip@latest
-
Utilice la herramienta desde
GOPATH
para crear un archivo .zip. Si tiene una instalación predeterminada de Go, la herramienta suele estar en%USERPROFILE%\Go\bin
. De lo contrario, vaya hasta la ubicación donde instaló el tiempo de ejecución de Go y haga una de las siguientes acciones: -
Cree la función. Tenga en cuenta lo siguiente:
-
El binario debe tener un nombre
bootstrap
, pero el nombre del controlador puede ser cualquier cosa. Para obtener más información, consulte Convenciones de nomenclatura de controladores. -
La opción
--architectures
es obligatoria si utiliza arm64. El valor predeterminado es x86_64. -
Para
--role
, especifique el Nombre de recurso de Amazon (ARN) del rol de ejecución.
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler
bootstrap
\ --architecturesarm64
\ --rolearn:aws:iam::111122223333:role/lambda-ex
\ --zip-file fileb://myFunction.zip -
Creación y actualización de funciones de Lambda en Go mediante archivos .zip
Una vez que haya creado su paquete de implementación .zip, puede utilizarlo para crear una nueva función de Lambda o actualizar una existente. Puede implementar el paquete .zip a través de la consola, la AWS Command Line Interface y la API de Lambda. También puede crear y actualizar funciones de Lambda mediante AWS Serverless Application Model (AWS SAM) y AWS CloudFormation.
El tamaño máximo de un paquete de despliegue .zip para Lambda es de 250 MB (descomprimido). Tenga en cuenta que este límite se aplica al tamaño combinado de todos los archivos que cargue, incluidas las capas de Lambda.
El tiempo de ejecución de Lambda necesita permiso para leer los archivos del paquete de implementación. En la notación octal de permisos de Linux, Lambda necesita 644 permisos para archivos no ejecutables (rw-r--r--) y 755 permisos (rwxr-xr-x) para directorios y archivos ejecutables.
En Linux y macOS, utilice el comando chmod
para cambiar los permisos de los archivos y directorios del paquete de implementación. Por ejemplo, para brindarle a un archivo ejecutable los permisos correctos, ejecute el siguiente comando.
chmod 755 <filepath>
Para cambiar los permisos de los archivos en Windows, consulte Set, View, Change, or Remove Permissions on an Object
Creación y actualización de funciones con archivos .zip mediante la consola
Para crear una nueva función, primero debe crearla en la consola y, a continuación, cargar el archivo .zip. Para actualizar una función existente, abra la página de la función correspondiente y, a continuación, siga el mismo procedimiento para agregar el archivo .zip actualizado.
Si el archivo .zip tiene un tamaño inferior a 50 MB, puede crear o actualizar una función al cargarlo directamente desde su equipo local. Para archivos .zip de más de 50 MB, primero debe cargar su paquete en un bucket de Amazon S3. Para obtener instrucciones sobre cómo cargar un archivo en un bucket de Amazon S3 con la AWS Management Console, consulte Introducción a Amazon S3. Para cargar archivos mediante la AWS CLI, consulte Mover objetos en la Guía del usuario de la AWS CLI.
nota
No se puede convertir una función de imagen de contenedor existente para utilizar un archivo .zip. Debe crear una nueva función.
Para crear una nueva función (consola)
-
Abra la página Funciones
de la consola de Lambda y elija Crear función. -
Elija Crear desde cero.
-
En Información básica, haga lo siguiente:
-
En Nombre de función, escriba el nombre de la función.
-
En Runtime (Tiempo de ejecución), elija
provided.al2023
.
-
-
(Opcional) En Permisos, expanda Cambiar función de ejecución predeterminada. Puede crear un nuevo Rol de ejecución o utilizar uno existente.
-
Elija Crear función. Lambda crea una función básica “Hola, mundo” mediante el tiempo de ejecución elegido.
Para cargar un archivo .zip desde su equipo local (consola)
-
En la página Funciones
de la consola de Lambda, elija la función para la que desea cargar el archivo .zip. -
Seleccione la pestaña Código.
-
En el panel Código fuente, elija Cargar desde.
-
Elija un archivo .zip.
-
Para cargar el archivo .zip, haga lo siguiente:
-
Seleccione Cargar y, a continuación, seleccione su archivo .zip en el selector de archivos.
-
Elija Abrir.
-
Seleccione Guardar.
-
Carga de un archivo .zip desde un bucket de Amazon S3 (consola)
-
En la página Funciones
de la consola de Lambda, elija la función para la que desea cargar un nuevo archivo .zip. -
Seleccione la pestaña Código.
-
En el panel Código fuente, elija Cargar desde.
-
Elija la ubicación de Amazon S3.
-
Pegue la URL del enlace de Amazon S3 de su archivo .zip y seleccione Guardar.
Creación y actualización de funciones con archivos .zip mediante la AWS CLI
Puede utilizar la AWS CLI para crear una nueva función o actualizar una existente con un archivo .zip. Utilice los comandos create-function y update-function-code para implementar su paquete .zip. Si el archivo .zip tiene un tamaño inferior a 50 MB, puede cargarlo desde una ubicación de archivo en su equipo de compilación local. Para archivos más grandes, debe cargar su paquete .zip desde un bucket de Amazon S3. Para obtener instrucciones sobre cómo cargar un archivo en un bucket de Amazon S3 con la AWS CLI, consulte Mover objetos en la Guía del usuario de la AWS CLI.
nota
Si carga su archivo .zip desde un bucket de Amazon S3 con la AWS CLI, el bucket debe estar ubicado en la misma Región de AWS que su función.
Para crear una nueva función mediante un archivo .zip con la AWS CLI, debe especificar lo siguiente:
-
El nombre de la función (
--function-name
). -
El tiempo de ejecución de la función (
--runtime
). -
El nombre de recurso de Amazon (ARN) del rol de ejecución de la función (
--role
). -
El nombre del método de controlador en el código de la función (
--handler
).
También debe especificar la ubicación del archivo .zip. Si el archivo .zip se encuentra en una carpeta de su equipo de compilación local, utilice la opción --zip-file
para especificar la ruta del archivo, como se muestra en el siguiente comando de ejemplo.
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --zip-file fileb://myFunction.zip
Para especificar la ubicación del archivo .zip en un bucket de Amazon S3, utilice la opción --code
, como se muestra en el siguiente comando de ejemplo. Solo necesita utilizar el parámetro S3ObjectVersion
para los objetos con versiones.
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion
Para actualizar una función existente mediante la CLI, especifique el nombre de la función mediante el parámetro --function-name
. También debe especificar la ubicación del archivo .zip que desea utilizar para actualizar el código de la función. Si el archivo .zip se encuentra en una carpeta de su equipo de compilación local, utilice la opción --zip-file
para especificar la ruta del archivo, como se muestra en el siguiente comando de ejemplo.
aws lambda update-function-code --function-name myFunction \ --zip-file fileb://myFunction.zip
Para especificar la ubicación del archivo .zip en un bucket de Amazon S3, utilice las opciones --s3-bucket
y --s3-key
tal como se muestra en el siguiente comando de ejemplo. Solo necesita utilizar el parámetro --s3-object-version
para los objetos con versiones.
aws lambda update-function-code --function-name myFunction \ --s3-bucket amzn-s3-demo-bucket --s3-key myFileName.zip --s3-object-version myObject Version
Creación y actualización de funciones con archivos .zip mediante la API de Lambda
Para crear y actualizar funciones con un archivo de archivos .zip, utilice las siguientes operaciones de la API:
Creación y actualización de funciones con archivos .zip mediante AWS SAM
AWS Serverless Application Model (AWS SAM) es un conjunto de herramientas que ayuda a agilizar el proceso de creación y ejecución de aplicaciones sin servidor en AWS. Defina los recursos de su aplicación en una plantilla YAML o JSON y utilice la interfaz de la línea de comandos de AWS SAM (AWS SAM CLI) para crear, empaquetar e implementar sus aplicaciones. Al crear una función de Lambda a partir de una plantilla de AWS SAM, AWS SAM crea automáticamente un paquete de despliegue .zip o una imagen de contenedor con el código de la función y las dependencias que especifique. Para obtener más información sobre el uso de AWS SAM para crear e implementar funciones de Lambda, consulte Introducción a AWS SAM en la Guía para desarrolladores de AWS Serverless Application Model.
También puede utilizar AWS SAM para crear una función de Lambda con un archivo de archivos .zip existente. Para crear una función de Lambda mediante AWS SAM, puede guardar el archivo .zip en un bucket de Amazon S3 o en una carpeta local de su equipo de compilación. Para obtener instrucciones sobre cómo cargar un archivo en un bucket de Amazon S3 con la AWS CLI, consulte Mover objetos en la Guía del usuario de la AWS CLI.
En la plantilla de AWS SAM, el recurso AWS::Serverless::Function
especifica la función de Lambda. En este recurso, establezca las siguientes propiedades para crear una función mediante un archivo de archivos .zip:
-
PackageType
: se establece comoZip
. -
CodeUri
: se establece como el URI de Amazon S3, la ruta a la carpeta local o el objeto FunctionCode del código de la función. -
Runtime
: se establece como el entorno de ejecución elegido
Con AWS SAM, si su archivo .zip tiene más de 50 MB, no es necesario cargarlo primero en un bucket de Amazon S3. AWS SAM puede cargar paquetes .zip hasta el tamaño máximo permitido de 250 MB (descomprimidos) desde una ubicación de su equipo de compilación local.
Para obtener más información sobre la implementación de funciones mediante un archivo .zip en AWS SAM, consulte AWS::Serverless::Function en la Guía para desarrolladores de AWS SAM.
Ejemplo: uso de AWS SAM para crear una función de Go con provided.al2023
-
Cree una plantilla de AWS SAM con las propiedades siguientes:
-
BuildMethod: especifica el compilador de la aplicación. Utilice
go1.x
. -
Tiempo de ejecución: use
provided.al2023
. -
CodeUri: ingrese la ruta de su código.
-
Arquitecturas: use
[arm64]
para la arquitectura arm64. Use[amd64]
o elimine la propiedadArchitectures
para la arquitectura del conjunto de instrucciones x86_64.
ejemplo template.yaml
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: HelloWorldFunction: Type: AWS::Serverless::Function Metadata: BuildMethod:
go1.x
Properties: CodeUri:hello-world/
# folder where your main program resides Handler: bootstrap Runtime:provided.al2023
Architectures:[arm64]
-
-
Utilice el comando sam build para compilar el ejecutable.
sam build
-
Utilice el comando sam deploy para implementar la función en Lambda.
sam deploy --guided
Creación y actualización de funciones con archivos .zip mediante AWS CloudFormation
Puede utilizar AWS CloudFormation para crear una función de Lambda con un archivo de archivos .zip. Para crear una función de Lambda a partir de un archivo .zip, primero debe cargar el archivo a un bucket de Amazon S3. Para obtener instrucciones sobre cómo cargar un archivo en un bucket de Amazon S3 con la AWS CLI, consulte Mover objetos en la Guía del usuario de la AWS CLI.
En la plantilla de AWS CloudFormation, el recurso AWS::Lambda::Function
especifica la función de Lambda. En este recurso, establezca las siguientes propiedades para crear una función mediante un archivo de archivos .zip:
-
PackageType
: se establece comoZip
. -
Code
: ingrese el nombre del bucket de Amazon S3 y el nombre del archivo .zip en los camposS3Bucket
yS3Key
. -
Runtime
: se establece como el tiempo de ejecución elegido.
El archivo .zip que genera AWS CloudFormation no puede superar los 4 MB. Para obtener más información sobre la implementación de funciones mediante un archivo .zip en AWS CloudFormation, consulte AWS::Lambda::Function en la Guía del usuario de AWS CloudFormation.