Serverless Framework: 5 comandos essenciais
Tags: ptbr, aws, serverless, webdev
Published: 2019-08-18 23:37:51

## Comandos que você deveria estar usando em produção

Quando se trata do [Serverless Framework](https://serverless.com), pode haver uma curva de aprendizado. No entanto, com alguns comandos úteis, você pode simplificar seu desenvolvimento serverless e manter seu foco na construção vs depuração.

O objetivo deste artigo é mostrar uma série de comandos que usamos constantemente no [Serverless Guru](https://serverlessguru.com) para acelerar a depuração e fornecer resultados mais rápidos aos nossos clientes.

# Lista de Comandos

Na seção a seguir, mostraremos os comandos e daremos uma breve descrição de como os usamos no Serverless Guru.

# Empacotando

Quando se trata de empacotar suas funções AWS Lambda, você ficará tentado a simplesmente executar o comando `sls deploy`, que irá fazer um **zip** das suas lambdas, node_modules, e quaisquer outros arquivos que você disse ao Serverless Framework para incluir. No entanto, a execução `sls deploy` também inicia a provisão no AWS e, caso desejarmos simplesmente inspecionar o tamanho e o conteúdo do arquivo zip, podemos executar o seguinte comando:

```bash
$ sls package -v
```

Nota: Você ainda pode passar opções (por exemplo, `--stage <>` ou `--region <>`) se você estiver usando essas variáveis no seu arquivo `serverless.yml`.

# Testes Locais

Desenvolver aplicativos serverless e ter qualquer reflexo de velocidade requer testes locais da sua lógica do AWS Lambda. Ou seja, você não quer esperar que uma provisão seja concluída toda vez que seu nome de variável estiver sem um caractere.

Para começar com testes locais, há um comando útil que você pode usar:

```bash
$ sls invoke local -f [function_name] -d "{ ... }" -v
```

A [documentação](https://serverless.com/framework/docs/providers/aws/cli-reference/invoke-local) inclui algumas "opções", como as quais você viu acima `-d`. É importante investir tempo lendo as opções disponíveis para este comando para entender o que faz mais sentido para o seu projeto.

Recomendamos o uso de `sls invoke local -f [] -p ./test-events/create-user.json` o `-p` informa ao comando para fazer referência a um arquivo em seu projeto ao invés do `-d` que requer um objeto de evento codificado na hora. Utilizar `-p` escala significativamente melhor, pois você pode acompanhar e documentar todos os seus eventos.

À medida que você se aprofunda, recomendamos o uso de alternativas ao `sls invoke local`, que seria o `sls-offline`, um plugin do Serverless Framework que ajuda a simular o AWS Lambda e o API Gateway localmente. Isso permitirá que você faça solicitações às suas funções lambda diretamente pelo seu navegador, caso suas funções do AWS Lambda estiverem configuradas como APIs.

# Deploy de uma única função

À medida que seus aplicativos serverless crescem em tamanho e complexidade. Será ainda mais importante evitar o `sls deploy` para todas as mudanças de código. Com isso, teremos algumas etapas adicionais, como a verificação de alterações em nossa infraestrutura no `serverless.yml` e verificar as alterações realizadas nas funções da AWS Lambda em nosso projeto, algumas das quais não nos importamos muito quando simplesmente mudamos um pequeno código em uma única função:

```bash
$ sls deploy function -f [function_name] -v
```

A [documentação](https://serverless.com/framework/docs/providers/aws/cli-reference/deploy-function) tem algumas opções e até mostra uma maneira de atualizar apenas a configuração da sua função lambda (por exemplo, tempo limite, memória, etc).

# Instalando plugins como um mestre Serverless Framework

Quando você estiver pronto para começar a trabalhar com plugins do Serverless Framework. Você precisará instalá-los seguindo estas etapas:

1. Instale o plugin, `npm install --save-dev <>`
2. Crie uma seção `plugins` no `seuserverless.yml`

Você pode estar se perguntando, bem, se são apenas dois passos, por que eu preciso de um comando específico? Evitar erros humanos, deve estar na linha de frente das nossas preocupações, podemos lidar com as duas etapas acima, fazendo o seguinte:

```bash
$ sls plugin install --name [plugin-name] -v
```

Na [documentação](https://serverless.com/framework/docs/providers/aws/cli-reference/plugin-install/), você também pode ver que é possível passar um número de versão para o comando:

```bash
$ sls plugin install --name [plugin-name]@[version] -v
```

> Grandes coisas são feitas por uma série de pequenas coisas reunidas - Vincent Van Gogh

# Depuração de variáveis do Serverless Framework

Quando você está desenvolvendo aplicativos serverless, um obstáculo comum é esse sentimento que você está desenvolvendo dentro de uma caixa preta. Isso significa que há tanta abstração acontecendo sob seus pés, que isso pode fazer você se sentir impotente diante de pequenos problemas, como uma variável que não resolve corretamente dentro do seu arquivo `serverless.yml`.

Bem, felizmente, existe um comando do Serverless Framework que ajuda você a superar esse obstáculo imprimindo o arquivo `serverless.yml` com todas as variáveis ​​resolvidas:

```bash
$ sls print
```

Com o comando `sls print`, podemos ver o seguinte resultado do `serverless.yml` original:

```yml
service: real-time-weather
provider:
  name: aws
  stage: ${opt:stage, "dev"}
  region: ${opt:region, "us-west-2"}
  profile: ${opt:profile, "serverlessguru"}
custom:
  base: ${self:service}-${self:provider.stage}
  dyanmoDBUsersTable: ${self:custom.base}-users-table
```

Para o resolvido:

```yml
service: real-time-weather
provider:
  name: aws
  stage: dev
  region: us-west-2
  profile: serverlessguru
custom:
  base: real-time-weather-dev
  dyanmoDBUsersTable: real-time-weather-dev-users-table
```

E assim, somos capazes de encontrar facilmente que, nossa variável `dynamoDBUsersTable` usa o `stage` anexado ao nome e que, neste hipotético cenário, era o nosso problema.

# Conteúdo adicional

- [Industry Predictions for 2019](https://medium.com/@serverlessguru/industry-predictions-for-2019-daab461e8c)
- [Best Practices for Serverless Development](https://medium.com/@serverlessguru/best-practices-for-serverless-development-d13061b3593e)
- [Serverless CI/CD](https://medium.com/@serverlessguru/serverless-ci-cd-cloud-build-e8c09e9a1018)
- [Serverless Web Applications — AWS v GCP](https://medium.com/@serverlessguru/aws-to-gcp-web-applications-89ed92070832)
- [Serverless Impact, Developer Velocity](https://medium.com/@serverlessguru/serverless-impact-developer-velocity-ad28fc8cfd33)
- [Guide, First Serverless Project](https://medium.com/@serverlessguru/guide-first-serverless-project-630b91366505)

---

# O que faz o Serverless Guru?

No [Serverless Guru](https://serverlessguru.com), trabalhamos com empresas que querem acelerar sua migração para o desenvolvimento orientado a eventos em Serverless / Cloud Native. Ajudamos clientes com desenvolvimento em nuvem, desenvolvimento backend, desenvolvimento frontend, automação, melhores práticas e treinamento para equipes. Focamos em engenheiros primeiro.

# Sentiu falta de algo?

Você pode deixar sua resposta abaixo ou twittar sua resposta para [@serverlessgurux](https://twitter.com/serverlessgurux) no Twitter.

---

# Créditos

- [The five Serverless Framework commands that you should be using](https://medium.com/serverlessguru/the-five-serverless-framework-commands-that-you-should-be-using-55d844a2ad31), escrito originalmente por [Ryan Jones](https://twitter.com/ryanjonesirl)