--- hidden: true --- #### 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](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: ```bash 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: ```bash 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: ```bash 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: ```bash zip multi-region-test-function index.js ``` 5. Podemos agora registrar a função através do comando abaixo: ```bash 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: ```javascript 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: ```bash 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: ```bash 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](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: ```bash 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: ```bash 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](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: ```bash 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: ```bash 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: ```bash 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 ```