Configurer Terraform et Yandex Cloud sur la machine locale pour se connecter au cloud

Terraform

En bref : sur Linux, on installe généralement Terraform, Yandex Cloud CLI (yc), on effectue une initialisation, puis on configure les identifiants (token IAM ou clé de compte de service) pour Terraform.

1. Terraform

Via le binaire officiel (universal) :

# Exemple pour amd64 ; remplacez la version et l'architecture si nécessaire
TERRAFORM_VERSION=1.9.8
wget "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip"
unzip "terraform_${TERRAFORM_VERSION}_linux_amd64.zip"
sudo mv terraform /usr/local/bin/
terraform version

Ou via un gestionnaire de paquets (si vous utilisez Ubuntu/Debian et que le dépôt HashiCorp est configuré — comme dans la documentation de votre distribution).

2. Yandex Cloud CLI (yc)

curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
exec -l $SHELL   # ou ouvrez un nouveau terminal
yc version

3. Profil et accès au cloud

Interactif (convenable en première utilisation) :

yc init

Vous aurez besoin de :

  • nom de profil (choisir default ou en créer un nouveau)
  • token OAuth (il vous donnera un lien pour l’obtenir)
  • nom du cloud (il vous proposera de le sélectionner — cela déterminera le compte à facturer)
  • nom du dossier (il vous proposera de le sélectionner)
  • zone de calcul par défaut (il vous proposera de créer une zone parmi ru-central1-a...k)

Ensuite, yc enregistrera le profil ; vérification :

yc config list
yc resource-manager cloud list
yc resource-manager folder list

4. Variables pour Terraform (fournisseur Yandex)

Le fournisseur lit les variables d’environnement standard. Il faut au minimum les identifiants et un moyen d’authentification.

Option A — via l’utilisateur (token IAM issu de yc) :

export YC_TOKEN=$(yc iam create-token)
export YC_CLOUD_ID="<votre-cloud-id>"
export YC_FOLDER_ID="<votre-folder-id>"

Le token IAM est temporaire ; pour une utilisation prolongée, il est plus pratique d’utiliser un compte de service.

Option B — via un compte de service (clé JSON) :

