1
resposta

porque value = aws_instance.app_server.public_ip nos 2 main se só aparece em um

Boa noite, queria entender o sentido ou necessidade de ter value = aws_instance.app_server.public_ip no main.tf de infra se depois, como vai executar a partir do DEV, acaba criando um módulo?

Porque não cria value = aws_instance.app_server.public_ip só por onde vair rodar?

se o resultado é só o IP da infra, porque fazer nos dois?

1 resposta

Olá, Bruno.

Tudo bem?

A ideia de ter essa configuração tanto no main de infra quanto no main do DEV é para facilitar o acesso ao IP público da instância em diferentes contextos. Vou explicar com mais detalhes:

  1. main.tf da Infraestrutura:

    • Aqui, você está configurando a infraestrutura base. O output com value = aws_instance.app_server.public_ip serve para expor o IP público da instância que está sendo criada. Isso é útil para verificar rapidamente o IP da instância diretamente após a criação.
  2. main.tf do DEV:

    • Quando você executa a partir do contexto de desenvolvimento (DEV), você está, na verdade, utilizando um módulo que referencia a infraestrutura base. Nesse main.tf, você cria um output que referencia o output do módulo de infraestrutura (value = module.aws-dev.IP_publico). Isso permite que você acesse o IP da instância diretamente no contexto do DEV sem precisar navegar até a infraestrutura base.

Exemplificando:

  • main.tf da Infraestrutura:

    output "IP_publico" {
      value = aws_instance.app_server.public_ip
    }
    
  • main.tf do DEV:

    module "aws-dev" {
      source = "../infra"
      # outras configurações do módulo
    }
    
    output "IP" {
      value = module.aws-dev.IP_publico
    }
    

Por que fazer isso?

  1. Facilidade de Acesso: Ao ter o output no contexto do DEV, você pode facilmente acessar o IP sem precisar ir até a configuração de infraestrutura base. Isso é especialmente útil em ambientes com múltiplas camadas ou módulos.

  2. Modularidade: Mantendo os outputs em ambos os lugares, você mantém a modularidade e a separação de responsabilidades. A infraestrutura base cuida da criação dos recursos, enquanto o DEV cuida da configuração e uso desses recursos.

Espero ter ajudado e bons estudos!