AWS Lambda - Exportação das funções para outras regiões

Objetivo

Esse exercício irá mostrar os passos para exportar e importar funções Lambda entre regiões manualmente. Caso queira mais informações clique aqui.

Conhecimentos necessários:

  • Uso básico do AWS CLI
  • Conceitos básicos da linguagem Javascript

Ao final desse exercício, você será capaz de:

  • Exportar e importar funções Lambda entre regiões

Tempo de Execução Estimado: 30 minutos

Custo Aproximado: 1 USD

Execução

Crie uma função AWS Lambda

  1. Acesse a console do AWS Lambda: https://console.aws.amazon.com/lambda.
    Para este exemplo, escolha a região us-east-1 (Virginia do Norte).

  2. No painel de navegação, no lado esquerdo do console, selecione Functions (Funções).

  3. Escolha Create Function (Criar função). create function

    • Selecione Author from scratch (criar do zero)
    • Em Function name (nome da função) insira multi-region-test-function. Em Runtime, escolha Node.js 14.x.
    • Para criar a função, selecione Create (Criar). create function
    • A função será criada e você será redirecionado para o editor de funções do console. Em Function Code (Código da função) Copie e cole o código abaixo:
    exports.handler = async (event) => {
       console.log("chamando função lambda...")
       const response = {
            statusCode: 200,
            body: JSON.stringify('Testando o import e export de funções Lambda!'),
       };
       return response;
    };
    
    • Clique em Test (testar) no canto superior direito. Um pop-up irá aparecer solicitando a configuração de um evento de teste. create function
    • Selecione Create new test event (Criar novo evento de teste), dê o nome eventdata no campo Event name (nome do evento) e clique em Create (Criar)
    • Clique novamente em Test (Testar). A mensagem Execution result: succeeded deve aparecer. Ao clicar em detalhes, um payload JSON deve aparecer com o texto * Hello from Lambda!*. create function
  4. Sua função Lambda foi criada com sucesso! Iremos agora exportá-la da região corrente para posterior importação em outra região.

Exporte a função Lambda criada

  1. Acesse a console do AWS Lambda: https://console.aws.amazon.com/lambda.
    Lembrando que, para este exemplo, estamos utilizando por enquanto a região us-east-1 (Virginia do Norte).
  2. Na lista de funções, selecione a função multi-region-test-function criada anteriormente. A aba Configuration (Configuração) aparecerá.
  3. Clique em Actions (Ações) -> Export Function (Exportar Função) create function
    • Um pop-up abrirá oferecendo duas opções para download: Download AWS SAM file (Baixar arquivo SAM) ou Download deployment package (Baixar pacote de instalação).
    • Selecione Deployment package (Pacote de instalação) e aguarde o download. Repare que o arquivo baixado é um arquivo zip, porém sem extensão. Após o download, renomeie o arquivo com a extensão .zip para podermos utilizá-lo posteriormente.

Importe a função Lambda na segunda região

  1. Acesse a console do AWS Lambda: https://console.aws.amazon.com/lambda.
  2. Selecione a região no combo do canto superior direito do console.
    Para este exemplo, utilizarei a região sa-east-1 - South America (São Paulo)
  3. Caso a função não exista:
    • Execute os passos 1,2 e 3 no item 3 da seção Crie uma função AWS Lambda acima.
  4. Na lista de funções, selecione a função multi-region-test-function criada. A aba Configuration (Configuração) aparecerá.
    • Em Function Code (código da função), clique em Actions (Ações), upload a .zip file (Enviar um arquivo .zip). upload
      • Você pode também importar sua função através de um bucket S3. para isto, selecione Upload a file from Amazon S3 (Enviar à partir do S3) e informe a URL onde o .zip se encontra.
    • Selecione o arquivo zip baixado anteriormente (não esqueça de renomeá-lo com a extensão .zip) e clique em Save (Salvar).
    • (Opcional) Caso queira testar sua função, configure o payload de teste como fizemos nos passos 5,6 e 7 do item 3 em Crie uma função Lambda acima.
  5. Pronto! Sua função Lambda foi copiada de uma região para a outra.

Apagando os recursos

  1. Apague as funções lambda criadas em ambas as regiões.

Crie uma função AWS Lambda

