DEV Community

Cover image for SST - a parte da infra que pode ser legal
Matheus Gonçalves da Silva
Matheus Gonçalves da Silva

Posted on

1

SST - a parte da infra que pode ser legal

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
});
Enter fullscreen mode Exit fullscreen mode

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]
})
Enter fullscreen mode Exit fullscreen mode

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],
          );
        },
Enter fullscreen mode Exit fullscreen mode

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

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

Heroku

This site is powered by Heroku

Heroku was created by developers, for developers. Get started today and find out why Heroku has been the platform of choice for brands like DEV for over a decade.

Sign Up

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay