¿Cómo puedo usar 2 proveedores en la misma configuración de Terraform?
Mi archivo main.tf comienza con
terraform {
required_version = ">= 0.13.7"
required_providers {
aws = {
source = "hashicorp/aws"
version = "= 2.32.0"
}
foobar = {
source = "terraform.foo.com/foo/bar"
}
}
}
El detalle aquí es que foo/bar
es el módulo que estoy desarrollando localmente, por lo que también tengo este archivo terraformrc:
provider "installation" {
dev_overrides {
"terraform.foo.com/foo/bar" = "/Users/appuser/foobar/bin/darwin-amd64"
}
}
Aquí están los errores que encuentro al ejecutar ✗ terraform init
:
Initializing the backend...
Initializing provider plugins...
- Encontrando versiones de hashicorp/aws compatibles con "2.32.0"...
- Encontrando la última versión de terraform.foo.com/foo/bar...
Advertencia: Las sustituciones de desarrollo del proveedor están en efecto
Las siguientes sustituciones de desarrollo del proveedor están configuradas en la configuración del CLI:
- "terraform.foo.com/foo/bar" = "/Users/appuser/foobar/bin/darwin-amd64"
Error: No se pudo consultar los paquetes de proveedor disponibles
No se pudo recuperar la lista de versiones disponibles para el proveedor hashicorp/aws:
ninguna versión disponible coincide con las restricciones dadas 2.32.0
Error: No se pudo consultar los paquetes de proveedor disponibles
No se pudo recuperar la lista de versiones disponibles para el proveedor "terraform.foo.com/foo/bar":
ninguna versión disponible coincide con las restricciones dadas
Actualización: cuando elimino terraformrc parece funcionar, pero no puedo cargar el segundo proveedor de esta forma (ya que depende de la anulación):
terraform init
Initializing the backend…
Initializing provider plugins…
– Encontrando versiones de hashicorp/aws compatibles con “2.32.0”…
– Encontrando la última versión de hashicorp/foo/bar…
– Instalando hashicorp/aws v2.32.0…
– Instalado hashicorp/aws v2.32.0 (autofirmado, ID de clave 34365D9472D7468F)
Los proveedores de socios y de la comunidad están firmados por sus desarrolladores.
Si desea obtener más información sobre la firma de proveedores, puede leer al respecto aquí:
https://www.terraform.io/docs/plugins/signing.html
Error: No se pudo consultar los paquetes de proveedor disponibles
No se pudo recuperar la lista de versiones disponibles para el proveedor hashicorp/foo/bar:
el registro del proveedor registry.terraform.io no tiene un proveedor llamado registry.terraform.io/hashicorp/foo/bar
“`
davy.ai
Descripción del problema
El archivo
main.tf
de un proyecto Terraform utiliza dos proveedores:hashicorp/aws
y el móduloterraform.foo.com/foo/bar
, el cual está siendo desarrollado localmente.También hay un archivo
terraformrc
que incluye una anulación de proveedor para el móduloterraform.foo.com/foo/bar
, apuntando hacia un binario ubicado en/Users/appuser/foobar/bin/darwin-amd64
.Al ejecutar
terraform init
, se encuentran los siguientes errores:– El proveedor
hashicorp/aws
no encuentra una versión que coincida con2.32.0
.– El módulo
terraform.foo.com/foo/bar
no encuentra ninguna versión disponible.Al eliminar el archivo
terraformrc
, el proveedorhashicorp/aws
se instala correctamente, pero no se puede cargar el móduloterraform.foo.com/foo/bar
debido a la ausencia de la anulación de proveedor.Solución
El primer mensaje de error indica que Terraform no pudo encontrar una versión del proveedor
hashicorp/aws
que coincida con la versión2.32.0
especificada en el archivomain.tf
.Por lo tanto, es necesario publicar la versión
2.32.0
del proveedorhashicorp/aws
o especificar una versión diferente enmain.tf
.El segundo mensaje de error indica que el módulo
terraform.foo.com/foo/bar
especificado enmain.tf
no tiene versiones disponibles. Esto podría ser porque se está desarrollando localmente y aún no se ha publicado.Sin embargo, el archivo
terraformrc
incluye una anulación de proveedor para ese módulo, especificando la ubicación del archivo binario.Por lo tanto, es necesario mantener el archivo
terraformrc
, pero modificarlo para que apunte a un proveedor válido. El binario del proveedor debe ser construido y publicado, y luego se debe especificar la URL y la versión del proveedor en el archivoterraformrc
.Finalmente, ejecutar
terraform init
con ambos proveedores especificados enmain.tf
debería instalar ambos proveedores exitosamente.Solución actualizada
Después de una investigación adicional, resulta que el módulo
terraform.foo.com/foo/bar
no es un módulo, sino un proveedor. El mensaje de errorno se encontraron versiones disponibles que cumplan las restricciones especificadas
para ese proveedor indica que no está disponible en el Registro público de Terraform.Por lo tanto, es necesario construir y publicar manualmente el proveedor en un Registro privado, y especificar la URL y la versión del proveedor en el archivo
terraformrc
.Además, el proveedor
hashicorp/foo/bar
especificado enmain.tf
no es un nombre de proveedor válido. Es necesario actualizarlo al nombre de proveedor correcto, o eliminarlo si no es necesario.Una vez que se publique el proveedor y se actualice el nombre en
main.tf
, al ejecutarterraform init
con el archivoterraformrc
, se instalarán ambos proveedores correctamente.