Implantar funções do Lambda em Go com arquivos .zip - AWS Lambda

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implantar funções do Lambda em Go com arquivos .zip

O código da função do AWS Lambda consiste em scripts ou programas compilados e as dependências deles. Você usa umpacote de implantaçãopara implantar seu código de função no Lambda. O Lambda é compatível com dois tipos de pacotes de implantação: imagens de contêiner e arquivos .zip.

Esta página descreve como criar um arquivo .zip como seu pacote de implantação do runtime do Go e, em seguida, usar o arquivo para implantar o código de sua função no AWS Lambda utilizando o AWS Management Console, o AWS Command Line Interface, a (AWS CLI) e o AWS Serverless Application Model (AWS SAM).

Observe que o Lambda usa permissões de arquivo POSIX, então pode ser necessário definir permissões para a pasta do pacote de implantação antes da criação do arquivo .zip.

Criando um arquivo .zip no macOS e no Linux

As etapas a seguir mostram como compilar o executável usando o comando go build e criar um pacote de implantação do arquivo .zip para o Lambda. Antes de compilar seu código, verifique se você instalou o pacote lambda do. GitHub Este módulo fornece uma implementação da interface de runtime, que gerencia a interação entre o Lambda e seu código da função. Para baixar essa biblioteca, execute o comando a seguir.

go get github.com/aws/aws-lambda-go/lambda

Se sua função usa o AWS SDK for Go, baixe o conjunto padrão de módulos do SDK e qualquer cliente de API de serviço da AWS exigido pela sua aplicação. Para saber como instalar o SDK para Go, consulte Conceitos básicos do AWS SDK for Go V2.

Usando a família de tempo de execução fornecida

O Go é implementado de forma diferente de outros runtimes gerenciados. Como o Go compila nativamente em um binário executável, ele não requer um tempo de execução de linguagem dedicado. Use um tempo de execução somente para sistema operacional (a família provided de tempo de execução) para implantar funções Go no Lambda.

Para criar um pacote de implantação de arquivo .zip (macOs/Linux)
  1. No diretório do projeto que contém o arquivo main.go da sua aplicação, compile seu executável. Observe o seguinte:

    • O executável deve ser nomeado bootstrap. Para ter mais informações, consulte Nomenclatura.

    • Defina sua arquitetura do conjunto de instruções de destino. Os tempos de execução somente do sistema operacional suportam arm64 e x86_64.

    • Você pode usar a tag lambda.norpc opcional para excluir o componente Remote Procedure Call (RPC) da biblioteca do Lambda. O componente RPC só é necessário se você estiver usando o tempo de execução Go 1.x obsoleto. A exclusão do RPC reduz o tamanho do pacote de implantação.

    Para a arquitetura arm64:

    GOOS=linux GOARCH=arm64 go build -tags lambda.norpc -o bootstrap main.go

    Para a arquitetura x86_64:

    GOOS=linux GOARCH=amd64 go build -tags lambda.norpc -o bootstrap main.go
  2. (Opcional) Talvez seja necessário compilar pacotes com o CGO_ENABLED=0 configurado no Linux:

    GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o bootstrap -tags lambda.norpc main.go

    Este comando cria um pacote binário estável para versões padrão da biblioteca C (libc), que podem ser diferentes no Lambda e em outros dispositivos.

  3. Crie um pacote de implantação empacotando o executável em um arquivo .zip.

    zip myFunction.zip bootstrap
    nota

    O arquivo bootstrap deve estar na raiz do arquivo .zip.

  4. Criar a função do Observe o seguinte:

    • O binário deve ser chamado de bootstrap, mas o nome do manipulador pode ser qualquer coisa. Para ter mais informações, consulte Nomenclatura.

    • A opção --architectures será necessária apenas se você estiver usando arm64. O valor padrão é x86_64.

    • Para --role, especifique o nome do recurso da Amazon (ARN) da função de execução.

    aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --architectures arm64 \ --role arn:aws:iam::111122223333:role/lambda-ex \ --zip-file fileb://myFunction.zip

