Aller au contenu
Cloud medium

Terraform contre feint : Scaleway, Outscale et le refus Exoscale

8 min de lecture

Terraform et OpenTofu s'appliquent contre feint sans compte cloud, sur deux des trois fournisseurs émulés. Vous changez une ligne de configuration, le reste est le code que vous déploierez en production, et un cycle apply puis destroy complet passe sans créer la moindre ressource facturée. Cette page donne les blocs provider exacts pour Scaleway et Outscale, explique pourquoi le provider Exoscale est refusé, et traite le cas du volume racine qui a longtemps bloqué les configurations Scaleway.

  • Détourner le provider Scaleway avec un seul réglage, api_url.
  • Piloter Outscale avec son bloc api, dont le chemin complet est un piège.
  • Comprendre le refus du provider Exoscale, et ce qu'il protège.
  • Écrire un root_volume que le provider accepte enfin.

Deux des trois fournisseurs se pilotent par Terraform contre l'émulateur : Scaleway et Outscale. Le troisième, Exoscale, est refusé volontairement, et la raison vaut d'être lue avant de chercher à contourner le garde-fou. Chaque cas est traité ci-dessous.

Le provider Scaleway se détourne avec un seul réglage, api_url. Le reste de la configuration reste celle que vous écririez pour le vrai fournisseur, ce qui est tout l'intérêt : vous testez le code que vous déploierez.

terraform {
required_providers {
scaleway = {
source = "scaleway/scaleway"
version = "~> 2.79"
}
}
}
provider "scaleway" {
access_key = "SCWXXXXXXXXXXXXXXXXX"
secret_key = "11111111-1111-1111-1111-111111111111"
project_id = "11111111-1111-1111-1111-111111111111"
organization_id = "99999999-9999-4999-8999-999999999999"
region = "fr-par"
zone = "fr-par-1"
api_url = "http://127.0.0.1:4599"
}
resource "scaleway_vpc" "lab" {
name = "lab-feint"
}
resource "scaleway_vpc_private_network" "lab" {
name = "reseau-interne"
vpc_id = scaleway_vpc.lab.id
}
resource "scaleway_instance_server" "web" {
name = "web-terraform"
type = "DEV1-S"
image = "ubuntu_jammy"
}

L'application se déroule sans adaptation particulière :

Fenêtre de terminal
terraform init
terraform apply -auto-approve
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Outputs:
private_network_id = "fr-par/a0fa6f82-2aad-4f82-985a-2abeb65f05f7"
server_id = "fr-par-1/d2303f04-8ab3-4e71-a682-ad91c81286b7"

Les identifiants renvoyés portent le préfixe de région ou de zone, comme chez Scaleway. Un terraform destroy fonctionne symétriquement, ce qui permet de valider un cycle complet dans une CI sans créer la moindre ressource facturée. Pour la construction des configurations elles-mêmes, la section Terraform du site couvre le sujet en profondeur.

Le provider officiel outscale/outscale pilote l'émulateur de bout en bout, avec un bloc api au lieu de l'argument api_url de Scaleway. La différence de forme compte : ici l'adresse porte le chemin complet de l'API, segment de version inclus.

terraform {
required_providers {
outscale = {
source = "outscale/outscale"
version = "~> 1.7"
}
}
}
provider "outscale" {
access_key_id = "AAAAAAAAAAAAAAAAAAAA"
secret_key_id = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
api {
endpoint = "http://127.0.0.1:4599/api/v1"
region = "eu-west-2"
}
}
resource "outscale_net" "lab" {
ip_range = "10.70.0.0/16"
tags {
key = "name"
value = "lab-feint"
}
}
resource "outscale_subnet" "lab" {
net_id = outscale_net.lab.net_id
ip_range = "10.70.1.0/24"
}
resource "outscale_vm" "web" {
image_id = "ami-12345678"
vm_type = "tinav4.c2r2p1"
subnet_id = outscale_subnet.lab.subnet_id
}

Le cycle complet passe, y compris le second plan vide qui est le vrai révélateur d'une émulation correcte : si l'API renvoie ses ressources autrement qu'elle ne les a acceptées, Terraform propose une modification fantôme à chaque exécution.

outscale_net.lab: Creation complete after 0s [id=vpc-4e93695a]
outscale_subnet.lab: Creation complete after 1s [id=subnet-348a9987]
outscale_vm.web: Creation complete after 0s [id=i-ef8f6fe1]
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
No changes. Your infrastructure matches the configuration.

Pourquoi le provider Terraform Exoscale est refusé

Section intitulée « Pourquoi le provider Terraform Exoscale est refusé »

feint refuse les appels du provider Terraform Exoscale, et répond 400 avec l'explication. Ce n'est pas une lacune, c'est une protection de votre facture.

{"message":"the Exoscale Terraform provider only honours EXOSCALE_API_ENDPOINT
for half of its calls: the rest reach the real cloud and create billable
resources. feint refuses rather than serve half an apply. Set
FEINT_EXOSCALE_ALLOW_TERRAFORM=1 if you understand that and want the half it can
serve. See docs/limits.md."}

La cause est mesurée : ce provider n'honore le point d'accès que pour une partie de ses appels, et les autres partent vers le vrai cloud avec les identifiants trouvés dans l'environnement. Un apply se retrouverait donc partagé entre l'émulateur et un compte payant, et un demi-succès est indiscernable d'un fonctionnement normal jusqu'à la facture. Refuser tôt et bruyamment est le seul comportement honnête.

L'échappatoire existe, nommée plutôt que cachée, pour qui accepte ce partage en connaissance de cause :

Fenêtre de terminal
FEINT_EXOSCALE_ALLOW_TERRAFORM=1 feint serve

Le CLI exo n'est pas concerné : la détection porte sur le seul agent utilisateur Exoscale-Terraform-Provider, donc elle refuse un client, pas un fournisseur.

  • Scaleway se détourne avec api_url, Outscale avec un bloc api dont le chemin porte /api/v1.
  • Le second plan vide est le vrai test : sans lui, l'émulation renvoie ses ressources autrement qu'elle ne les accepte.
  • Le provider Exoscale est refusé en 400 : il partagerait l'apply entre l'émulateur et un compte facturé.
  • root_volume accepte sbs_volume depuis la 0.8.0, ce qui débloque les configurations qui le déclarent.
  • Un cycle complet ne coûte rien : apply, plan vide, destroy, sans ressource facturée.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn