Tous les produits
Search
Centre de documentation

Elastic Compute Service:Create and use an ECS instance with Terraform

Dernière mise à jour :Aug 18, 2026

Terraform est un outil d'IaC (Infrastructure as Code) qui automatise la gestion de l'infrastructure. Il vous permet de définir et de provisionner une infrastructure cloud à l'aide d'un code simple. Cette rubrique explique comment utiliser Terraform pour créer une instance ECS.

Remarque

Pour plus d'informations sur Terraform, consultez Qu'est-ce qu'Alibaba Cloud Terraform ?.

Prérequis

1. Installer Terraform

Cette rubrique décrit l'installation de Terraform à partir d'un package sous Linux ou Windows.

Remarque

Alibaba Cloud propose deux environnements en ligne permettant d'exécuter des commandes Terraform sans installation locale :

  1. Terraform Explorer : cliquez sur Initiate Debugging pour exécuter l'exemple de code de cette rubrique.

  2. Cloud Shell : copiez le code fourni dans cette rubrique et exécutez directement les commandes Terraform dans Créer des ressources avec Terraform.

  1. Accédez au site officiel de Terraform pour télécharger le package correspondant à votre système d'exploitation.

  2. Configurez l'environnement d'exécution de Terraform.

    Linux

    Exécutez la commande suivante pour extraire le package vers /usr/local/bin.

    # Replace {your_zip_path} with the path to your package. If your system does not support the unzip command, install it first.
    sudo unzip {your_zip_path} -d /usr/local/bin

    Windows

    1. Extrayez le package. Par exemple, le répertoire de destination est D:\tool\terraform.

    2. Sur le bureau, cliquez avec le bouton droit sur Ce PC et sélectionnez Type > Advanced system settings > Environment Variable > System variables/User variables.

    3. Cliquez sur Path dans les variables système ou utilisateur, sélectionnez Edit > New, saisissez le répertoire dans lequel vous avez extrait Terraform (par exemple D:\tool\terraform), puis cliquez sur OK pour terminer la configuration.

  3. Exécutez la commande terraform pour vérifier la configuration du chemin d'accès.

    terraform

    Si la commande affiche une liste d'options Terraform, l'installation a réussi.

    ➜  ~ terraform
    Usage: terraform [global options] <subcommand> [args]
    The available commands for execution are listed below.
    The primary workflow commands are given first, followed by
    less common or more advanced commands.
    Main commands:
      init          Prepare your working directory for other commands
      validate      Check whether the configuration is valid
      plan          Show changes required by the current configuration
      apply         Create or update infrastructure
      destroy       Destroy previously-created infrastructure
    All other commands:
      console       Try Terraform expressions at an interactive command prompt
      fmt           Reformat your configuration in the standard style
      force-unlock  Release a stuck lock on the current workspace
      get           Install or upgrade remote Terraform modules
      graph         Generate a Graphviz graph of the steps in an operation
      import        Associate existing infrastructure with a Terraform resource
      login         Obtain and save credentials for a remote host
      logout        Remove locally-stored credentials for a remote host
      metadata      Metadata related commands
      output        Show output values from your root module
      providers     Show the providers required for this configuration
      refresh       Update the state to match remote systems
      show          Inspect Terraform state or plan
      state         Advanced state management
      taint         Mark a resource instance as not fully functional
      test          Execute integration tests for Terraform modules
      untaint       Remove the 'tainted' state from a resource instance
      version       Show the current Terraform version
      workspace     Workspace management
    
    Global options (use these before the subcommand, if any):
      -chdir=DIR    Switch to a different working directory before executing the
                    given subcommand.
      -help         Show this message, or the help for a given subcommand.
      -version      An alias for the "version" subcommand.
      show          Show the current state or a saved plan
      state         Advanced state management
      taint         Mark a resource instance as not fully functional
      test          Experimental support for module integration testing
      untaint       Remove the 'tainted' state from a resource instance
      version       Show the current Terraform version
      workspace     Workspace management
    Global options (use these before the subcommand, if any):
      -chdir=DIR    Switch to a different working directory before executing the
                    given subcommand.
      -help         Show this help output, or the help for a specified subcommand.
      -version      An alias for the "version" subcommand.

