{"id":17601031,"url":"https://github.com/ingriidssantoss/projeto_devops","last_synced_at":"2026-01-27T19:48:32.915Z","repository":{"id":258849870,"uuid":"875094621","full_name":"ingriidssantoss/Projeto_DevOps","owner":"ingriidssantoss","description":"Projeto de automação de infraestrutura com Terraform, configurando uma instância EC2 na AWS com Nginx. Inclui provisionamento automatizado de rede, segurança e personalização do servidor web como parte de um desafio de DevOps.","archived":false,"fork":false,"pushed_at":"2024-10-20T21:00:32.000Z","size":193,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T05:33:49.642Z","etag":null,"topics":["automacao","aws","cloud","devops","ec2","iac","infraestrutura","nginx","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/ingriidssantoss.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":"2024-10-19T04:54:36.000Z","updated_at":"2024-11-17T10:56:31.000Z","dependencies_parsed_at":"2024-10-23T05:09:21.554Z","dependency_job_id":null,"html_url":"https://github.com/ingriidssantoss/Projeto_DevOps","commit_stats":null,"previous_names":["ingriidssantoss/projeto_devops"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ingriidssantoss%2FProjeto_DevOps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ingriidssantoss%2FProjeto_DevOps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ingriidssantoss%2FProjeto_DevOps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ingriidssantoss%2FProjeto_DevOps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ingriidssantoss","download_url":"https://codeload.github.com/ingriidssantoss/Projeto_DevOps/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248728633,"owners_count":21152260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["automacao","aws","cloud","devops","ec2","iac","infraestrutura","nginx","terraform"],"created_at":"2024-10-22T12:08:04.176Z","updated_at":"2026-01-27T19:48:32.883Z","avatar_url":"https://github.com/ingriidssantoss.png","language":"HCL","readme":"## Análise Técnica do Código Terraform\n\n### ○ Leitura do Arquivo\nPrimeiro, estudei o arquivo `main.tf` fornecido. O código original tinha como objetivo provisionar uma infraestrutura básica na AWS usando o Terraform, criando recursos essenciais para configurar um ambiente seguro e funcional.\n\n### ○ Descrição Técnica\nO código `main.tf` realiza as seguintes operações:\n\n- **Provider AWS**: Define a região onde os recursos serão provisionados (`us-east-1`).\n- **Variáveis**: Contém variáveis para o nome do projeto e do candidato, permitindo personalizar os nomes dos recursos.\n- **TLS Private Key**: Gera uma chave privada para ser usada na criação de um par de chaves EC2, permitindo o acesso SSH à instância.\n- **VPC e Subnet**: Cria uma VPC (`10.0.0.0/16`) e uma Subnet (`10.0.1.0/24`) associada para isolar a rede.\n- **Internet Gateway e Route Table**: Configura um gateway de internet e associa uma tabela de rotas para permitir o tráfego externo.\n- **Security Group**: Permite o tráfego SSH e HTTP de qualquer origem.\n- **Instância EC2**: Cria uma instância EC2 utilizando uma AMI do Debian 12, do tipo `t2.micro`.\n- **Outputs**: Exibe a chave privada gerada e o endereço IP público da instância.\n\n### ○ Observações\n- A configuração de segurança permitia tráfego SSH e HTTP de qualquer origem, o que poderia ser melhorado para restringir o acesso.\n- A instalação do Nginx não era automatizada, exigindo configuração manual na instância após a criação.\n\n---\n\n## Modificação e Melhoria do Código Terraform\n\n### ○ Aplicação de Melhorias de Segurança\n- **Restrição de Acesso SSH**: Modifiquei o código do Security Group para permitir tráfego SSH apenas do meu IP público específico, restringindo o acesso à instância.\n  ```hcl\n  ingress {\n    description = \"Allow SSH from my IP\"\n    from_port   = 22\n    to_port     = 22\n    protocol    = \"tcp\"\n    cidr_blocks = [\"191.57.168.63/32\"]\n  }\n\n![Modificação do Security Group](imagens/security-group-settings.png)\n\n\n### ○ Pré-requisitos\nPara executar este projeto, eu precisei garantir que alguns pré-requisitos estivessem atendidos:\n1. **Terraform**: Certifiquei-me de que o Terraform estava instalado em minha máquina local.\n2. **AWS CLI**: Configurei o AWS CLI com as credenciais da minha conta AWS.\n3. **Chave de Acesso e Secreta da AWS**: Utilizei uma chave de acesso (`Access Key ID`) e uma chave secreta (`Secret Access Key`) para configurar o AWS CLI.\n\n### ○ Configuração do Ambiente\n\n1. **Configuração do AWS CLI**:\n   - No terminal, eu executei o seguinte comando para configurar o AWS CLI:\n     ```bash\n     aws configure\n     ```\n   - Inserindo as informações solicitadas:\n     - **AWS Access Key ID**: Minha chave de acesso.\n     - **AWS Secret Access Key**: Minha chave secreta.\n     - **Default region name**: `us-east-1`\n     - **Default output format**: `json`\n\n     ### ○ Inicializando o Terraform\n\n1. **Inicialização do Terraform**:\n   - No diretório do projeto, inicializei o Terraform com o comando:\n     ```bash\n     terraform init\n     ```\n   - Esse comando baixou os plugins necessários e configurou o ambiente para o uso do Terraform.\n\n2. **Revisão do Plano de Execução**:\n   - Para verificar o plano de execução e os recursos que seriam criados, usei:\n     ```bash\n     terraform plan\n     ```\n   - Analisei a saída para confirmar que todos os recursos estavam corretos antes de prosseguir.\n\n3. **Aplicação da Configuração do Terraform**:\n   - Para provisionar a infraestrutura, apliquei o plano com:\n     ```bash\n     terraform apply\n     ```\n   - Quando solicitado, confirmei a execução digitando \"yes\". Isso criou os recursos especificados no arquivo `main.tf`, incluindo VPC, Subnet, Security Group, Key Pair e a instância EC2 com o Nginx instalado.\n\n   ![Resultado concluído do Apply](imagens/terraform-apply-output.png)\n\n### ○ Acesso à Instância EC2\n\n1. **Obtenção do Endereço IP Público**:\n   - Depois de executar o `terraform apply`, o Terraform exibiu o endereço IP público da instância EC2. Anotei esse IP para poder acessar a instância.\n\n2. **Conexão à Instância EC2 via SSH**:\n   - Para me conectar à instância via SSH, utilizei o seguinte comando, substituindo `\u003cEC2_PUBLIC_IP\u003e` pelo IP público da minha instância:\n     ```bash\n     ssh -i my-key.pem admin@\u003cEC2_PUBLIC_IP\u003e\n     ```\n    ![Resumo da Instância EC2](imagens/ec2-instance-summary.png)\n\n3. **Verificação do Status do Nginx**:\n   - Após a conexão, verifiquei se o Nginx estava ativo e em execução com:\n     ```bash\n     sudo systemctl status nginx\n     ```\n   - Caso não estivesse rodando, usei o comando para iniciá-lo:\n     ```bash\n     sudo systemctl start nginx\n     ```\n\n### ○ Acessando o Nginx pelo Navegador\n\n1. **Acesso à Página Personalizada**:\n   - Abri um navegador web e digitei o IP público da instância EC2 na barra de endereços:\n     ```\n     http://3.89.100.77/\n     ```\n   - Isso carregou a página personalizada do Nginx, que eu configurei para exibir as informações do desafio.\n\n   ![Resultado da Página Personalizada do Nginx](imagens/nginx-welcome.png)\n\n## Conclusão\n\nNeste desafio de DevOps para a VExpenses, consegui provisionar uma infraestrutura automatizada na AWS usando Terraform, com o objetivo de configurar um ambiente seguro e funcional. Durante o processo, realizei as seguintes atividades:\n\n1. **Análise e melhorias no código Terraform original**: Adicionei melhorias de segurança, como a restrição de acesso SSH para um endereço IP específico, e automatizei a instalação do Nginx usando um script `user_data`, garantindo que o servidor estivesse disponível assim que a instância EC2 fosse provisionada.\n\n2. **Automatização de processos**: O uso do `user_data` para configurar o Nginx automaticamente eliminou a necessidade de configurações manuais pós-criação, reduzindo a margem para erros. A personalização da página inicial do Nginx foi feita para fornecer uma mensagem específica para o desafio, destacando as tecnologias utilizadas e detalhes do projeto.\n\n3. **Configuração de segurança**: A política de segurança foi aprimorada ao restringir o tráfego SSH e garantir que o acesso fosse feito apenas por fontes autorizadas.\n\n4. **Entrega final**: Com a instância EC2 em execução e o Nginx configurado, o projeto foi concluído com sucesso. A página personalizada está disponível para acesso, confirmando que os recursos foram provisionados e configurados corretamente.\n\n## Disponibilidade dos Arquivos\n\nOs arquivos do projeto estão disponíveis no repositório GitHub. Eles incluem:\n\n- `main.tf`: O arquivo Terraform que define toda a infraestrutura, com as melhorias de segurança e automação implementadas.\n- `index.nginx-debian.html`: O arquivo HTML personalizado que foi configurado na instância EC2 para exibir a mensagem do desafio.\n\n## Autor \n\nEsse projeto foi desenvolvido por Ingrid Lauanne Leite dos Santos.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fingriidssantoss%2Fprojeto_devops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fingriidssantoss%2Fprojeto_devops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fingriidssantoss%2Fprojeto_devops/lists"}