Implementar funciones Go Lambda con archivos .zip - AWS Lambda

Implementar funciones Go Lambda 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 implementación para el tiempo de ejecución Go y, a continuación, utilizar el archivo.zip para implementar el código de función AWS Lambda con AWS Command Line Interface (AWS CLI).

Requisitos previos

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:

Herramientas y bibliotecas

Lambda proporciona las siguientes herramientas y bibliotecas para el tiempo de ejecución Go:

Herramientas y bibliotecas para Go

Para obtener más información, consulte aws-lambda-go en GitHub.

Aplicaciones de muestra

Lambda proporciona las siguientes aplicaciones de ejemplo para el tiempo de ejecución Go:

Aplicaciones de de ejemplo de Lambda en Go

  • blank-go: una función Go que muestra el uso de las bibliotecas de Go de Lambda, el registro, las variables de entorno y el AWS SDK.

Creación de un archivo.zip en macOS y Linux

Los siguientes pasos muestran cómo descargar la biblioteca lambda de GitHub con go get, y compilar su ejecutable con go build.

  1. Descargue la biblioteca lambda de GitHub.

    go get github.com/aws/aws-lambda-go/lambda
  2. Compile su ejecutable.

    GOOS=linux go build main.go

    Establecer GOOS en linux garantiza que el ejecutable compilado es compatible con el tiempo de ejecución de Go, incluso si lo compila en un entorno que no sea Linux.

  3. (Opcional) Si su paquete de main consta de varios archivos, utilice el siguiente comando go build para compilar el paquete:

    GOOS=linux go build main
  4. (Opcional) Es posible que necesite compilar paquetes con CGO_ENABLED=0 configurado en Linux:

    GOOS=linux CGO_ENABLED=0 go build main.go

    Este comando crea un paquete binario estable para las versiones estándar de la biblioteca C (libc), que puede ser diferente en Lambda y en otros dispositivos.

  5. 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.

  6. Cree un paquete de implementación empaquetando el ejecutable en un archivo.zip.

    zip function.zip main
  7. Para cargar el paquete a una función de Lambda, utilice el comando update-function-code.

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

Crear un archivo.zip en Windows

Los siguientes pasos muestran cómo descargar la herramienta build-lambda-zip para Windows desde GitHub con go get, y compilar el ejecutable con go build.

nota

Si aún no lo ha hecho, debe instalar git y luego agregar el git ejecutable a su variable de %PATH% entorno de Windows.

  1. Descargue la herramienta build-lambda-zip de GitHub:

    go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
  2. Utilice la herramienta de su 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 entorno en tiempo de ejecución de Go y haga una de las siguientes opciones:

    cmd.exe

    En cmd.exe, ejecute lo siguiente:

    set GOOS=linux go build -o main main.go %USERPROFILE%\Go\bin\build-lambda-zip.exe -output main.zip main
    PowerShell

    En PowerShell, ejecute lo siguiente:

    $env:GOOS = "linux" $env:CGO_ENABLED = "0" $env:GOARCH = "amd64" go build -o main main.go ~\Go\Bin\build-lambda-zip.exe -output main.zip main
  3. Para cargar el paquete a una función de Lambda, utilice el comando update-function-code.

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

Compile Go con el tiempo de ejecución provided.al2

Go se implementa de manera distinta a otros tiempos de ejecución nativos. Lambda trata Go como un tiempo de ejecución personalizado, de modo que se puede crear una función de Go en el tiempo de ejecución provided.al2. Puede utilizar el comando de compilación AWS SAM para compilar el paquete del archivo .zip.

Uso de AWS SAM para compilar Go para la función AL2

  1. Actualice la plantilla de AWS SAM para utilizar el tiempo de ejecución provided.al2. Además, establezca el método BuildMethod como makefile.

    Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: my.bootstrap.file Runtime: provided.al2 Architectures: [arm64] Metadata: BuildMethod: makefile

    Elimine la propiedad Architectures con objeto de crear el paquete para la arquitectura del conjunto de instrucciones x86_64.

  2. Agregue el archivo makefile a la carpeta del proyecto con el siguiente contenido:

    GOOS=linux go build -o bootstrap cp ./bootstrap $(ARTIFACTS_DIR)/.

Para ver una aplicación de ejemplo, descargue Go en AL2. El archivo readme contiene las instrucciones para compilar y ejecutar la aplicación. También puede ver la publicación del blog Migración de funciones de AWS Lambda a Amazon Linux 2.