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:
Ao final desse exercício, você será capaz de:
Tempo de Execução Estimado: 30 minutos
Custo Aproximado: 1 USD
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).
No painel de navegação, no lado esquerdo do console, selecione Functions (Funções).
Escolha Create Function (Criar função).
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;
};
Sua função Lambda foi criada com sucesso! Iremos agora exportá-la da região corrente para posterior importação em outra região.
Caso você já tenha uma função Lambda criada, você pode pular para a próxima etapa, em Exporte a função Lambda
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.
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
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
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
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
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;
};
(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
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.
Pronto! Sua função Lambda foi criada com sucesso via AWS CLI com o CloudShell.
aws lambda list-functions --region sa-east-1
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
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.
aws lambda update-function-code --function-name multi-region-test-function --region sa-east-1 --zip-file fileb://multi-region-test-function-exp.zip
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.
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
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.