Criando um arquivo .zip no Windows

As etapas a seguir mostram como baixar a build-lambda-zipferramenta para Windows GitHub, compilar seu executável e criar um pacote de implantação .zip.

nota

Se ainda não tiver feito isso, você precisará instalar o Git e, em seguida, adicionar o executável git à variável de ambiente %PATH% do Windows.

Antes de compilar seu código, certifique-se de ter instalado a biblioteca lambda do. GitHub Para baixar essa biblioteca, execute o comando a seguir.

go get github.com/aws/aws-lambda-go/lambda

Se sua função usa o AWS SDK for Go, baixe o conjunto padrão de módulos do SDK e qualquer cliente de API de serviço da AWS exigido pela sua aplicação. Para saber como instalar o SDK para Go, consulte Conceitos básicos do AWS SDK for Go V2.

Usando a família de tempo de execução fornecida

O Go é implementado de forma diferente de outros runtimes gerenciados. Como o Go compila nativamente em um binário executável, ele não requer um tempo de execução de linguagem dedicado. Use um tempo de execução somente para sistema operacional (a família provided de tempo de execução) para implantar funções Go no Lambda.

Para criar um pacote de implantação .zip (Windows)
  1. Baixe a build-lambda-zipferramenta em GitHub.

    go install github.com/aws/aws-lambda-go/cmd/build-lambda-zip@latest
  2. Use a ferramenta do seu GOPATH para criar um arquivo .zip. Se você tiver uma instalação padrão do Go, a ferramenta geralmente estará em %USERPROFILE%\Go\bin. Caso contrário, navegue até o local em que o runtime do Go foi instalado e faça o seguinte:

    cmd.exe

    Em cmd.exe, execute uma das seguintes ações, dependendo da sua arquitetura do conjunto de instruções de destino. Os tempos de execução somente do sistema operacional suportam arm64 e x86_64.

    Você pode usar a tag lambda.norpc opcional para excluir o componente Remote Procedure Call (RPC) da biblioteca do Lambda. O componente RPC só é necessário se você estiver usando o tempo de execução Go 1.x obsoleto. A exclusão do RPC reduz o tamanho do pacote de implantação.

    exemplo : para a arquitetura x86_64
    set GOOS=linux set GOARCH=amd64 set CGO_ENABLED=0 go build -tags lambda.norpc -o bootstrap main.go %USERPROFILE%\Go\bin\build-lambda-zip.exe -o myFunction.zip bootstrap
    exemplo : para a arquitetura arm64
    set GOOS=linux set GOARCH=arm64 set CGO_ENABLED=0 go build -tags lambda.norpc -o bootstrap main.go %USERPROFILE%\Go\bin\build-lambda-zip.exe -o myFunction.zip bootstrap
    PowerShell

    Em PowerShell, execute uma das opções a seguir, dependendo da arquitetura do conjunto de instruções de destino. Os tempos de execução somente do sistema operacional suportam arm64 e x86_64.

    Você pode usar a tag lambda.norpc opcional para excluir o componente Remote Procedure Call (RPC) da biblioteca do Lambda. O componente RPC só é necessário se você estiver usando o tempo de execução Go 1.x obsoleto. A exclusão do RPC reduz o tamanho do pacote de implantação.

    Para a arquitetura x86_64:

    $env:GOOS = "linux" $env:GOARCH = "amd64" $env:CGO_ENABLED = "0" go build -tags lambda.norpc -o bootstrap main.go ~\Go\Bin\build-lambda-zip.exe -o myFunction.zip bootstrap

    Para a arquitetura arm64:

    $env:GOOS = "linux" $env:GOARCH = "arm64" $env:CGO_ENABLED = "0" go build -tags lambda.norpc -o bootstrap main.go ~\Go\Bin\build-lambda-zip.exe -o myFunction.zip bootstrap
  3. Criar a função do Observe o seguinte:

    • O binário deve ser chamado de bootstrap, mas o nome do manipulador pode ser qualquer coisa. Para ter mais informações, consulte Nomenclatura.

    • A opção --architectures será necessária apenas se você estiver usando arm64. O valor padrão é x86_64.

    • Para --role, especifique o nome do recurso da Amazon (ARN) da função de execução.

    aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --architectures arm64 \ --role arn:aws:iam::111122223333:role/lambda-ex \ --zip-file fileb://myFunction.zip