2. Configurer l'authentification Terraform

Avant d'utiliser Terraform pour gérer les ressources Alibaba Cloud, vous devez configurer l'authentification du fournisseur Alibaba Cloud. Cela permet à Terraform d'appeler les API nécessaires pour créer et gérer votre infrastructure.

Remarque

Si vous utilisez Terraform Explorer ou Cloud Shell, aucune configuration manuelle de l'authentification n'est requise. Assurez-vous simplement que le compte connecté dispose des autorisations nécessaires pour gérer les ressources VPC et ECS.

Cette rubrique utilise l'AccessKey d'un utilisateur RAM, stocké comme variable d'environnement, pour l'authentification :

  1. Un compte Alibaba Cloud disposant de toutes les autorisations sur ses ressources, la divulgation d'une AccessKey présente un risque de sécurité élevé. Nous vous recommandons d'utiliser plutôt l'AccessKey d'un utilisateur RAM. Pour savoir comment créer une paire AccessKey pour un utilisateur RAM, consultez Créer une paire AccessKey.

  2. Lorsque vous accordez à un utilisateur RAM des autorisations pour gérer les ressources ECS et VPC, nous vous recommandons de respecter le principe du moindre privilège. Pour savoir comment attribuer des autorisations à un utilisateur RAM, consultez Gérer les autorisations des utilisateurs RAM. L'exemple de code de cette rubrique nécessite la création de ressources telles que des instances ECS, des VPC et des vSwitches. Pour exécuter les exemples, vous pouvez accorder les autorisations suivantes à l'utilisateur RAM :

    Service

    Policy

    VPC

    Dans cet exemple, sélectionnez la stratégie système AliyunVPCFullAccess.

    ECS

    Dans cet exemple, sélectionnez la stratégie système AliyunECSFullAccess.

  3. Créez des variables d'environnement pour stocker vos identifiants d'authentification.

    Linux

    Important

    Les variables d'environnement définies avec la commande export sont temporaires et ne persistent que pendant la session actuelle. Pour les rendre permanentes, ajoutez la commande au fichier de démarrage de votre shell.

    # Your AccessKey ID.
    export ALICLOUD_ACCESS_KEY="yourAccessKeyID"
    # Your AccessKey secret.
    export ALICLOUD_SECRET_KEY="yourAccessKeySecret"
    # The region where the resources will be deployed.
    export ALICLOUD_REGION="cn-chengdu"

    Windows

    1. Sur le bureau, cliquez avec le bouton droit sur Ce PC et sélectionnez Type > Advanced system settings > Environment Variable > System variables/User variables.

    2. Dans la section System variables ou User variables, cliquez sur New pour créer les variables d'environnement suivantes.

      Variable

      Description

      Value

      ALICLOUD_ACCESS_KEY

      Votre AccessKey ID.

      yourAccessKeyID

      ALICLOUD_SECRET_KEY

      Votre AccessKey secret.

      yourAccessKeySecret

      ALICLOUD_REGION

      La région où les ressources seront déployées.

      Exemple : cn-chengdu

Ressources Terraform connexes

L'exemple de code de cette rubrique utilise les ressources Terraform suivantes.

Remarque

Certaines ressources utilisées dans ce tutoriel entraînent des frais. Pour éviter des facturations imprévues, nettoyez les ressources lorsqu'elles ne sont plus nécessaires.

Resource

Data source

alicloud_zones : recherche les zones disponibles pour un type d'instance spécifié.

Créer un fichier de configuration Terraform