export YC_SERVICE_ACCOUNT_KEY_FILE="/absolute/path/to/key.json"
export YC_CLOUD_ID="<cloud-id>"
```export YC_FOLDER_ID=""<folder-id>

(Nom de la variable pour la clé de fichier dans le fournisseur — exactement celui-ci, voir la documentation du fournisseur Yandex.)

5. Dans le répertoire de configuration Terraform

cd /path/to/your/terraform/project
terraform init
terraform plan

Remarques pratiques :

  • YC_TOKEN=$(yc iam create-token) doit être régénéré périodiquement.
  • Pour les environnements CI et « toujours fonctionnel », on crée généralement un compte de service avec les rôles nécessaires sur le dossier/nuage et une clé statique au format JSON.
  • cloud_id et folder_id peuvent être obtenus à partir de la sortie de yc resource-manager cloud list / folder list ou de la console Yandex Cloud.

Bucket

Comment puis-je obtenir access_key et secret_key pour un bucket existant https://console.yandex.cloud/folders/b1g/storage/buckets/bucket ?

Dans Yandex Object Storage, un bucket ne possède pas de access_key / secret_key propres. Ces clés sont émises à un compte de service (ou vous utilisez déjà des clés créées pour ce compte). Le bucket est ensuite « lié » via des droits IAM sur le bucket ou le dossier.

Via la console

  1. Ouvrez le dossier b1gObject Storage → le bucket bucket.
  2. Vérifiez qu’il existe un compte de service qui doit avoir accès au bucket (ou créez-en un nouveau).
  3. Sur le bucket : Accès → attribuez un rôle tel que storage.editor (ou un rôle déjà configuré chez vous avec accès à Object Storage) à ce compte de service.
  4. Allez dans Comptes de servicecompte requis → onglet Clés d’accès statiques (ou « Clés d’accès ») → Créer une nouvelle clé.
  5. Sauvegardez l’identifiant de la clé et le secret — le secret s’affiche une seule fois.

L’identifiant de la clé = ce que les clients S3 appellent généralement access_key / AWS_ACCESS_KEY_ID, le secret = secret_key / AWS_SECRET_ACCESS_KEY.

Via CLI (yc)

Liste des comptes de service dans le dossier :

yc iam service-account list --folder-id b1g

Créer une clé statique (remplacez <SERVICE_ACCOUNT_ID> par l’ID du compte de service requis) :

yc iam access-key create --service-account-id <SERVICE_ACCOUNT_ID>

La réponse contiendra key_id et secret — c’est la paire utilisée par l’API S3.

Il est préférable d’accorder les droits sur le bucket à l’avance (rôle sur le ressource bucket ou le dossier), par exemple le rôle storage.editor sur le bucket — via la console ou l’API IAM ; dans les cas typiques, un rôle sur le dossier suffit souvent, selon les conventions de votre organisation.

Important

  • Le secret existant ne peut pas être « reconsidéré » — il faut créer une nouvelle clé et révoquer l’ancienne si nécessaire.
  • Pour l’état Terraform dans S3, utilisez les mêmes clés + l’endpoint https://storage.yandexcloud.net et la région ru-central1 (ou votre région).

La logique officielle est décrite dans la documentation Yandex Cloud sur les clés d’accès statiques et l’accès à Object Storage via l’API S3.

Répertoire local

Entrez dans le répertoire du dépôt, utilisez la clé du compte de service pour initialiser le dépôt Terraform dans le répertoire :

terraform init \
  -backend-config="access_key=<key_id>" \
  -backend-config="secret_key=<secret>"

Ainsi, vous liez le dossier cloud à votre répertoire local.

Restrictions Hashicorp

Si vous obtenez

Initialisation du backend...

Le backend "s3" a été configuré avec succès ! Terraform utilisera automatiquement ce backend sauf si la configuration du backend change.

Initialisation des plugins de fournisseurs...
- Recherche de la dernière version de yandex-cloud/yandex...
- Recherche des versions de hashicorp/null correspondant à "~> 3.2"...
- Recherche de la dernière version de hashicorp/local...
- Installation de yandex-cloud/yandex v0.200.0...
- Installé yandex-cloud/yandex v0.200.0 (auto-signé, clé ID E40F590B50BB8E40)
Les fournisseurs partenaires et communautaires sont signés par leurs développeurs.
Si vous souhaitez en savoir plus sur la signature des fournisseurs, vous pouvez consulter cette page :
https://www.terraform.io/docs/cli/plugins/signing.html
╷
│ Erreur : Échec de la requête des paquets de fournisseurs disponibles
│ 
│ Impossible de récupérer la liste des versions disponibles pour le fournisseur hashicorp/null : le registre
│ registry.terraform.io ne contient pas de fournisseur nommé
│ registry.terraform.io/hashicorp/null
│ 
│ Tous les modules doivent spécifier leurs required_providers afin que les utilisateurs externes obtiennent les
│ bons fournisseurs lorsqu'ils utilisent un module. Pour voir quels modules dépendent actuellement de
│ hashicorp/null, exécutez la commande suivante :
│     terraform providers
╵
╷
│ Erreur : Échec de la requête des paquets de fournisseurs disponibles
│ 
│ Impossible de récupérer la liste des versions disponibles pour le fournisseur hashicorp/local : le registre
│ registry.terraform.io ne contient pas de fournisseur nommé
│ registry.terraform.io/hashicorp/local
│ 
│ Tous les modules doivent spécifier leurs required_providers afin que les utilisateurs externes obtiennent les
│ bons fournisseurs lorsqu'ils utilisent un module. Pour voir quels modules dépendent actuellement de
│ hashicorp/local, exécutez la commande suivante :
│     terraform providers

Effectuez les étapes ci-dessous.

Ce qui se passe

yandex-cloud/yandex a été téléchargé, mais hashicorp/null et hashicorp/local ne l’ont pas été. Cela arrive lorsque registry.terraform.io n’est pas accessible (réseau, DNS, politique) ou répond incorrectement : Terraform affiche alors qu’il n’y a pas de fournisseur.

Ce que vous devez faire

  1. Miroir Yandex Cloud — placez le fichier de configuration Terraform dans votre répertoire personnel (copiez terraform.rc.example du dépôt dans ~/.terraformrc):

    cp ~/terraform.rc.example ~/.terraformrc
    

    Dans ce fichier, vous configurez https://terraform-mirror.yandexcloud.net/ pour registry.terraform.io/*/*, comme indiqué dans la documentation Yandex Cloud.

  2. Répétez :

    cd ~/yc-cloud
    terraform init
    
  3. Dans le code, un déclaration explicite du fournisseur local a été ajoutée dans provider.tf (il n’y avait auparavant que null), afin de fixer les versions dans un seul endroit.

Si vous avez besoin d’accès direct sans miroir : vérifiez votre VPN/proxy et assurez-vous que curl -sI https://registry.terraform.io fonctionne.```bash
$ terraform init -backend-config=“access_key=YCA” -backend-config=“secret_key=YCN”
Initialisation du backend…
Initialisation des plugins de fournisseurs…

  • Recherche des versions de hashicorp/null correspondant à “~> 3.2”…
  • Recherche des versions de hashicorp/local correspondant à “~> 2.5”…
  • Recherche de la dernière version de yandex-cloud/yandex…
  • Installation de yandex-cloud/yandex v0.200.0…
  • yandex-cloud/yandex v0.200.0 installé (non authentifié)
  • Installation de hashicorp/null v3.2.4…
  • hashicorp/null v3.2.4 installé (non authentifié)
  • Installation de hashicorp/local v2.8.0…
  • hashicorp/local v2.8.0 installé (non authentifié)

