Hoje em dia cloud providers estão cada vez mais em alta e saber o minimo possivel sobre eles meio que passou a ser um requisito implicito, ou um que faz muita diferenca para se destacar hoje em dia. Irei abordar SST, uma ferramenta que trás abstracoes muito interessantes e faceis encima do AWS CDK, um tooling da aws que transforma codigo em templates cloudformation.

Cloudformation

Nao vou entrar muito nesse assunto, porém é muito importante saber o que é cloudformation: O AWS CloudFormation é um serviço que ajuda você a modelar e configurar seus recursos da AWS para despender menos tempo gerenciando esses recursos e mais tempo se concentrando em seus aplicativos executados AWS. Você cria um modelo que descreve todos os recursos da AWS desejados (como funções do Amazon EC2 e tabelas do Amazon RDS), e o CloudFormation cuida do provisionamento e da configuração desses recursos para você. Não é necessário criar e configurar individualmente os recursos da AWS e descobrir o que depende do que: o CloudFormation lida com tudo isso. Os cenários a seguir demonstram como o CloudFormation pode ajudar.

Porém é absolutamente contra intuitivo a maneira como os templates sao criados, sendo assim, abstracoes encima dele sao de suma importancia.

Comecando!

npx create-next-app@latest aws-nextjs
cd aws-nextjs

Iremos usar nextjs como exemplo para ilustrar o poder do sst e como ele interage com cdk/cloudformation por debaixo dos panos

Iniciar o sst:

npx sst@latest init

Após isso, sst irá gerar um arquivo de configuracao, onde podemos usar para nosso exemplo:

const bucket = new sst.aws.Bucket("MyBucket", {
  access: "public"
});

No código assim, após os templates do CF serem compilados, irá criar na aws um bucket chamado MyBucket onde estará exposto a internet, para acesso publico!

Agora, precisamos dizer para o deploy da nossa aplicacao next, que deverá usar esse bucket para colocar assets que nao necessitam estar pelo server:

new sst.aws.Nextjs("MyWeb", {
  link: [bucket]
})

Se formos para o codigo fonte, ele encapsula outras partes de infra para que nao precisemos lidar com isso

https://github.com/sst/sst/blob/9e099fe2caf4c093f8bc45d5b422a3b652a7dfe7/platform/src/components/aws/nextjs.ts#L7

Há mais coisas na documentacao do SST, mas quero apontar para um pedaco de codigo muito interessante: Lambda/Function

Para dar um pouco de contexto, lambda na aws é uma funcao que é executada, tem um comeco e um fim, podendo responder a eventos. Usando CDK há diversas maneiras de fazer o deploy da mesma, com SST, há algumas abstracoes novamente sobre ela:
https://github.com/sst/sst/blob/9e099fe2caf4c093f8bc45d5b422a3b652a7dfe7/platform/src/components/aws/function.ts

Há por exemplo, configuracao de node, versao, opcoes de bundler usando es-build (https://github.com/sst/sst/blob/9e099fe2caf4c093f8bc45d5b422a3b652a7dfe7/platform/src/components/aws/function.ts#L717-L720) entre outras coisas.

Tudo isso para no final das contas criar:

     return new lambda.Function(
            transformed[0],
            {
              ...transformed[1],
              ...(dev
                ? {
                  description: transformed[1].description
                    ? output(transformed[1].description).apply(
                      (v) => `${v.substring(0, 240)} (live)`,
                    )
                    : "live",
                  runtime: "provided.al2023",
                  architectures: ["x86_64"],
                }
                : {}),
            },
            transformed[2],
          );
        },

Por isso é muito mais simples usar as diversas abstracoes que SST nos disponibiliza!

Author Of article : Matheus Gonçalves da Silva Read full article