Définissez les ressources d'infrastructure nécessaires à la création d'une instance ECS, telles que l'instance ECS elle-même et un VPC, dans un fichier main.tf. Vous pouvez copier le code de la section Exemple de code complet dans votre fichier de configuration.

  1. Créez un fichier de configuration.

    Ce fichier, dont l'extension doit être .tf, contient toutes vos définitions de ressources.

    Linux

    # Create a working directory.
    mkdir terraform-projects && cd terraform-projects
    mkdir ecs-quickstart && cd ecs-quickstart
    # Create and edit the configuration file.
    touch main.tf && vim main.tf

    Windows

    Créez un nouveau dossier nommé ecs-quickstart. Dans ce dossier, créez un fichier de configuration Terraform nommé main.tf.

  2. Définissez la configuration du fournisseur.

    Configurez la région pour le déploiement de vos ressources Alibaba Cloud.

    # The region where the resources are located.
    variable "region" {
      default = "cn-chengdu"
    }
    provider "alicloud" {
      region = var.region
    }
  3. Définissez le VPC et son vSwitch.

    Un VPC est un réseau privé isolé logiquement dans le cloud, que vous pouvez configurer et gérer.

    variable "instance_name" {
      default = "tf-sample"
    }
    # The instance type of the ECS instance.
    variable "instance_type" {
      default = "ecs.e-c1m2.large"
    }
    # Query for availability zones that meet the specified conditions.
    data "alicloud_zones" "default" {
      available_disk_category     = "cloud_essd"
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    # Create a VPC.
    resource "alicloud_vpc" "vpc" {
      vpc_name   = var.instance_name
      cidr_block = "172.16.0.0/12"
    }
    # Create a vSwitch.
    resource "alicloud_vswitch" "vsw" {
      vpc_id     = alicloud_vpc.vpc.id
      cidr_block = "172.16.0.0/21"
      zone_id    = data.alicloud_zones.default.zones.0.id
    }
  4. Définissez le groupe de sécurité.

    Un groupe de sécurité agit comme un pare-feu virtuel qui contrôle le trafic entrant et sortant de votre instance ECS.

    # Create a security group.
    resource "alicloud_security_group" "default" {
      name   = var.instance_name
      vpc_id = alicloud_vpc.vpc.id
    }
    # Add an inbound rule to the security group.
    resource "alicloud_security_group_rule" "allow_tcp_22" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "22/22"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
  5. Définissez l'instance ECS.

    ECS fournit une capacité de calcul sécurisée, évolutive et haute performance pour divers scénarios, notamment le déploiement d'applications, l'hébergement de sites web et le traitement des données.

    # The image ID of the ECS instance.
    variable "image_id" {
      default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
    }
    # The public bandwidth for the ECS instance.
    variable "internet_bandwidth" {
      default = "10"
    }
    # The logon password for the ECS instance.
    variable "password" {
      default = "Test@12345"
    }
    # The number of ECS instances to create. The default value is 1.
    variable "ecs_count" {
      default = 1
    }
    # Create the ECS instance.
    resource "alicloud_instance" "instance" {
      count                      = var.ecs_count
      availability_zone          = data.alicloud_zones.default.zones.0.id
      security_groups            = alicloud_security_group.default.*.id
      password                   = var.password
      instance_type              = var.instance_type
      system_disk_category       = "cloud_essd"
      image_id                   = var.image_id
      instance_name              = var.instance_name
      vswitch_id                 = alicloud_vswitch.vsw.id
      internet_max_bandwidth_out = var.internet_bandwidth
    }
    output "public_ip" {
      value = [for i in range(var.ecs_count) : alicloud_instance.instance[i].public_ip]
    }
                  

Exemple de code complet

Remarque

Vous pouvez exécuter l'exemple de code en un seul clic. Lancer le débogage

variable "region" {
  default = "cn-chengdu"
}
provider "alicloud" {
  region = var.region
}
variable "instance_name" {
  default = "tf-sample"
}
variable "instance_type" {
  default = "ecs.e-c1m2.large"
}
data "alicloud_zones" "default" {
  available_disk_category     = "cloud_essd"
  available_resource_creation = "VSwitch"
  available_instance_type     = var.instance_type
}
resource "alicloud_vpc" "vpc" {
  vpc_name   = var.instance_name
  cidr_block = "172.16.0.0/12"
}
resource "alicloud_vswitch" "vsw" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "172.16.0.0/21"
  zone_id    = data.alicloud_zones.default.zones.0.id
}
resource "alicloud_security_group" "default" {
  name   = var.instance_name
  vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_security_group_rule" "allow_tcp_22" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "22/22"
  priority          = 1
  security_group_id = alicloud_security_group.default.id
  cidr_ip           = "0.0.0.0/0"
}
variable "image_id" {
  default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
}
variable "internet_bandwidth" {
  default = "10"
}
variable "password" {
  default = "Test@12345"
}
variable "ecs_count" {
  default = 1
}
resource "alicloud_instance" "instance" {
  count                      = var.ecs_count
  availability_zone          = data.alicloud_zones.default.zones.0.id
  security_groups            = alicloud_security_group.default.*.id
  password                   = var.password
  instance_type              = var.instance_type
  system_disk_category       = "cloud_essd"
  image_id                   = var.image_id
  instance_name              = var.instance_name
  vswitch_id                 = alicloud_vswitch.vsw.id
  internet_max_bandwidth_out = var.internet_bandwidth
}
output "public_ip" {
  value = [for i in range(var.ecs_count) : alicloud_instance.instance[i].public_ip]
}

