Projeto feito com o objetivo de criar uma infra como código na AWS Cloud utilizando Terraform e Serveless Framework.
Siga as instruções deste repositório para montar seu ambiente no Cloud9 juntamente com a instalação do Terraform e Serveless Framework.
Assim que tiver seu ambiente montado siga as instruções abaixo:
- Volte para a pasta raiz do cloud9
cd ~/environment
- Clone este projeto
git clone https://github.com/marciojg/aws-architecture.git
- Entre na psta do projeto
cd aws-architecture
- Entre na pasta 'S3' com o comando
cd terraform/S3
- Execute o comando
terraform init
- Execute o comando
terraform apply -auto-approve
- Saia da pasta com
cd ..
- Execute o comando a seguir
bash ../replace-vars.bash vars.tf
e informe<SEU-EMAIL-AQUI>
no Valor a ser procurado e no Novo valor deve ser seu email. Ex:
- Execute o comando a seguir
bash ../replace-vars.bash state.tf
e informe<ACCOUNT-ID-AQUI>
no Valor a ser procurado e no Novo valor deve ser o ID da sua conta AWS que pode ser encontrado no resultado do comando da linha 6 que você executou anteriormente. Ex:
- Execute o comando
terraform init
- Execute o comando
terraform apply -auto-approve
- Vá para a pasta serveless
cd ../serveless
- Crie uma pasta chamada
layer
utilizando o comando no terminalmkdir layer
- Execute os comandos abaixo para instalar todas as dependencias listadas no arquivo
requirements.txt
dentro da pasta layer.
python3 -m venv ~/venv
source ~/venv/bin/activate
pip3 install -r requirements.txt -t layer
deactivate
- Execute o comando a seguir
bash ../replace-vars.bash serverless.yml
e informe<ACCOUNT-ID-AQUI>
no Valor a ser procurado e no Novo valor deve ser o ID da sua conta AWS que pode ser encontrado no resultado do comando da linha 6 que você executou anteriormente. Ex:
- Fazer deploy
sls deploy
- Acesse seu email usado no SNS endpint e confirme a inscrição a partir do email recebido do SNS, conforme imagem abaixo
Dados válidos para request
/book/create
{
"book_name":"harry potter",
"book_id": 34577,
"book_preco": 45.87
}
/sell/book
{
"book_id":2346,
"customer_id": 12456
}
Os testes podem ser feitos diretamente pelo API Gateway que possui uma interface de testes ou usando curl diretamente do console do Cloud9.
Caso decida fazer os testes usando o curl o endereço das APIs podem ser capturados logo após executar o comando sls deploy
.
Quando enviamos uma request válida, a api retorna 200 e um arquivo será criado no bucket. Ex:
Quando a request é inválida um erro 400 é retornado e no log é exibido o atributo que está errado
- Serveless down
cd ~/environment/aws-architecture/serveless/
sls remove --force
- Terraform down
cd ~/environment/aws-architecture/terraform/
terraform destroy --force
- Terraform state down
cd ~/environment/aws-architecture/terraform/S3
terraform destroy --force
- https://github.com/serverless/examples
- https://github.com/vamperst/Hackaton-exercises-terraform
- https://github.com/vamperst/Hackaton-exercises-serverless
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue
- https://registry.terraform.io/modules/damacus/sqs-with-dlq/aws/latest
- https://www.serverless.com/framework/docs/providers/aws/events/apigateway/
- https://www.serverless.com/blog/aws-lambda-sqs-serverless-integration
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic_subscription
- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic
- https://christiangiacomi.com/posts/terraform-sns-sqs-lambda/
- https://github.com/vamperst/desbravando-erros-e-falhas-em-territorio-serverless-demo