Criar e atualizar funções do Lambda em Go usando arquivos .zip

Depois de criar seu pacote de implantação .zip, você poderá usá-lo para criar uma nova função do Lambda ou atualizar uma existente. É possível implantar o pacote .zip usando o console do Lambda, a AWS Command Line Interface e a API do Lambda. Você também pode criar e atualizar funções do Lambda usando o AWS Serverless Application Model (AWS SAM) e o AWS CloudFormation.

O tamanho máximo de um pacote de implantação .zip para o Lambda é 250 MB (descompactado). Esse limite se aplica ao tamanho combinado de todos os arquivos que você carrega, inclusive qualquer camada do Lambda.

O runtime do Lambda precisa de permissão para ler os arquivos no pacote de implantação. Na notação octal de permissões do Linux, o Lambda precisa de 644 permissões para arquivos não executáveis (rw-r--r--) e 755 permissões () para diretórios e arquivos executáveis. rwxr-xr-x

No Linux e no MacOS, use o comando chmod para alterar as permissões de arquivo em arquivos e diretórios do seu pacote de implantação. Por exemplo, para dar a um arquivo executável as permissões corretas, execute o comando a seguir.

chmod 755 <filepath>

Para alterar as permissões de arquivo no Windows, consulte Set, View, Change, or Remove Permissions on an Object na documentação do Microsoft Windows.

Criar e atualizar funções com arquivos .zip usando o console

Para criar uma nova função, você deve primeiro criar a função no console e depois carregar o arquivo .zip. Para atualizar uma função existente, abra a página da função e siga o mesmo procedimento para adicionar o arquivo .zip atualizado.

Se o arquivo .zip for menor que 50 MB, você poderá criar ou atualizar uma função carregando o arquivo diretamente da máquina local. Para arquivos .zip maiores que 50 MB, você deve primeiro carregar o pacote para um bucket do Amazon S3. Para obter instruções sobre como carregar um arquivo para um bucket do Amazon S3 usando o AWS Management Console, consulte Conceitos básicos do Amazon S3. Para carregar arquivos usando a AWS CLI, consulte Mover objetos no Guia do usuário da AWS CLI.

nota

Não é possível converter uma função de imagem de contêiner existente para usar um arquivo .zip. É necessário criar uma nova função.

Para criar uma função (console)
  1. Abra a página Funções do console do Lambda e escolha Criar função.

  2. Escolha Author from scratch (Criar do zero).

  3. Em Basic information (Informações básicas), faça o seguinte:

    1. Em Nome da função, insira o nome da função.

    2. Em Runtime (Tempo de execução), escolha provided.al2023.

  4. (Opcional) Em Permissões, expanda Alterar função de execução padrão. Crie uma função de execução ou use uma existente.

  5. Escolha a opção Criar função. O Lambda cria uma função básica “Hello world” usando o runtime escolhido.

Você pode carregar o arquivo .zip da máquina local (console)
  1. Na página Funções do console Lambda, escolha a função para a qual você deseja carregar o arquivo .zip.

  2. Selecione a guia Código.

  3. No painel do Código-fonte, escolha Carregar de.

  4. Escolha o arquivo .zip.

  5. Para carregar o arquivo .zip, faça o seguinte:

    1. Selecione Carregar e, em seguida, selecione o arquivo .zip no seletor de arquivos.

    2. Escolha Open (Abrir).

    3. Escolha Salvar.