Exécuter les commandes Terraform

Après avoir créé le fichier de configuration, exécutez les commandes Terraform pour créer l'instance ECS.

1. Initialiser Terraform

La commande terraform init télécharge et installe le plug-in du fournisseur Alibaba Cloud dans le dossier actuel et génère divers fichiers d'enregistrement.

Linux

terraform init

Windows

Ouvrez l'invite de commandes (cmd), accédez au répertoire contenant vos fichiers de configuration Terraform, puis exécutez la commande terraform init pour initialiser l'environnement.

# The configuration file is in the D:/ecs-quickstart directory.
# Switch to drive D.
d:
# Switch to the directory where the configuration file is located. Replace ecs-quickstart with your actual directory path.
cd ecs-quickstart
# Run the initialization command.
terraform init

Le résultat suivant indique que l'initialisation a réussi.

Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

2. Prévisualiser le plan d'exécution

Exécutez terraform plan pour effectuer les opérations suivantes :

  • Vérifiez la syntaxe du code Terraform dans main.tf.

  • Prévisualisez les ressources qui seront créées sur la base du code Terraform actuel.

terraform plan

Si le résultat indique que le fichier de configuration Terraform ne contient aucune erreur de syntaxe, vous pouvez exécuter la commande terraform apply pour créer les ressources. Si d'autres messages d'erreur apparaissent, modifiez le fichier de configuration Terraform en fonction des indications fournies.

...
Plan: 5 to add, 0 to change, 0 to destroy.

3. Appliquer la configuration

Exécutez terraform apply pour créer automatiquement l'instance ECS et ses ressources dépendantes, ainsi que pour installer Python. Lorsque vous y êtes invité lors du processus de création, saisissez yes pour autoriser Terraform à créer toutes les ressources définies.

terraform apply

Le résultat suivant indique que Terraform a créé les ressources.