Terraform a créé un fichier de verrou .terraform.lock.hcl pour enregistrer les choix de fournisseurs qu’il a effectués ci-dessus. Incluez ce fichier dans votre dépôt de versionnage afin que Terraform puisse garantir de faire les mêmes choix par défaut lors de l’exécution de la commande “terraform init” à l’avenir.


│ Avertissement : Informations incomplètes dans le fichier de verrou pour les fournisseurs

│ En raison de vos méthodes personnalisées d’installation des fournisseurs, Terraform a été contraint de calculer localement les sommes de contrôle pour les fournisseurs suivants :
│ - hashicorp/local
│ - hashicorp/null
│ - yandex-cloud/yandex

│ Le fichier .terraform.lock.hcl actuel ne contient que les sommes de contrôle pour linux_amd64, donc Terraform exécuté sur une autre plateforme échouera à installer ces fournisseurs.

│ Pour calculer des sommes de contrôle supplémentaires pour une autre plateforme, exécutez :
│ terraform providers lock -platform=linux_amd64
│ (où linux_amd64 est la plateforme à générer)

L’initialisation de Terraform a réussi !

Vous pouvez maintenant commencer à travailler avec Terraform. Essayez de lancer “terraform plan” pour voir les modifications nécessaires à votre infrastructure. Toutes les commandes Terraform devraient maintenant fonctionner.

Si vous modifiez ou changez des modules ou la configuration du backend pour Terraform, exécutez à nouveau cette commande pour réinitialiser votre répertoire de travail. Si vous oubliez, d’autres commandes détecteront cela et vous rappelleront de le faire si nécessaire.


```bash
# Plan et application de Terraform

terraform plan -input=false -var-file=count_vars.vars -out=tfplan
terraform apply -auto-approve tfplan
terraform destroy -auto-approve -var-file="count_vars.vars"