Um Projeto para facilitar a infraestrutura das disciplinas, Engenharia de Computação!!!
Acesse o Site da Faculdade
View Github Insper
·
Report Bug
·
Este projeto está sendo desenvolvido com a intenção de facilitar a criação da infraestrutura de Nuvem das disciplinas de Supercomputação e Computação em Nuvem da Faculdade Insper, para o curso de Engenharia de Computação.
Porque utilizar Terraform:
- O Terraform é uma ferramenta para criar, alterar e criar versões de infraestrutura.
- Os arquivos de configuração descrevem para Terraform os componentes necessários para executar um único aplicativo ou todo o seu datacenter que no nosso foco inicial é a AWS, mas como estamos construindo uma Cloud interna utilizando as tecnologias da VMware com o ESXi, poderemos utilizar mais para frente este mesmo projeto, alterando o provedor e as suas espeficidades.
- Como o Terraform gera um plano de execução descrevendo o que fará para atingir o estado desejado e, em seguida, executa-o para construir a infraestrutura descrita, podemos padronizar o ambiente de cada aluno e conforme a configuração muda, o Terraform pode determina o que mudou e com comandos básicos criamos planos de execução incrementais que podem ser aplicados.
- Também como projeto futuro temos a intenção de utilizar a feramenta Ansible para provisionamento, gerenciamento de configuração e implantação de aplicativos de software livre.
Como pré requisito instale o Docker em sua máquina seguindo as orientações na doc oficial, de acordo com seu Sistema Operacional.
No meu caso, instalei utilizando o comando curl:
- Docker no Linux Ubuntu 18.04
curl -SsfL https://get.docker.com | sh -
Como vamos utilizar o Docker e o Terraform é apenas um binário que já está instalado na imagem que criei, só precisamos dos seguintes passos
- Crie uma pasta para iniciar o projeto.
mkdir iaac_insper
cd iaac_insper/
- Clone este repositório
git clone https://github.com/TiagoDemay/Terraform_IaaC_AWS.git
- Rodar o script para baixar a imagem e executar o container
cd Terraform_IaaC_AWS/
sudo ./container_terraform.sh
- Com estes comando você já deve estar dentro do container na pasta "/app"
- Caso você saia do container e ele pare, terá que inicia-lo novamente para acessa-lo:
Este comando serve para pegar o ID do container
docker images
Estes dois te colocam no terminal do container novamente
docker container start >id_container>
docker container attach <id_container>
Lembre-se que a pasta que você iniciou o projeto está sendo compartilhada como o container,
Pelo bem ou pelo mal, apagar ou alterar qualquer arquivo na pasta no seu "host" irá alterar os arquivos dentro do container e vice e versa.
Este projeto está estruturado para ser utilizado com 2 planilhas, que são referenciadas no arquivo de variáveis com os nomes de: planilhaINST.csv e planilhaIAM.csv, como elas contem dados de informação sensível, não estão compartilhadas aqui. As imagens abaixo demonstram as configurações que elas devem seguir:
- planilhaINST.csv
- planilhaIAM.csv
Para fazer a utilização deste projeto você deve seguir as seguintes etapas:
- Criar um bucket s3 na AWS, aqui eu estou criando um backend em um bucket S3 para salvar o estado da infraestrutura, no arquivo terraform/main.tf
- Se prefirir ter tudo local, comente a linha 8 até a 14
- Se prefirir manter a mesma topologia coloque o nome do seu bucket na linha 11
- Este projeto foi feito na região "us-east-2", caso queira alterar esta configuração deve ser feita neste mesmo arquivo.
- Para os comandos abaixos você deve estar dentro do cointainer e passar as credenciais da sua conta na AWS
/app/terraform # export AWS_ACCESS_KEY_ID="AKXXXXXXXXXXXXXXXXXX"
/app/terraform # export AWS_SECRET_ACCESS_KEY="5DXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
- Agora dentro da pasta terraform daremos o comando para iniciar o terraform e configurar nosso backend s3
/app/terraform # terraform init
sua resposta deve ser parecida com esta:
- Agora criaremos um plano no terraform, para analisar as mudanças que ele irá fazer a sua conta AWS.
- O nome do seu arquivo de saída pode ser qualquer um escolhido por você, para que fique didático eu escolhi o nome "plano"
/app/terraform # terraform plan -out plano
- Na saída do seu terminal estão todas as modificações que serão feitas na sua estrutura na região escolhida da AWS.
- Um detalhe muito legal do terraform é que aqui ele demonstra tudo que será adicionado, alterado ou destruido na sua insfraestrutura com um toque para facilitar a visualização:
- to add --- trás um simbolo de adição (+) em verde para demostrar o que será criado.
- to change --- trás um simbolo de til (~) em amarelo para demostrar mudança de estado do recurso criado.
- to destroy --- trás um simbolo de subtração (-) em vermelho para demonstrar o que será excluido da infraestrutura.
- Ainda neste passo é possivel "debugar" erros de programação e analisar respostas de recursos a serem criados, antes de subir a estrutura para a AWS, basta alterar os arquivos e recursos que desejar, salvar os documentos alterados e rodar o comando novamente, até ficar satisfeito com o PLANO de criação.
- Se for a primeira vez que roda o programa ele deve mostrar: Plan: 41 to add, 0 to change, 0 to destroy.
- Então depois de analisar se é isso mesmo que você deseja criar é só dar o comando:
/app/terraform # terraform apply "plano"
E simples assim sua infraestrutura será criada.
Na saída do seu terminal deverá aparecer outups:
- ARN_USER: onde tem o numero da conta onde o usuário user.user1 poderá acessar e o nome do usuário também aparece aqui.
- A lista de IPv4 publico que suas instancias adquiriram no momento da criação.
-
Para criar o acesso para o usuário, precisamos trabalhar com um tipo de criptografia assimétrica do tipo "gpg", à qual eu não conheço muito ainda. Durante minhas pesquisas e a criação desta imagem, eu consegui gerar uma chave criptográfica assimétrica utilizando esta tecnologia, logo nesta imagem já temos uma chave tipo "gpg" que é necessária para criar a segurança e conseguir gerar a senha de acesso ao console.
-
ATENÇÃO: só altere esta chave e as configurações do gpg no container, se você tiver conhecimento sobre o que está fazendo e saiba que estas alterações irão modificar alguns procedimentos aqui dos quais eu ainda não conseguiria ajudar.
- Segue a baixo os comandos para conseguir decriptografar a senha do usuário em um arquivo de texto.
terraform output password | base64 -d > test.txt
gpg --decrypt test.txt > file.txt
- A senha pedida para descriptografar o gpg é: "terraform"
- A senha de login do console, já descriptografada estará no arquivo criado file.txt
- A configuração dessa senha de login do usuário está no arquivo terraform/iam.tf, no recurso demonstrado abaixo:
resource "aws_iam_user_login_profile" "profile" {
user = aws_iam_user.user.name
pgp_key = var.pgp_key
password_reset_required = true
password_length = 10
}
See the open issues for a list of proposed features (and known issues).
Todo o tipo de contribuição, criticas e/ou ajudas, são muito bem vindas. Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Tiago Demay -
Project Link: https://github.com/TiagoDemay/Terraform_IaaC_AWS