...
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_vpc.vpc: Creating...
alicloud_vpc.vpc: Creation complete after 6s [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_security_group.default: Creating...
alicloud_vswitch.vsw: Creating...
alicloud_security_group.default: Creation complete after 1s [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Creating...
alicloud_security_group_rule.allow_tcp_22: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_vswitch.vsw: Creation complete after 4s [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_instance.instance: Creating...
alicloud_instance.instance: Still creating... [10s elapsed]
alicloud_instance.instance: Creation complete after 15s [id=i-2vc3rf151bwcXXXXXXXX]
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
Outputs:
public_ip = [
  "4XX.XXX.XXX.XX7",
]

Se connecter à l'instance ECS

Une fois l'instance créée, vous pouvez vous y connecter à distance via SSH en utilisant son adresse IP publique. Pour plus d'informations sur les méthodes de connexion, consultez la rubrique Présentation des méthodes de connexion.

ssh <username>@<public_ip_address>

Vérifier les résultats

Exécuter une commande Terraform

Vous pouvez exécuter la commande suivante pour afficher les informations relatives à l'instance ECS créée.

# Format: terraform state show <resource_type>.<resource_name>[index]
terraform state show alicloud_instance.instance[0]

Consulter dans la console

Vous pouvez vous connecter à la console ECS pour consulter l'instance ECS créée. Après l'exécution du code Terraform, une instance nommée tf-sample est créée et se trouve dans l'état Running sur la page Instances. L'instance est déployée dans la zone de disponibilité A de la région Chine (Chengdu). Le type d'instance est ecs.e-c1m2.large (2 vCPU et 4 Go de mémoire), l'adresse IP privée est 172.16.0.100, la méthode de facturation est le paiement à l'utilisation et le type de réseau est VPC.

Modifier les ressources

Si vous devez ajuster votre configuration, vous pouvez modifier les définitions de ressources dans le fichier de configuration. Par exemple, vous pouvez ajouter une nouvelle règle entrante au groupe de sécurité.

  1. Pour ajouter une règle au groupe de sécurité autorisant le trafic entrant sur le port 443, ajoutez le code suivant à votre fichier de configuration.

    resource "alicloud_security_group_rule" "allow_tcp_443" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "443/443"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
  2. Exécutez la commande terraform plan pour prévisualiser les modifications. Le résultat suivant indique qu'une règle de groupe de sécurité sera ajoutée au groupe de sécurité dont l'ID est sg-2vcdz6b8h9c3XXXXXXXX.

    ...
    Terraform will perform the following actions:
      # alicloud_security_group_rule.allow_tcp_443 will be created
      + resource "alicloud_security_group_rule" "allow_tcp_443" {
          + cidr_ip           = "0.0.0.0/0"
          + id                = (known after apply)
          + ip_protocol       = "tcp"
          + nic_type          = "intranet"
          + policy            = "accept"
          + port_range        = "443/443"
          + prefix_list_id    = (known after apply)
          + priority          = 1
          + security_group_id = "sg-2vcdz6b8h9c3XXXXXXXX"
          + type              = "ingress"
        }
    Plan: 1 to add, 0 to change, 0 to destroy.
  3. Si les modifications correspondent à vos attentes, exécutez la commande terraform apply pour appliquer les changements à votre infrastructure. Lorsque Terraform vous demande de confirmer, saisissez yes et appuyez sur Entrée. Le message suivant indique qu'une nouvelle règle a été ajoutée avec succès au groupe de sécurité dont l'ID est sg-2vcdz6b8h9c3XXXXXXXX.

    ...
    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_security_group_rule.allow_tcp_443: Creating...
    alicloud_security_group_rule.allow_tcp_443: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Nettoyer les ressources

Lorsque vous n'avez plus besoin des ressources, exécutez la commande suivante pour les détruire.

terraform destroy

Le résultat suivant indique que les ressources ont été détruites.

...
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_security_group_rule.allow_tcp_443: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
alicloud_security_group_rule.allow_tcp_22: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_instance.instance: Destroying... [id=i-2vc3rf151bwcXXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Destruction complete after 0s
alicloud_security_group_rule.allow_tcp_443: Destruction complete after 0s
alicloud_instance.instance: Still destroying... [id=i-2vc3rf151bwcXXXXXXXX, 10s elapsed]
alicloud_instance.instance: Destruction complete after 10s
alicloud_security_group.default: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_vswitch.vsw: Destroying... [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_security_group.default: Destruction complete after 1s
alicloud_vswitch.vsw: Destruction complete after 8s
alicloud_vpc.vpc: Destroying... [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_vpc.vpc: Destruction complete after 6s
Destroy complete! Resources: 6 destroyed.

Références