App
Criando a Infraestrutura utilizando IaC¶
O Terraform conta com arquivos .tf, que definem a infraestrutura.
O Terraform sabe o que é implantado por meio do arquivo de estado. Este estado é armazenado por padrão em um arquivo local chamado “terraform.tfstate”. Também pode ser armazenado remotamente, o que funciona melhor em um ambiente de equipe.
O Terraform permite vários provedores, normalmente inicializados em um arquivo chamado provider.tf.
A estrutura de pastas ficará conforme figura abaixo:
-
Cada Aluno deve entrar no MAIN pela sua maquina e criar a estrutura
-
Crie umapasta para você com o mesmo nome do projeto criado na etapa acima:
-
Dentro desta pasta crie a pasta terraform e dentro dela crie os arquivos abaixo: (modifique o que for necessário)
provider.tf
# Terraform Openstack deployment
# Author: Tiago Demay - tiagoaodc@insper.edu.br
# Define required providers
terraform {
required_version = ">= 0.14.0"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.35.0"
}
}
}
# Configure the OpenStack Provider
provider "openstack" {
region = "RegionOne"
user_name = "SEU_USUARIO"
}
instance1.tf
resource "openstack_compute_instance_v2" "instancia" {
name = "basic"
image_name = "bionic-amd64"
flavor_name = "m1.small"
key_pair = "mykey"
security_groups = ["default"]
network {
name = "network_1"
}
depends_on = [openstack_networking_network_v2.network_1]
}
instance2.tf
resource "openstack_compute_instance_v2" "instancia" {
name = "basic2"
image_name = "jammy-amd64"
flavor_name = "m1.tiny"
key_pair = "mykey"
security_groups = ["default"]
network {
name = "network_1"
}
depends_on = [openstack_networking_network_v2.network_1]
}
Info
observação amiga: a sua rede e do seu amigo não podem ter o mesmo nome! Então uma delas pode ser chamada de network_1 e outra network_2 por exemplo! (lembre de mudar em todos arquivos que a utilizam).
network.tf
resource "openstack_networking_network_v2" "network_1" {
name = "network_1"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
network_id = "${openstack_networking_network_v2.network_1.id}"
cidr = "192.167.199.0/24"
}
Info
Alterar a variavel external_network_id = <"ID_EXT_NETWORK"> para o ID da sua rede externa, você pode encontrar esta informacão, acessando o Dashboard do Openstack ou via CLI openstack
router.tf
resource "openstack_networking_router_v2" "router_1" {
name = "my_router"
admin_state_up = true
external_network_id = <"ID_EXT_NETWORK">
}
resource "openstack_networking_router_interface_v2" "int_1" {
router_id = "${openstack_networking_router_v2.router_1.id}"
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
}
Credenciais do seu usuário¶
- Entre no dashboard com o login do seu usuario (cada aluno terá o seu);
- Na aba project → API access, faça o download do openstack rc file do seu usuário;
- Copie o conteudo para a sua pasta de projeto (Obs: o arquivo será baixado noseu notebook pessoal, passe o conteudo para o servidor Main)
- De a permissão de execução para o arquivo
chmod +x arquivo.sh
- Carregue as variaveis de ambiente do seu usuário
source arquivo.sh
Dica
Caso aconteça o erro abaixo:
Attempting to parse version from URL.
SSL exception connecting to https://172.16.0.x:5000/v3/auth/tokens: HTTPSConnectionPool(host='172.16.0.x', port=5000):
Max retries exceeded with url: /v3/auth/tokens (Caused by SSLError(SSLCertVerificationError
(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)')))
O erro que você está enfrentando está relacionado à verificação do certificado SSL ao tentar se conectar ao endpoint do OpenStack. O erro [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate sugere que o cliente (neste caso, possivelmente um cliente OpenStack CLI, uma SDK ou um script personalizado que usa a API OpenStack) não conseguiu verificar o certificado SSL do servidor devido à ausência do certificado da autoridade certificadora (CA) correspondente no armazenamento local de certificados confiáveis.
Aqui estão algumas maneiras de contornar ou resolver esse problema, basta utilizar uma delas:
- Colocar suas credenciais depois das credenciais do admin, isso modifica somente o necessário nas ENVs do ambiente
- Desabilitar a Verificação de SSL (Não Recomendado para Produção)
export OS_VERIFY=False
ou dar o comando com a flag --insecure
- Indicar o caminho correto do certificado
export OS_CACERT=/caminho/para/o/certificado.pem
Para fazer a implementação da infraestrutura, execute os comandos abaixo:
terraform plan
- Este comando é utilizado para criar um plano de execução. Ele mostra quais ações o Terraform executará quando você aplicar suas configurações.
terraform apply
- O comando
terraform apply
aplica as mudanças necessárias para alcançar o estado desejado da sua configuração. Ele cria, atualiza ou destrói os recursos conforme necessário.
Utlize a CLI do openstack para verificar que a instancia foi criada.
Exercise
CheckPoint-Por_aluno
- De um print das Telas abaixo:
- Da aba Identy projects no OpenStack.
- Da aba Identy users no OpenStack.
- Da aba compute overview no OpenStack.
- Da aba compute instances no OpenStack.
- Da aba network topology no OpenStack.
Criando um plano de Disaster Recovery e SLA (QUESTOES)¶
Deve ser no MkDocs, seção específica!!!¶
Exercise
QUESTÕES
- Você é o CTO (Chief Technology Officer) de uma grande empresa com sede em várias capitais no Brasil e precisa implantar um sistema crítico, de baixo custo e com dados sigilosos para a área operacional.
- Você escolheria Public Cloud ou Private Cloud?
- Agora explique para ao RH por que você precisa de um time de DevOps.
- Considerando o mesmo sistema crítico, agora sua equipe deverá planejar e implementar um ambiente resiliente e capaz de mitigar possíveis interrupções/indisponibilidades. Para isso, identifiquem quais são as principais ameaças que podem colocar sua infraestrutura em risco, e descreva as principais ações que possibilitem o restabelecimento de todas as aplicações de forma rápida e organizada caso algum evento cause uma interrupção ou incidente de segurança. Para isso monte um plano de DR e HA que considere entre as ações:
- Mapeamento das principais ameaças que podem colocar em riscos o seu ambiente.
- Elenque e priorize as ações para a recuperação de seu ambiente em uma possível interrupção/desastre.
- Como sua equipe irá tratar a política de backup?
- Considerando possíveis instabilidades e problemas, descreva como alta disponibilidade será implementada em sua infraestrutura.