Tous les produits
Search
Centre de documentation

Terraform:Use Terraform on Linux

Dernière mise à jour :Aug 11, 2026

Installez, configurez et exécutez Terraform pour provisionner des ressources Alibaba Cloud sur un système Linux.

La gestion de votre infrastructure en tant que code (IaC) avec Terraform comprend les principales étapes suivantes.

  1. Installer Terraform.

  2. Configurer Terraform. Configurez l'authentification pour le fournisseur Alibaba Cloud.

  3. Rédiger un fichier de configuration Terraform. Définissez les ressources à créer, telles que les utilisateurs RAM et les politiques.

  4. Initialiser et créer les ressources. Téléchargez le plug-in du fournisseur et déployez les ressources déclarées.

  5. Afficher et gérer les ressources. Inspectez, modifiez ou mettez à jour les ressources déployées selon l'évolution de vos besoins.

  6. Détruire les ressources. Supprimez les ressources qui ne sont plus nécessaires.

1. Installer Terraform

Terraform est un outil d'infrastructure en tant que code (IaC) permettant de gérer les ressources cloud via des fichiers de configuration déclaratifs. Installez Terraform avant d'exécuter toute commande Terraform. Pour plus d'informations sur les étapes d'installation, consultez la rubrique Installer Terraform.

2. Configurer Terraform

Terraform s'authentifie auprès d'Alibaba Cloud via le fournisseur Alibaba Cloud. Plusieurs méthodes d'authentification sont prises en charge. Pour en savoir plus, consultez la rubrique Authentification Terraform.

L'exemple suivant utilise une paire AccessKey d'utilisateur RAM configurée dans des variables d'environnement :

export ALICLOUD_ACCESS_KEY="<yourAccessKeyID>"
export ALICLOUD_SECRET_KEY="<yourAccessKeySecret>"
export ALICLOUD_REGION="cn-beijing"

3. Rédiger un fichier de configuration Terraform

Les fichiers de configuration définissent les ressources d'infrastructure à déployer, telles que les utilisateurs RAM, les instances ECS et les compartiments OSS.

  1. Créez un répertoire de travail nommé ram et un fichier de configuration nommé main.tf.

    # Create a working directory and go to the directory.
    mkdir ram && cd ram
    # Create and edit the configuration file.
    touch main.tf && vim main.tf
    

    L'utilisation d'un répertoire de travail distinct par projet permet d'isoler les fichiers d'état et de simplifier le contrôle de version.

  2. Rédigez un fichier de configuration Terraform. Cet exemple crée un utilisateur RAM et lui accorde des autorisations de gestion ECS.

    L'exemple utilise les ressources suivantes :

    Important

    Évitez d'activer simultanément la connexion à la console et l'accès par paire AccessKey pour le même utilisateur RAM afin de clarifier les responsabilités et prévenir toute utilisation abusive.

    Resource

    Description

    alicloud_ram_user

    Créer un utilisateur RAM

    alicloud_ram_login_profile

    Autoriser un utilisateur RAM à se connecter à la console

    alicloud_ram_access_key

    Créer une paire AccessKey pour un utilisateur RAM

    alicloud_ram_policy

    Créer une politique d'accès

    alicloud_ram_user_policy_attachment

    Accorder des autorisations à un utilisateur RAM

    Copiez le code suivant dans main.tf. Appuyez sur Esc pour quitter le mode insertion, saisissez :wq et appuyez sur Entrée pour enregistrer.

    variable "user_name" {
      default = "terraform_user_test"
    }
    variable "user_password" {
      default = "!Test@123456"
    }
    variable "user_display_name" {
      default = "TestAccount"
    }
    variable "user_mobile" {
      default = "86-18688888888"
    }
    variable "user_email" {
      default = "example@example.com"
    }
    resource "alicloud_ram_user" "user" {
      name         = var.user_name
      display_name = var.user_display_name
      mobile       = var.user_mobile
      email        = var.user_email
      comments     = "Created by Terraform"
      force        = true                   
    }
    resource "alicloud_ram_login_profile" "profile" {
      user_name = alicloud_ram_user.user.name
      password  = var.user_password
    }
    resource "alicloud_ram_access_key" "ak" {
      user_name   = alicloud_ram_user.user.name
      secret_file = "accesskey.txt"
    }
    resource "alicloud_ram_policy" "policy" {
      policy_name     = "tf-example-policy"
      policy_document = <<EOF
      {
        "Statement": [
          {
            "Action": "ecs:*",
            "Effect": "Allow",
            "Resource":"*"
          }
        ],
          "Version": "1"
      }
      EOF
      description     = "This is a policy test."
    }
    resource "alicloud_ram_user_policy_attachment" "attach" {
      policy_name = alicloud_ram_policy.policy.policy_name
      policy_type = alicloud_ram_policy.policy.type
      user_name   = alicloud_ram_user.user.name
    }

