Como resolver um "Failed to Download Module" do Terraform / OpenTofu
Tags: terraform, opentofu, infraascode
Published: 2024-05-18 00:40:17

## Do nada as coisas quebram 

Eu rodo quase que diariamente o meu projeto principal de infra da empresa e tudo funciona super bem. 

Eis que um belo dia... talvez não a toa... numa sexta feita no final do expediente um módulo simplesmente deixa de responder e apresenta o erro `Error: Failed to download module`. 

Provavelmente você tá muito identificado nesse momento. Aposto que isso já aconteceu com você em algum momento. Nem precisa ser com Terraform. 

Pois é. Aconteceu comigo. Do nada, ao rodar o meu `tofu init`, meu módulo do Aurora parou de responder 

```
Initializing the backend...
Initializing modules...
Downloading registry.opentofu.org/terraform-aws-modules/rds-aurora/aws 9.3.1 for global.aurora.xxx_rds_aurora...
╷
│ Error: Failed to download module
│
│   on global/aurora/aurora.tf line 1:
│    1: module "xxx_rds_aurora" {
│
│ Could not download module "xxx_rds_aurora" (global/aurora/aurora.tf:1) source code from "git::https://github.com/terraform-aws-modules/terraform-aws-rds-aurora?ref=v9.3.1": error downloading
│ 'https://github.com/terraform-aws-modules/terraform-aws-rds-aurora?ref=v9.3.1': /opt/homebrew/bin/git exited with 128: Cloning into '.terraform/modules/global.aurora.xxx_rds_aurora'...
│ ssh: Could not resolve hostname github.comterraform-aws-modules: nodename nor servname provided, or not known
│ fatal: Could not read from remote repository.
│
│ Please make sure you have the correct access rights
│ and the repository exists.
│ .
```


## Investigação

### Obvio que a AI não me ajudou 

E agora o que fazer? 

No Novo Mundo das AIs a primeira reação é perguntar pro ChatGPT. Foi o que eu fiz. Eu nem li o erro direito. 

E é óbvio que ele me deu uma pá de soluções que nem fazia sentido. 

### Por que eu não li o erro desde o começo? 

Fiz os checks básicos:
- Leu o erro? Agora sim!
- O modulo ainda existe? Sim!
- A versão existe? Sim! 
- Eu mudei alguma coisa? Não!
- Alguém mudou alguma coisa? Não! 

Então por que diabos ele não tá achando? 

O erro fala sobre download... e tava mais obvio do que eu poderia imaginar 

```
Could not download module "xxx_rds_aurora" (global/aurora/aurora.tf:1) source code 
from "git::https://github.com/terraform-aws-modules/terraform-aws-rds-aurora?ref=v9.3.1": error downloading
```

Foi quando eu me dei conta: ele está tentando baixar o módulo via `https` só que meu git está configurado pra baixar via `ssh`. Obvio que vai dar ruim. 

A partir daqui vai o checklist seguinte: 

- Meu `~/.gitconfig` está configurado corretamente? Sim!

```
[url "ssh://git@github.com/"]
    insteadOf = https://github.com/
```

A configuração de usar o ssh em vez do https está ativa. 

Bom. Só sobrou a nível de Terraform e OpenTofu. 

E realmente era o que faltava. 

## Solução 

Não sei exatamente o motivo disso ter mudado do nada. Eu realmente não fiz nenhum tipo de alteração no meu ambiente de trabalho. 

Mas a solução é simples. Se você ainda não tem um arquivo `~/.terraformrc` ou `~/.opentofurc` crie... e adicione um `provider mirror`. 

```
provider_installation {
  network_mirror {
    url = "ssh://git@github.com/"
    match = "github.com"
  }
}
```

Isso vai evitar que você não consiga baixar os módulos por causa do seu Github. 

E, crianças... leiam os erros e as documentações. Isso vai ser um diferencial em relação a carreira de vocês.