{"id":15648904,"url":"https://github.com/marciojg/aws-architecture","last_synced_at":"2026-04-30T10:38:49.543Z","repository":{"id":102083437,"uuid":"380092879","full_name":"marciojg/aws-architecture","owner":"marciojg","description":"Criar infra aws utilizando serveless e terraform","archived":false,"fork":false,"pushed_at":"2021-07-07T03:08:08.000Z","size":820,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-30T00:11:20.915Z","etag":null,"topics":["aws","my-apps","serverless","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marciojg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-25T01:33:08.000Z","updated_at":"2023-03-26T17:47:19.000Z","dependencies_parsed_at":"2023-03-10T00:30:19.093Z","dependency_job_id":null,"html_url":"https://github.com/marciojg/aws-architecture","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/marciojg/aws-architecture","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marciojg%2Faws-architecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marciojg%2Faws-architecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marciojg%2Faws-architecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marciojg%2Faws-architecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marciojg","download_url":"https://codeload.github.com/marciojg/aws-architecture/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marciojg%2Faws-architecture/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32462304,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"online","status_checked_at":"2026-04-30T02:00:05.929Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","my-apps","serverless","terraform"],"created_at":"2024-10-03T12:27:01.095Z","updated_at":"2026-04-30T10:38:49.506Z","avatar_url":"https://github.com/marciojg.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AWS ARCHITECTURE\n\nProjeto feito com o objetivo de criar uma infra como código na AWS Cloud utilizando [Terraform](https://www.terraform.io) e [Serveless Framework](https://www.serverless.com).\n\n---\n---\n# Motivador\n\n- [PROBLEMA PROPOSTO](./DESAFIO_PROPOSTO.pdf)\n\n---\n---\n# Arquitetura do projeto\n\n![Arquitetura do projeto](./imgs/aws-cloud-architecture.PNG)\n\n---\n---\n\n# Passos para execução do projeto\n\n## Criar ambiente\n\nSiga as instruções [deste repositório](https://github.com/vamperst/Hackaton-exercises-terraform/tree/master/Setup%20e%20Configura%C3%A7%C3%A3o) para montar seu ambiente no **Cloud9** juntamente com a instalação do **Terraform** e **Serveless Framework**.\n\n## Subir projeto\n\nAssim que tiver seu ambiente montado siga as instruções abaixo:\n\n### Clone do repositório\n\n1. Volte para a pasta raiz do cloud9 `cd ~/environment`\n2. Clone este projeto `git clone https://github.com/marciojg/aws-architecture.git`\n3. Entre na psta do projeto `cd aws-architecture`\n\n\n### Subir Bucket S3 para guardar o estado do terraform\n\n4. Entre na pasta 'S3' com o comando `cd terraform/S3`\n5. Execute o comando `terraform init`\n6. Execute o comando `terraform apply -auto-approve`\n7. Saia da pasta com `cd ..`\n\n![bucket-s3-terraform-state](./imgs/bucket-s3-terraform-state.PNG)\n\n### Subir SNS, SQS, Bucket/S3 suas subscrições e políticas\n\n8. Execute o comando a seguir `bash ../replace-vars.bash vars.tf` e informe `\u003cSEU-EMAIL-AQUI\u003e` no **Valor a ser procurado** e no **Novo valor** deve ser seu email. Ex:\n\n![bash-replace-var-example](./imgs/bash-replace-var-example.PNG)\n\n9. Execute o comando a seguir `bash ../replace-vars.bash state.tf` e informe `\u003cACCOUNT-ID-AQUI\u003e` 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:\n\n![bucket-s3-state-account-id](./imgs/bucket-s3-state-account-id.PNG)\n\n10. Execute o comando `terraform init`\n11. Execute o comando `terraform apply -auto-approve`\n\n![sns-topic](./imgs/sns-topic.PNG)\n![sqs-queue-e-dlq-queue](./imgs/sqs-queue-e-dlq-queue.PNG)\n![bucket-s3-final-e-bucket-s3-log](./imgs/bucket-s3-final-e-bucket-s3-log.PNG)\n\n### Subir Lambdas e API Gateway e suas conexões\n\n12. Vá para a pasta serveless `cd ../serveless`\n13. Crie uma pasta chamada `layer` utilizando o comando no terminal `mkdir layer`\n14. Execute os comandos abaixo para instalar todas as dependencias listadas no arquivo `requirements.txt` dentro da pasta layer.\n\n```bash\n  python3 -m venv ~/venv\n  source ~/venv/bin/activate\n\n  pip3 install -r requirements.txt -t layer\n\n  deactivate\n```\n\n15. Execute o comando a seguir `bash ../replace-vars.bash serverless.yml` e informe `\u003cACCOUNT-ID-AQUI\u003e` 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:\n\n![bucket-s3-state-account-id](./imgs/bucket-s3-state-account-id.PNG)\n\n\n16. Fazer deploy `sls deploy`\n17. Acesse seu email usado no SNS endpint e confirme a inscrição a partir do email recebido do SNS, conforme imagem abaixo\n\n![sns-email-subscription](./imgs/sns-email-subscription.PNG)\n![cloud-formation](./imgs/cloud-formation.PNG)\n![bucket-s3-serveless](./imgs/bucket-s3-serveless.PNG)\n![lambdas](./imgs/lambdas.PNG)\n![api-gateway](./imgs/api-gateway.PNG)\n\n---\n---\n\n## Testar projeto\n\nDados válidos para request\n\n/book/create\n\n```json\n{\n \"book_name\":\"harry potter\",\n \"book_id\": 34577,\n \"book_preco\": 45.87\n}\n```\n\n/sell/book\n```json\n{\n \"book_id\":2346,\n \"customer_id\": 12456\n}\n```\n\nOs testes podem ser feitos diretamente pelo API Gateway que possui uma interface de testes ou usando curl diretamente do console do Cloud9.\n\nCaso decida fazer os testes usando o curl o endereço das APIs podem ser capturados logo após executar o comando `sls deploy`.\n\n![resultado-serveless](./imgs/resultado-serveless.PNG)\n\n### Request válida\n\nQuando enviamos uma request válida, a api retorna 200 e um arquivo será criado no bucket. Ex:\n\n![teste-api-gateway](./imgs/teste-api-gateway.PNG)\n\n![teste-api-gateway-email](./imgs/teste-api-gateway-email.PNG)\n\n![teste-api-gateway-book-create](./imgs/teste-api-gateway-book-create.PNG)\n\n![teste-api-gateway-sell-book](./imgs/teste-api-gateway-sell-book.PNG)\n\n![objetos-criados-no-bucket-s3](./imgs/objetos-criados-no-bucket-s3.PNG)\n\n---\n\n### Request Inválida\n\nQuando a request é inválida um erro 400 é retornado e no log é exibido o atributo que está errado\n\n![teste-api-gateway-book-create-erro](./imgs/teste-api-gateway-book-create-erro.PNG)\n![teste-api-gateway-book-create-erro-log](./imgs/teste-api-gateway-book-create-erro-log.PNG)\n\n![teste-api-gateway-sell-book-erro](./imgs/teste-api-gateway-sell-book-erro.PNG)\n![teste-api-gateway-sell-book-erro-log](./imgs/teste-api-gateway-sell-book-erro-log.PNG)\n\n---\n---\n## Destruir projeto\n\n18. Serveless down\n\n```bash\ncd ~/environment/aws-architecture/serveless/\nsls remove --force\n```\n\n19. Terraform down\n\n```bash\ncd ~/environment/aws-architecture/terraform/\nterraform destroy --force\n```\n\n20. Terraform state down\n\n```bash\ncd ~/environment/aws-architecture/terraform/S3\nterraform destroy --force\n```\n---\n---\n\n## Links úteis\n\n- https://github.com/serverless/examples\n- https://github.com/vamperst/Hackaton-exercises-terraform\n- https://github.com/vamperst/Hackaton-exercises-serverless\n- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue\n- https://registry.terraform.io/modules/damacus/sqs-with-dlq/aws/latest\n- https://www.serverless.com/framework/docs/providers/aws/events/apigateway/\n- https://www.serverless.com/blog/aws-lambda-sqs-serverless-integration\n- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic_subscription\n- https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sns_topic\n- https://christiangiacomi.com/posts/terraform-sns-sqs-lambda/\n- https://github.com/vamperst/desbravando-erros-e-falhas-em-territorio-serverless-demo\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarciojg%2Faws-architecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarciojg%2Faws-architecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarciojg%2Faws-architecture/lists"}