Para carregar um arquivo .zip de um bucket do Amazon S3 (console)
  1. Na página Funções do console do Lambda, escolha a função para a qual você deseja carregar um novo arquivo .zip.

  2. Selecione a guia Código.

  3. No painel do Código-fonte, escolha Carregar de.

  4. Escolha Local do Amazon S3.

  5. Cole o URL do link do Amazon S3 do arquivo .zip e escolha Salvar.

Criar e atualizar funções com arquivos .zip usando a AWS CLI

Você pode usar a AWS CLI para criar uma função ou atualizar uma existente usando um arquivo .zip. Use a função de criação e os update-function-codecomandos para implantar seu pacote .zip. Se o arquivo .zip for menor que 50 MB, você poderá carregar o pacote .zip de um local do arquivo na máquina de compilação local. Para arquivos .zip maiores, você deve carregar o pacote .zip de um bucket do Amazon S3. Para obter instruções sobre como carregar um arquivo para um bucket do Amazon S3 usando a AWS CLI, consulte Mover objetos no Guia do usuário da AWS CLI.

nota

Se você carregar o arquivo .zip de um bucket do Amazon S3 usando a AWS CLI, o bucket deverá estar na mesma Região da AWS que sua função.

Para criar uma função usando um arquivo .zip com a AWS CLI, você deve especificar o seguinte:

  • O nome da função (--function-name)

  • O runtime da função (--runtime)

  • O nome do recurso da Amazon (ARN) da função de execução da função (--role)

  • O nome do método do manipulador no código da função (--handler)

Você também deve especificar a local do arquivo .zip. Se o arquivo .zip estiver localizado em uma pasta da máquina de compilação local, use a opção --zip-file para especificar o caminho do arquivo, conforme mostrado no comando do exemplo a seguir.

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 o local do arquivo .zip em um bucket do Amazon S3, use a opção --code conforme mostrado no comando do exemplo a seguir. Você só precisa usar o parâmetro S3ObjectVersion para objetos com versionamento.

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=myBucketName,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion

Para atualizar uma função existente usando a CLI, especifique o nome da função usando o parâmetro --function-name. Você também deve especificar o local do arquivo .zip que deseja usar para atualizar o código da função. Se o arquivo .zip estiver localizado em uma pasta da máquina de compilação local, use a opção --zip-file para especificar o caminho do arquivo, conforme mostrado no comando do exemplo a seguir.

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

Para especificar o local do arquivo .zip em um bucket do Amazon S3, use as opções --s3-bucket e --s3-key conforme mostrado no comando do exemplo a seguir. Você só precisa usar o parâmetro --s3-object-version para objetos com versionamento.

aws lambda update-function-code --function-name myFunction \ --s3-bucket myBucketName --s3-key myFileName.zip --s3-object-version myObject Version

Criar e atualizar funções com arquivos .zip usando a API do Lamba

Para criar e atualizar funções usando um arquivo .zip, use as seguintes operações de API:

Criar e atualizar funções com arquivos .zip usando o AWS SAM

O AWS Serverless Application Model (AWS SAM) é um kit de ferramentas que ajuda a simplificar o processo de criação e execução de aplicações com tecnologia sem servidor na AWS. Você define os recursos para a aplicação em um modelo YAML ou JSON e usa a interface da linha de comando do AWS SAM (CLI do AWS SAM) para criar, empacotar e implantar aplicações. Quando você cria uma função do Lambda com base em um modelo do AWS SAM, o AWS SAM cria automaticamente um pacote de implantação .zip ou uma imagem de contêiner com o código da função e quaisquer dependências que você especificar. Para saber mais sobre como usar o AWS SAM para criar e implantar funções do Lambda, consulte Conceitos básicos do AWS SAM no Guia do desenvolvedor do AWS Serverless Application Model.

Você também pode usar o AWS SAM para criar uma função do Lambda usando um arquivo .zip existente. Para criar uma função do Lambda usando o AWS SAM, salve o arquivo .zip em um bucket do Amazon S3 ou em uma pasta local na máquina de compilação. Para obter instruções sobre como carregar um arquivo para um bucket do Amazon S3 usando a AWS CLI, consulte Mover objetos no Guia do usuário da AWS CLI.