Caso você já tenha uma função Lambda criada, você pode pular para a próxima etapa, em Exporte a função Lambda

  1. Acesse a console do AWS CloudShell: https://console.aws.amazon.com/cloudshell/home.
    Para este exemplo, escolha a região us-east-1 (Virginia do Norte). O CloudShell ainda não está disponível em todas as regiões.

  2. Com o prompt de comando pronto, precisamos criar a role para permitir acesso de execução da função Lambda:

    aws iam create-role --role-name lambda-execution --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
    

    É necessário agora da permissão para que a função possa ser executada. Para isto, adicione a política AWSLambdaBasicExecutionRole à role criada acima:

    aws iam attach-role-policy --role-name lambda-execution --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
    
  3. Criaremos agora a função lambda via CLI. para isto, execute o comando abaixo:

    echo "exports.handler = async (event) => {
        console.log('chamando função lambda...', event);
        const response = {
            'statusCode': 200,
            'body': JSON.stringify('Testando o import e export de funções Lambda!'),
        };
        return response;
    };" > index.js
    
  4. O comando acima criou o arquivo index.js contendo o código-fonte da nossa função Lambda. Vamos agora empacotar a função em um arquivo .zip para podermos registrá-la no serviço AWS Lambda da região em questão:

    zip multi-region-test-function index.js
    
  5. Podemos agora registrar a função através do comando abaixo:

    export ACC_ID=$(aws sts get-caller-identity --query Account --output text)
    aws lambda create-function --function-name multi-region-test-function --zip-file fileb://multi-region-test-function.zip --handler index.handler --runtime nodejs14.x --role arn:aws:iam::$ACC_ID:role/lambda-execution
    
    • Em Function name (nome da função) insira multi-region-test-function. Em Runtime, escolha Node.js 12x.
    • Para criar a função, selecione Create (Criar). A função será criada e você será redirecionado para o editor de funções do console.
    • Copie e cole o código abaixo:
    exports.handler = async (event) => {
       console.log("chamando função lambda...")
       const response = {
            statusCode: 200,
            body: JSON.stringify('Testando o import e export de funções Lambda!'),
       };
       return response;
    };
    
  6. (Opcional) Caso a função já exista no serviço AWS Lambda, é possível atualizar o código fonte da função através do comando abaixo:

    aws lambda update-function-code --function-name multi-region-test-function --zip-file fileb://multi-region-test-function.zip
    
  7. Vamos agora testar a função criada. Utilize o comando abaixo para invocar a função Lambda através da linha de comando:

    aws lambda invoke --function-name multi-region-test-function --payload $(echo '{ "key_sample": "value_sample" }' | base64) --log-type Tail --query 'LogResult' --output text out | base64 -d
    

    Temos uma linha INFO contendo a mensagem do console dentro da função juntamente com o payload enviado, o que indica que a função foi executada com sucesso.

  8. Pronto! Sua função Lambda foi criada com sucesso via AWS CLI com o CloudShell.

Exporte a função Lambda criada

  1. Acesse a console do AWS CloudShell: https://console.aws.amazon.com/cloudshell/home.
    Para este exemplo, escolha a região us-east-1 (Virginia do Norte).
  2. (Opcional) Com o prompt de comando pronto, iremos listar as funções Lambda existentes em cada região. Para isto, utilize o comando abaixo, substituindo a região caso queira:
    aws lambda list-functions --region sa-east-1
    
  3. Neste lab, já sabemos qual é o nome da função que criamos anteriormente. Desta forma, iremos exportá-la e gerar um .zip com o código fonte através do comando:
    aws lambda get-function --function-name multi-region-test-function --query 'Code.Location' | xargs wget -O multi-region-test-function-exp.zip
    

    É possível extrair os demais metadados da função Lambda como as configurações de timeout ou variáveis de ambiente por exemplo. Para este lab, focamos apenas no código fonte para a simplicidade do lab

  4. Pronto. Já temos o código fonte de nossa função e podemos importá-la em outra região.

Importe a função Lambda na segunda região

Iremos atualizar uma função existente em outra região. Neste exemplo, utilizaremos a região sa-east-1 (North America - São Paulo). Caso a funcão ainda não exista nesta região, execute os passos da etapa Crie uma função Lambda descrita no início deste lab.

  1. Acesse a console do AWS CloudShell: https://console.aws.amazon.com/cloudshell/home.
    Para este exemplo, escolha a região us-east-1 (Virginia do Norte).
  2. Iremos atualizar a função multi-region-test-function na região sa-east-1 (South America - São Paulo). Para isto, execute o seguinte comando:
    aws lambda update-function-code --function-name multi-region-test-function --region sa-east-1 --zip-file fileb://multi-region-test-function-exp.zip
    
  3. Vamos agora testar a importação fazendo a chamada da função. Para isto:
    aws lambda invoke --function-name multi-region-test-function --payload $(echo '{ "key_sample": "value_sample" }' | base64) --log-type Tail --query 'LogResult' --region sa-east-1 --output text out | base64 -d
    


    Podemos validar que a função foi atualizada pois a linha de log INFO agora escreve também o payload recebido, o que não acontecia com a função criada no início deste lab.

  4. Pronto! Sua função Lambda foi criada em outra região.

Apagando os recursos

  1. Apague as funções lambda criadas em ambas as regiões com os seguintes comandos:
    aws lambda delete-function --function-name multi-region-test-function --region us-east-1
    aws lambda delete-function --function-name multi-region-test-function --region sa-east-1
    

Conclusão

Com este exercício foi possível verificar como a replicação de funções Lambda entre regiões AWS pode ser utilizada nas estratégias de DR do tipo Backup & Restore e Pilot Light. Para as estratégias de Warm Standby e Active-Active, consulte o exercício prático de deployment de funções lambda via Pipeline de CI/CD.

Fonte: AWS Lambda - Guia do Desenvolvedor