4. Initialiser et créer les ressources

Initialisez le répertoire de travail avant de créer les ressources.

4,1 Initialisation de Terraform

Exécutez terraform init pour initialiser le répertoire de travail. La commande terraform init télécharge le plug-in du fournisseur Alibaba Cloud et doit être exécutée avant toute autre commande Terraform.

4,2 Créer les ressources

  1. Exécutez terraform plan pour prévisualiser les ressources qui seront créées, modifiées ou détruites par terraform apply.

    # alicloud_ram_user.user will be created
    + resource "alicloud_ram_user" "user" {
        + comments     = "Created by Terraform"
        + display_name = "TestAccount"
        + email        = "example@example.com"
        + force        = true
        + id           = (known after apply)
        + mobile       = "86-18688888888"
        + name         = "terraform_user_test"
      }
    # alicloud_ram_user_policy_attachment.attach will be created
    + resource "alicloud_ram_user_policy_attachment" "attach" {
        + id          = (known after apply)
        + policy_name = "tf-example-policy"
        + policy_type = (known after apply)
        + user_name   = "terraform_user_test"
      }
    Plan: 5 to add, 0 to change, 0 to destroy.
  2. Lorsque vous exécutez terraform apply, les ressources sont créées selon le plan d'exécution généré par terraform plan. Pendant le processus de création, vous devez saisir yes à l'invite pour continuer la création des ressources. Pour savoir comment transmettre des valeurs aux variables, consultez la rubrique Variable.

    Plan: 5 to add, 0 to change, 0 to destroy.
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
      Enter a value: yes
    alicloud_ram_user.user: Creating...
    alicloud_ram_policy.policy: Creating...
    alicloud_ram_policy.policy: Creation complete after 0s [id=tf-example-policy]
    alicloud_ram_user.user: Creation complete after 1s [id=20xxx18]
    alicloud_ram_login_profile.profile: Creating...
    alicloud_ram_access_key.ak: Creating...
    alicloud_ram_user_policy_attachment.attach: Creating...
    alicloud_ram_user_policy_attachment.attach: Creation complete after 0s [id=user:tf-example-policy:Custom:terraform_user_test]
    alicloud_ram_login_profile.profile: Creation complete after 0s [id=terraform_user_test]
    alicloud_ram_access_key.ak: Creation complete after 1s [id=LTxxxGr]
    Apply complete! Resources: 5 added, 0 changed, 0 destroyed.

5. Afficher et gérer les ressources

Après le déploiement, gérez et maintenez votre infrastructure.

