Java + LocalStack: usando o AWS CDK e CloudFormation com a API Oficial da Marvel

Introdução

O AWS CDK é uma forma de criar os recursos da sua infraestrutura na AWS usando código fonte (no nosso caso o Java) ao invés de utilizar o formato YAML

A partir desse código é possivel gerar a Stack para o CloudFormation e criar os recursos diretamente na AWS ou no LocalStack.

Requisitos

Código Fonte

No nosso exemplo vamos criar os seguintes recursos:

  • Configurações no Parameter Store;
  • Bucket S3;
  • SNS;
  • SQS inscrito no SNS;
  • AWS Lambda que é acionada a partir de um SQS;

Parameter Store

Bucket S3

SQS

SNS

AWS Lambda

Nesse código, existe a linha 18 que especifica um código fonte para o Lambda. No caso da execução local, o comando busca o arquivo da função em um diretório.

O ideal é sempre buscar esse arquivo através de um Bucket S3 usando o comando Code.fromBucket.

No arquivo YAML gerado do CloudFormation a partir do CDK devemos alterar a criação do AWS Lambda apontando para um Bucket S3:

Instalando o AWS CDK

Para instalar o AWS CDK utilize o comando abaixo:

npm install -g aws-cdk

O LocalStack usa um CDK especifico para funcionar que é instalado a partir do comando abaixo:

npm install -g aws-cdk-local aws-cdk

A documentação do LocalStack mostra com mais detalhes sobre o AWS CDK Local:

Criando uma aplicação

Vamos iniciar com AWS CDK criando um projeto de exemplo com a estrutura básica de uma aplicação.

O comando cdklocal é utilizado para implantar no LocalStack

O comando cdk é utilizado para implantar diretamente na AWS

Nessa aplicação é criado um SNS e um SQS que está inscrito nesse tópico gerado pelo CDK:

cdklocal init sample-app --language=java

Implantando com CDK no LocalStack

Podemos gerar o arquivo do CloudFormation a partir do código fonte em Java usando o parâmetro synth:

cdklocal synth > bff-marvel-cdk_localstack.yml

Arquivo YAML do CloudFormation gerado:

Antes de efetuar o deploy dos nossos recursos, devemos executar o comando do CDK com o parâmetro bootstrap para iniciar o ambiente do CDK dentro do LocalStack.

Isso acontece também quando estamos usando a AWS diretamente:

cdklocal bootstrap

Executamos o comando com o parâmetro deploy para criação dos recursos:

cdklocal deploy

O parâmetro destroy elimina todos os recursos criados:

cdklocal destroy

O CDK sempre irá criar os recursos de acordo com a região configurada dentro do AWS CLI no arquivo .config e .credentials:

[default]
region = us-east-1
[profile localstack]
region = us-east-1

Implantando com CloudFormation no LocalStack

Com o arquivo do CloudFormation gerado pelo comando cdklocal synth, podemos executar a criação dos recursos diretamente no LocalStack.

Para isso, selecione a opção CloudFormation:

Clique em CREATE STACK:

Copie o código do arquivo YAML gerado e especifique um nome para a sua Stack.

No nosso caso, o arquivo gerado deve possuir algumas alterações, principalmente em relação a criação do AWS Lambda:

Confirme a criação:

Será iniciado o processo de criação dos recursos no LocalStack:

Status da criação dos recursos da Stack:

Recursos criados com sucesso:

Podemos também usar o AWS CLI para criar a Stack no CloudFormation:

aws --endpoint http://localhost:4566 --profile localstack cloudformation create-stack --stack-name marvelStack --template-body file://bff-marvel-cdk_localstack.yml

Stack criada com sucesso:

{                                                                                         
"StackId": "arn:aws:cloudformation:us-east-1:000000000000:stack/marvelStack/337fed86"
}

Implantando com CDK na AWS

Utilzaremos os mesmo processo usado no LocalStack. Ao invés de utilizar o comando cdklocal vamos usar o comando cdk:

cdk bootstrap

Gerando os recursos necessários para o funcionamento com CDK na AWS:

Bootstrap feito com sucesso:

Vamos efetuar o deploy dos recursos na AWS:

cdk deploy

Uma Stack foi criada e o processo entra em execução:

Stack executada com sucesso e os recursos foram criados:

O parâmetro destroy elimina todos os recursos criados:

cdk destroy

Github

Código fonte do CDK desse artigo:

Até a próxima!

--

--

📺+ de 20 anos gerando código fonte em Java, Arquiteto Java, Desenvolvedor Java, Professor Universitário e Colecionador de Videogames

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store