No modelo do AWS SAM, o recurso AWS::Serverless::Function especifica a função do Lambda. Nesse recurso, defina as seguintes propriedades para criar uma função usando um arquivo .zip:

  • PackageType: definir como Zip

  • CodeUri- defina o URI do Amazon S3 do código da função, o caminho para a pasta local ou o objeto FunctionCode

  • Runtime: definir como o runtime escolhido

Com o AWS SAM, se o arquivo .zip for maior que 50 MB, você não precisará carregá-lo primeiro em um bucket do Amazon S3. O AWS SAM poderá carregar pacotes .zip com o tamanho máximo permitido de 250 MB (descompactados) de um local da máquina de compilação local.

Para saber mais sobre como implantar funções usando o arquivo.zip emAWS SAM, consulte AWS::Serverless::Functiono Guia do AWS SAMdesenvolvedor.

Exemplo: usar o AWS SAM para criar uma função do Go com provided.al2023
  1. Crie um modelo do AWS SAM com as seguintes propriedades:

    • BuildMethod: especifica o compilador para seu aplicativo. Use go1.x.

    • Runtime: use provided.al2023.

    • CodeUri: insira o caminho para seu código.

    • Arquiteturas: use [arm64] para a arquitetura arm64. Para a arquitetura do conjunto de instruções x86_64, use [amd64] ou remova a propriedade Architectures.

    exemplo 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]
  2. Use o comando sam build para compilar o executável.

    sam build
  3. Use o comando sam deploy para implantar a função no Lambda.

    sam deploy --guided

Criar e atualizar funções com arquivos .zip usando o AWS CloudFormation

Você pode usar o AWS CloudFormation para criar uma função do Lambda usando um arquivo .zip. Para criar uma função do Lambda de um arquivo.zip, primeiro carregue o arquivo em um bucket do Amazon S3. Para obter instruções sobre como carregar um arquivo para um bucket do Amazon S3 usando a AWS CLI, consulte Mover objetos no Guia do usuário da AWS CLI. 

No modelo do AWS CloudFormation, o recurso AWS::Lambda::Function especifica a função do Lambda. Nesse recurso, defina as seguintes propriedades para criar uma função usando um arquivo .zip:

  • PackageType: definir como Zip

  • Code: inserir o nome do bucket do Amazon S3 e o nome do arquivo .zip nos campos S3Bucket e S3Key

  • Runtime: definir como o runtime escolhido

O arquivo .zip que o AWS CloudFormation gera não pode exceder 4 MB. Para saber mais sobre como implantar funções usando o arquivo.zip emAWS CloudFormation, consulte AWS::Lambda::Functiono Guia do AWS CloudFormationusuário.

Criar uma camada Go para suas dependências

nota

Usar camadas com funções em uma linguagem compilada, como Go, pode não oferecer o mesmo benefício de uma linguagem interpretada como Python. Como o Go é uma linguagem compilada, suas funções ainda precisam carregar manualmente quaisquer montagens compartilhadas na memória durante a fase inicial, o que pode aumentar os tempos de inicialização a frio. Em vez disso, recomendamos incluir qualquer código compartilhado no momento da compilação para aproveitar as otimizações integradas do compilador.

As instruções nesta seção mostram como incluir suas dependências em uma camada.

O Lambda detecta automaticamente todas as bibliotecas no diretório /opt/lib e quaisquer binários no diretório /opt/bin. Para garantir que o Lambda encontre corretamente o conteúdo da sua camada, crie uma camada com a seguinte estrutura:

custom-layer.zip └ lib | lib_1 | lib_2 └ bin | bin_1 | bin_2

Depois de empacotar sua camada, consulte Criar e excluir camadas no Lambda e Adicionar camadas às funções para concluir sua configuração de camada.