5,1 Afficher les ressources

  1. Exécutez terraform show pour afficher les détails des ressources.

    [root@iZ2***tZ ram]# terraform show
    # alicloud_ram_access_key.ak:
    resource "alicloud_ram_access_key" "ak" {
        id          = "LTAxxxxxxxxxxxxxxxxxxxiGr"
        secret      = (sensitive value)
        secret_file = "accesskey.txt"
        status      = "Active"
        user_name   = "terraform_user_test"
    }
    # alicloud_ram_login_profile.profile:
    resource "alicloud_ram_login_profile" "profile" {
        id                     = "terraform_user_test"
        mfa_bind_required      = true
        password               = (sensitive value)
        password_reset_required = false
        user_name              = "terraform_user_test"
    }
    # alicloud_ram_policy.policy:
    resource "alicloud_ram_policy" "policy" {
        attachment_count = 0
        default_version  = "v1"
        description      = "This is a policy test."
        document         = <<-EOT
            {
                "Statement": [
                    {
                        "Action": "ecs:*",
                        "Effect": "Allow",
                        "Resource":"*"
                    }
                ],
                "Version": "1"
            }
        EOT
    }
  2. Exécutez terraform state list pour répertorier toutes les ressources créées.

    [root@iZxxxmtZ ram]# terraform state list
    alicloud_ram_access_key.ak
    alicloud_ram_login_profile.profile
    alicloud_ram_policy.policy
    alicloud_ram_user.user
    alicloud_ram_user_policy_attachment.attach
  3. Exécutez terraform state show <resource type>.<resource name> pour afficher les détails d'une ressource spécifique.

    [root@iZxxx          tZ ram]# terraform state show alicloud_ram_user.user
    # alicloud_ram_user.user:
    resource "alicloud_ram_user" "user" {
        comments     = "Created by Terraform"
        display_name = "TestAccount"
        email        = "example@example.com"
        force        = true
        id           = "208475129836212018"
        mobile       = "86-18688888888"
        name         = "terraform_user_test"
    }
  4. Vérifiez les ressources dans la console de gestion Alibaba Cloud.

5,2 Gérer les ressources

Terraform stocke l'état et les propriétés des ressources dans le fichier terraform.tfstate. Utilisez les commandes terraform state pour gérer l'état. Consultez la rubrique Présentation du mécanisme d'état.

5,3 Modifier les ressources

  1. Modifiez la définition de la ressource dans main.tf. Par exemple, restreignez les autorisations de l'utilisateur RAM à un accès ECS en lecture seule.

    1. Exécutez la commande vim main.tf et appuyez sur la touche i pour passer en mode édition.

    2. Copiez le code suivant et utilisez-le pour remplacer la section alicloud_ram_policy dans le fichier main.tf.

      resource "alicloud_ram_policy" "policy" {
        policy_name     = "tf-example-policy"
        policy_document = <<EOF
        {
          "Statement": [
            {
              "Action": [
                "ecs:Get*",
                "ecs:List*",
                "ecs:Describe*"
              ],
              "Effect": "Allow",
              "Resource":"*"
            }
          ],
            "Version": "1"
        }
        EOF
        description     = "This is a policy test."
      }
    3. Appuyez sur Esc et saisissez :wq pour enregistrer le fichier.

  2. Exécutez terraform plan pour prévisualiser les modifications.

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the follow
      ~ update in-place
    Terraform will perform the following actions:
      # alicloud_ram_policy.policy will be updated in-place
      ~ resource "alicloud_ram_policy" "policy" {
            id                = "tf-example-policy"
            name              = "tf-example-policy"
          ~ policy_document   = <<-EOT
                {
                    "Statement": [
                        {
              -             "Action": "ecs:*",
              +             "Action": [
              +         "ecs:Get*",
              +         "ecs:List*",
              +         "ecs:Describe*"
              +             ],
                            "Effect": "Allow",
                            "Resource":"*"
                        }
                    ],
                        "Version": "1"
                }
            EOT
            # (8 unchanged attributes hidden)
            # (1 unchanged block hidden)
        }
    Plan: 0 to add, 1 to change, 0 to destroy.
  3. Si le plan est correct, exécutez terraform apply. À l'invite, saisissez yes pour appliquer les modifications.

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the follow
      ~ update in-place
    Terraform will perform the following actions:
      # alicloud_ram_policy.policy will be updated in-place
      ~ resource "alicloud_ram_policy" "policy" {
            id               = "tf-example-policy"
            name             = "tf-example-policy"
          ~ policy_document  = <<-EOT
                {
                    "Statement": [
                        {
              -             "Action": "ecs:*",
              +             "Action": [
              +   "ecs:Get*",
              +   "ecs:List*",
              +   "ecs:Describe*"
              +             ],
                            "Effect": "Allow",
                            "Resource":"*"
                        }
                    ],
                    "Version": "1"
                }
            EOT
            # (8 unchanged attributes hidden)
            # (1 unchanged block hidden)
        }
    Plan: 0 to add, 1 to change, 0 to destroy.
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
      Enter a value: yes
    alicloud_ram_policy.policy: Modifying... [id-tf-example-policy]
    alicloud_ram_policy.policy: Modifications complete after 0s [id-tf-example-policy]
    Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

