AWS Lambda - Movimentação Manual

Envolve exportar manualmente, via console ou aws-cli, suas funções lambda e importá-las em outra região.

Apesar de possível, esta estratégia é muito suscetível a erros manuais. Utilizar quando se tem poucas funções pode ser uma estratégia, embora desencorajada. Apenas o código fonte será exportado, fazendo com que as demais configurações como Permissões, memória, timeout, variáveis de ambiente e demais opções tenham que ser configuradas manualmente. Além disto, mantenha sempre seu código fonte em uma ferramenta de versionamento.

Caso você tenha o código fonte armazenado em um gerenciador de versão, O passo de exportação abaixo não é necessário.

Exportação (via Console)

Para isto, acesse o menu Serviços -> Lambda. Selecione Functions, clique na função desejada, actions -> Função de Exportação. Um popup irá aparecer com as opções de Download do Arquivo SAM ou do Pacote de implantação. Selecione Pacote de Implantação e o download será feito. Repare que o arquivo baixado é um arquivo zip, porém não tem esta extensão. Após o download, renomeie o arquivo para a extensão .zip para ser utilizado posteriormente.

Exportação (via CLI)

AWS CLI fornece comandos para para listar e baixar localmente todas as funções AWS Lambda. Por exemplo, para listar o nome das funções existentes na sua conta configurada em ~/.aws/credentials:

aws lambda list-functions --region=us-east-2 | jq '[.Functions[] | select(.FunctionName) | .FunctionName]'

O comando acima extrai apenas o nome da função via jq. Para obter os detalhes de uma função lambda específica pelo nome:

aws lambda get-function --region=us-east-2 --function-name test | jq

O comando acima retorna inclusive a url S3 de onde o código fonte está localizado no node Code.Location do json retornado, além das configurações de memória, timeout e outos em Configuration.

Importação (via Console)

Volte para a lista de Funções no breadcrumb no canto superior esquerdo. Selecione a nova região no combo no canto superior direito do Console e clique em Criar função (caso ela não exista). Nomeie a função preferencialmente com o mesmo nome da região, tomando cuidado para garantir que as demais configurações como runtime, permissões, mémória e demais opções estejam iguais a da região de origem. Uma vez criada, na seção Código Fonte:

  • Clique em Ações -> Fazer upload de um arquivo zip.
  • Selecione o arquivo exportado previamente
  • Clique em ok.

O código fonte será importado para a função Lambda corrente. Você pode também importar o código fonte à partir de um .zip armazenado em um bucket S3.

Importação (via CLI)

Também é possível criar funções AWS Lambda utilizando o AWS CLI. Para isto, utilize o método abaixo:

aws lambda create-function --function-name funcao-teste --zip-file fileb://meufonte.zip --handler meuhandler --runtime meuruntime --role arn:aws:iam:meuaccountid:role/minharole

O comando acima é apenas um exemplo. Substitua os valores funcao-teste, meufonte.zip, meuhandler, meuruntime, meuaccountid e minharole pelos valores específicos ao seu cenário. A documentação completa encontra-se aqui.

Considerações

Os comandos do AWS CLI listados acima são apenas exemplos. É possível automatizar parte desta importação e exportação via shell script ou python, por exemplo, para minimizar possíveis problemas de configuração fazendo-as manualmente pelo Console. Elabore a estratégia mais segura para o seu cenário e evolua sua arquitetura sempre que possível e baseando-se nos Pilares para workloads resilientes.

Considere minimamente encapsular seu código fonte utilizando o SAM (Serverless Application Model). Desta forma, é possível transportar o código fonte, suas configurações e dependências em um único pacote. Isto simplifica drásticamente a complexidade de movimentação dos seus pacotes de instalação entre regiões e segue o pilar de Infrastructure-as-code descrito neste material.

Além do SAM descrito acima, é possível também utilizar ferramentas como o AWS CloudFormation ou o AWS CDK via linha de comando. Ainda que executado manualmente, minimamente estas ferramentas garantem um diff de sua infraestrutura atual, facilitando o deployment das evoluções de sua arquitetura nas múltiplas regiões.


Referências