Serverless Framework: Gerando artefatos para deploy em CI/CD
Tags: ptbr, aws, serverless, webdev
Published: 2019-09-03 07:48:47

Nesse artigo, veremos como gerar artefatos de para deploy em seu pipeline de CI / CD em seus aplicativos **Serverless Framework**.

Ao pensar em fazer o deploy ou reverter seu aplicativo serverless, você deve tratar cada serviço como um serviço independente. Isso significa que você deseja criar e gerenciar artefatos de deploy para cada serviço independentemente. E você deseja ter controle sobre o processo de reversão e deploy.

Antes de examinarmos como criar um artefato de deploy para um aplicativo Serverless Framework, vamos primeiro examinar como o comando `serverless deploy` funciona internamente.

# Como `serverless deploy` funciona

Quando você executa `serverless deploy`, duas etapas são executadas nos bastidores. O Serverless Framework executa primeiro o `serverless package` para empacotar seu código e criar um modelo CloudFormation. Por padrão, o artefato é gerado no diretório `.serverless/` da raiz do seu projeto com o seguinte conteúdo:

- Um arquivo zip com o código Lambda para o seu serviço. Ou um arquivo zip para cada função Lambda em seu serviço, caso o [empacotamento individual estiver ativado](https://serverless.com/framework/docs/providers/aws/guide/packaging/#packaging-functions-separately).
- Um arquivo de modelo do CloudFormation que descreve os recursos definidos no seu `serverless.yml`.
- Um arquivo `serverless-state.json` usado internamente pelo Serverless Framework.

Depois que o artefato é gerado, o Serverless irá fazer o deploy este pacote:

1. Fazendo upload do arquivo zip para um bucket S3.
2. Atualizando o modelo CloudFormation e adicionando os caminhos do bucket S3 para os arquivos zip do Lambda.
3. O envio do modelo ao CloudFormation para iniciar a implementação na AWS.

# Gerando Artefatos de Deploy

Para o nosso pipeline de CI / CD, queremos separar esse processo em duas etapas. Para fazer isso, primeiro faremos o empacotamento:

```bash
$ serverless package --package PACKAGE_DIR
```

Isso irá gerar o pacote no diretório `PACKAGE_DIR`

Podemos então armazenar este pacote para reutilizá-lo mais tarde. É uma boa idéia marcar este pacote com um commit do Git associado a ele. Ou atribuir algum outro ID exclusivo que possamos usar posteriormente para buscar esse artefato.

Quando estivermos prontos para fazer o deploy deste pacote ou se estivermos tentando reverter para este commit, iremos referenciar o pacote e iniciar o deploy usando:

```bash
$ serverless deploy --package PACKAGE_DIR
```

O `PACKAGE_DIR` é onde o artefato para deploy foi gerado. 

Se você executar o comando `serverless deploy` com a opção `--package`, **ele ignorará a etapa de empacotamento** e usará o artefato que você forneceu.

Isso fornece controle sobre os artefatos de deploy que o Serverless Framework gera, permitindo que ele seja melhor integrado ao seu pipeline de CI / CD.

---

# Créditos

- [How to generate deployment artifacts in your CI/CD pipeline for Serverless apps](https://seed.run/blog/how-to-generate-deployment-artifacts-in-your-cicd-pipeline-for-serverless-apps.html), escrito originalmente por [Jack Jiang](https://www.linkedin.com/in/jack-jiang-52b147a4/)