6. Détruire les ressources

Exécutez terraform destroy pour supprimer toutes les ressources créées dans le répertoire de travail actuel.

Important

Si une politique comporte plusieurs versions, la commande terraform destroy ne peut pas la supprimer directement. Définissez force sur true dans alicloud_ram_policy pour supprimer toutes les versions de la politique. Cela supprime également toutes les associations avec les utilisateurs ou les rôles RAM. Utilisez cette option avec prudence.

Plan: 0 to add, 0 to change, 5 to destroy.
Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.
  Enter a value: yes
alicloud_ram_access_key.ak: Destroying... [id=LTxxxGr]
alicloud_ram_login_profile.profile: Destroying... [id=terraform_user_test]
alicloud_ram_user_policy_attachment.attach: Destroying... [id=user:tf-example-policy:Custom:terraform_user_test]
alicloud_ram_user_policy_attachment.attach: Destruction complete after 0s
alicloud_ram_policy.policy: Destroying... [id=tf-example-policy]
alicloud_ram_login_profile.profile: Destruction complete after 0s
alicloud_ram_policy.policy: Destruction complete after 1s
alicloud_ram_access_key.ak: Destruction complete after 1s
alicloud_ram_user.user: Destroying... [id=2xxx18]
alicloud_ram_user.user: Destruction complete after 1s

Exemple complet

Le code complet suivant combine toutes les ressources de ce tutoriel. Copiez-le et exécutez-le directement.

variable "user_name" {
  default = "terraform_user_test"
}
variable "user_password" {
  default = "!Test@123456"
}
variable "user_display_name" {
  default = "TestAccount"
}
variable "user_mobile" {
  default = "86-18688888888"
}
variable "user_email" {
  default = "example@example.com"
}
resource "alicloud_ram_user" "user" {
  name         = var.user_name
  display_name = var.user_display_name
  mobile       = var.user_mobile
  email        = var.user_email
  comments     = "Created by Terraform"
  force        = true                   
}
resource "alicloud_ram_login_profile" "profile" {
  user_name = alicloud_ram_user.user.name
  password  = var.user_password
}
resource "alicloud_ram_access_key" "ak" {
  user_name   = alicloud_ram_user.user.name
  secret_file = "accesskey.txt"
}
resource "alicloud_ram_policy" "policy" {
  policy_name     = "tf-example-policy"
  policy_document = <<EOF
  {
    "Statement": [
      {
        "Action": "ecs:*",
        "Effect": "Allow",
        "Resource":"*"
      }
    ],
      "Version": "1"
  }
  EOF
  description     = "This is a policy test."
}
resource "alicloud_ram_user_policy_attachment" "attach" {
  policy_name = alicloud_ram_policy.policy.policy_name
  policy_type = alicloud_ram_policy.policy.type
  user_name   = alicloud_ram_user.user.name
}

Références