2
respostas

Grupo de Segurança

Boa tarde

Consegui configurar o arquivo com o grupo de segurança, e o Terraform consegue configurar na AWS. Porém, não consigo que as instâncias que são criadas utilizem este grupo. Toda instância que sobe utiliza o Grupo de Segurança default.

Obrigado.

2 respostas

Oi, Guilherme. Tudo bem?

Poderia postar aqui o conteúdo dos seus arquivos terraform para sabermos como está feito no momento? Assim a gente consegue ajudar de forma mais assertiva.

Bom dia Vitor. Obrigado pela pronta resposta.

Consegui resolver o problema, inserindo o vpc_security_group_ids no aws_instance.

Porém, agora tenho outra questão :/

Quando inicio o playbook com Ansible, a task de instalação do Python3 e do virtualenv não finaliza. Entrando via ssh direto na máquina, eu atualizo com update/upgrad o apt e apt-get, mas quando tento instalar manualmente, os pacotes não são encontrados.

Segue abaixo meus códigos apenas no dev, pois do produção são os mesmos.

infra/variables.tf

# main.tf
variable "regiao_aws" {
  type = string
}

# instancia.tf
variable "ami_id" {
  type        = string
}

variable "instancia" {
  type = string
}

variable "chave" {
  type = string
}

variable "tamanho_volume" {
  type = number
}

variable "nome_maquina" {
  type = string
}

# grupo_segur.tf
variable "nome_grupo_seg" {
  type = string
}

variable "ipv4_ip" {
  type = string
}

variable "ipv6_ip" {
  type = string
}

infra/main.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.16"
    }
  }

  required_version = ">= 1.2.0"
}

provider "aws" {
  region  = var.regiao_aws
}

infra/instancia.tf

resource "aws_instance" "app_server" {
  ami           = var.ami_id
  instance_type = var.instancia
  key_name      = var.chave
  ebs_block_device {
    device_name = "/dev/sda1"
    volume_size = var.tamanho_volume
  }

  tags = {
    Name = var.nome_maquina
  }

  vpc_security_group_ids = [ aws_security_group.geral.id]

}

resource "aws_key_pair" "chaveSSH" {
  key_name   = var.chave
  public_key = file("${var.chave}.pub")
}

output "IP_publico" {
  value = aws_instance.app_server.public_ip
}

infra/host.yml

[terraform-ansible]
44.210.243.110

infra/grupo-segur.tf

resource "aws_security_group" "geral" {
  name = var.nome_grupo_seg
  description        = "Grupo de Seguranca"
  ingress{
    cidr_blocks      = [ var.ipv4_ip ]
    ipv6_cidr_blocks = [ var.ipv6_ip ]
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
  }
  egress{
    cidr_blocks      = [ var.ipv4_ip ]
    ipv6_cidr_blocks = [ var.ipv6_ip ]
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
  }
  tags = {
    Name = var.nome_grupo_seg
  }
}

env/dev/playbook.yml

- hosts: terraform-ansible
  tasks:
  - name: Instalando o Python3, virtual env
    apt:
      pkg:
      - python3
      - virtualenv
      update_cache: yes
    become: yes # executar como sudo

  - name: Instalando dependências com pip (Django e Django Rest)
    pip:
      virtualenv: /home/ubuntu/tcc/venv
      name: 
      - django
      - djangorestframework

  - name: Verificando se o projeto já existe
    stat:
      path: /home/ubuntu/tcc/setup_3/settings.py
    register: projeto

  - name: Iniciando o projeto Django
    shell: ". /home/ubuntu/tcc/venv/bin/activate; django-admin startproject setup_3 /home/ubuntu/tcc/"
    when: not projeto.stat.exists

  - name: Alterando hosting do settigns
    lineinfile:
      path: /home/ubuntu/tcc/setup_3/settings.py
      regexp: "ALLOWED_HOSTS"
      line: "ALLOWED_HOSTS = ['*']"
      backrefs: yes

env/dev/main.tf

module "aws-dev" {
  source = "../../infra"

  # main.tf
  regiao_aws     = "us-east-1"

  # instancia.tf
  ami_id         = "ami-08c40ec9ead489470"
  instancia      = "t2.micro"
  chave          = "iac-dev"
  tamanho_volume = 10
  nome_maquina   = "maq-dev"

  # grupo_segur.tf
  nome_grupo_seg = "grupo-seg-dev"
  ipv4_ip        = "0.0.0.0/0"
  ipv6_ip        = "::/0"
}
output "IP" {
  value = module.aws-dev.IP_publico
}

Obrigado.