Cette rubrique explique comment utiliser Terraform sous Windows pour créer des ressources Alibaba Cloud.
La gestion de votre infrastructure en tant que code (IaC) avec Terraform comprend les principales étapes suivantes.
Installer Terraform : assurez-vous que votre système peut reconnaître et exécuter les commandes Terraform.
Rédiger un fichier de configuration Terraform : le fichier de configuration constitue le cœur de Terraform. Il décrit la création, la configuration et les dépendances des ressources, telles que les VPC, les instances ECS et les buckets OSS.
Initialiser et créer les ressources : cette étape cruciale transforme votre conception d'infrastructure en ressources actives.
Consulter et gérer les ressources : après le déploiement, vous pouvez consulter et gérer votre infrastructure afin de garantir qu'elle répond aux exigences actuelles.
Détruire les ressources : lorsqu'elles ne sont plus nécessaires, vous pouvez détruire les ressources.
1. Installer Terraform
-
Accédez au site web officiel de Terraform, téléchargez le binaire Terraform adapté à votre système d'exploitation Windows, puis extrayez-le.
La page de téléchargement propose des packages d'installation pour les architectures 386 et AMD64. Sélectionnez celle qui correspond à votre système et cliquez sur Download.
-
Ajoutez le chemin d'installation de Terraform à la variable d'environnement Path .
Sur votre bureau, effectuez un clic droit sur This PC, puis sélectionnez Properties > Advanced system settings > Environment Variables.
Sous System variables ou User variables, cliquez sur Path, puis sélectionnez Edit > New. Saisissez le chemin du répertoire dans lequel vous avez extrait le binaire Terraform, puis cliquez sur OK pour enregistrer vos modifications.
-
Vérifiez l'installation. Appuyez sur les touches Win+R , saisissez
cmd, puis cliquez sur OK pour ouvrir l'invite de commandes. Exécutez la commandeterraform --version. Si vous obtenez une sortie similaire à celle ci-dessous, l'installation a réussi.Terraform v1.9.3 on windows_amd64
2. Rédiger un fichier de configuration Terraform
Le fichier de configuration constitue le cœur de Terraform. Il définit les ressources d'infrastructure à déployer dans le cloud ou sur site, telles que VPC, ECS et OSS.
-
Créez un nouveau dossier, par exemple ecs, puis créez-y un fichier de configuration Terraform nommé main.tf .
Il est recommandé de créer un répertoire de travail distinct pour chaque projet Terraform. Cette pratique permet de maintenir les ressources organisées, d'éviter les conflits de fichiers d'état et de simplifier le contrôle de version. Cette séparation facilite également l'isolation des environnements et la gestion des modules, ce qui améliore la maintenabilité et la sécurité.
-
Rédigez le fichier de configuration Terraform. L'instance ECS et ses ressources dépendantes, telles que le VPC et le groupe de sécurité, sont définies sous forme de code dans le fichier de configuration. Vous pouvez copier le code suivant dans main.tf .
ImportantCet exemple crée une instance ECS en paiement à l'utilisation, ce qui engendre des frais dès sa création.
Cet exemple utilise des variables d'environnement pour l'authentification Terraform. Pour plus d'informations, consultez Authentification Terraform.
Les ressources suivantes sont requises pour créer une instance ECS :
| |
**Resource**
|
**Description**
| | --- | --- | |
[alicloud_vpc](t2531765.xdita#)
|
Crée une instance VPC.
| |
[alicloud_vswitch](t2531741.xdita#)
|
Crée une instance vSwitch.
| |
[alicloud_security_group](t2532355.xdita#)
|
Crée un groupe de sécurité.
| |
[alicloud_security_group_rule](t2532354.xdita#)
|
Crée des règles entrantes et sortantes pour un groupe de sécurité.
| |
[alicloud_instance](t2532363.xdita#)
|
Crée une instance ECS.
|
**Resource**
|
**Description**
| | --- | --- | |
[alicloud_vpc](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc)
|
Crée une instance VPC.
| |
[alicloud_vswitch](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch)
|
Crée une instance vSwitch.
| |
[alicloud_security_group](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group)
|
Crée un groupe de sécurité.
| |
[alicloud_security_group_rule](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group_rule)
|
Crée des règles entrantes et sortantes pour un groupe de sécurité.
| |
[alicloud_instance](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance)
|
Crée une instance ECS.
|variable "name" { type = string default = "tf-test" } # Specify the region. variable "region" { type = string default = "cn-beijing" } # Public bandwidth. If greater than 0, a public IP address is assigned to the instance. variable "internet_max_bandwidth_out" { type = number default = 10 } # Specify the ECS instance type. variable "instance_type" { type = string default = "ecs.e-c1m1.large" } # Specify the image ID. variable "image_id" { default = "ubuntu_18_04_64_20G_alibase_20190624.vhd" } # Define tags for the resources. variable "tags" { type = map(string) default = { From = "Terraform" Usage = "demo" } } provider "alicloud" { region = var.region } # Get available zones for the specified instance type. data "alicloud_zones" "default" { available_instance_type = var.instance_type available_resource_creation = "VSwitch" available_disk_category = "cloud_ssd" } # Create a VPC. resource "alicloud_vpc" "vpc" { vpc_name = var.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 } # Create a security group. resource "alicloud_security_group" "default" { name = var.name vpc_id = alicloud_vpc.vpc.id } # Add an inbound rule to allow SSH access. 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" } # Create an ECS instance. resource "alicloud_instance" "instance" { availability_zone = data.alicloud_zones.default.zones.0.id security_groups = alicloud_security_group.default.*.id instance_type = var.instance_type system_disk_category = "cloud_essd_entry" image_id = var.image_id instance_name = var.name vswitch_id = alicloud_vswitch.vsw.id internet_max_bandwidth_out = var.internet_max_bandwidth_out tags = var.tags } output "ecs_id" { value = alicloud_instance.instance.id } output "ecs_ip" { value = alicloud_instance.instance.public_ip }
3. Initialiser et créer les ressources
Une fois le fichier de configuration Terraform rédigé, vous devez initialiser le répertoire de travail avant de créer les ressources.
3,1 Initialiser Terraform
Dans l'invite de commandes , accédez au dossier créé à l'étape 2, puis exécutez la commande terraform init. Pour toute nouvelle configuration Terraform, terraform init est la première commande à exécuter. Elle initialise le répertoire de travail, télécharge le plugin du fournisseur Alibaba Cloud requis et crée les autres fichiers nécessaires.
# Switch to the D: drive.
d:
# Switch to the folder path from Step 2. Replace tool/terraform/projects/ecs with your actual path.
cd tool/terraform/projects/ecs
# Run the initialization command.
terraform init
3,2 Créer les ressources
-
Exécutez
terraform planpour créer un plan d'exécution. Le plan affiche des informations détaillées sur toutes les ressources qui seront créées, modifiées ou détruites lors de l'exécution deterraform apply.... + router_table_id = (known after apply) + secondary_cidr_blocks = (known after apply) + status = (known after apply) + user_cidrs = (known after apply) + vpc_name = "tf_vpc_test" } # alicloud_vswitch.vsw will be created + resource "alicloud_vswitch" "vsw" { + availability_zone = (known after apply) + cidr_block = "172.16.0.0/21" + create_time = (known after apply) + id = (known after apply) + ipv6_cidr_block = (known after apply) + ipv6_cidr_block_mask = (known after apply) + name = (known after apply) + status = (known after apply) + vpc_id = (known after apply) + vswitch_name = (known after apply) + zone_id = "cn-beijing-a" } Plan: 5 to add, 0 to change, 0 to destroy. Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. -
Lorsque vous exécutez
terraform apply, les ressources sont créées selon le plan d'exécution généré parterraform plan. Pendant le processus de création, vous devez saisir yes lorsque vous y êtes invité pour poursuivre la création des ressources. Pour plus d'informations sur la transmission de valeurs aux variables, consultez Variable.Plan: 5 to add, 0 to change, 0 to destroy. Changes to Outputs: + ecs_id = (known after apply) + ecs_ip = (known after apply) 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 7s [id=vpc-2zexxx5: xxxk5w] alicloud_security_group.default: Creating... alicloud_vswitch.vsw: Creating... alicloud_security_group.default: Creation complete after 2s [id=sg-2zexxx4xxx9pa] alicloud_security_group_rule.allow_tcp_22: Creating... alicloud_security_group_rule.allow_tcp_22: Creation complete after 0s [id=sg-2zexxx4xxx9pa:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1] alicloud_vswitch.vsw: Creation complete after 4s [id=vsw-2zexxxxxxxxxxxgwdf] alicloud_instance.instance: Creating... alicloud_instance.instance: Still creating... [10s elapsed] alicloud_instance.instance: Creation complete after 14s [id=i-2zexxxxxxxxxxxkmo] Apply complete! Resources: 5 added, 0 changed, 0 destroyed. Outputs: ecs_id = "i-2zexxxxxxxxxxxkmo" ecs_ip = "3x.1xx.1xx.x41"
4. Consulter et gérer les ressources
Après le déploiement, vous pouvez gérer et maintenir votre infrastructure.
4,1 Consulter les ressources
-
Exécutez la commande
terraform showpour afficher des informations détaillées sur les ressources.D:\tool\terraform\projects\ecs>terraform show # data.alicloud_zones.default: data "alicloud_zones" "default" { available_disk_category = "cloud_ssd" available_instance_type = "ecs.e-c1m1.large" available_resource_creation = "VSwitch" enable_details = false id = "2398922967" ids = [ "cn-beijing-a", "cn-beijing-c", "cn-beijing-e", "cn-beijing-f", "cn-beijing-g", "cn-beijing-h", "cn-beijing-i", ] instance_charge_type = "PostPaid" multi = false spot_strategy = "NoSpot" zones = [ { available_disk_categories = [] available_instance_types = [] available_resource_creation = [] id = "cn-beijing-a" local_name = null multi_zone_ids = [] slb_slave_zone_ids = [] } ] } -
Exécutez la commande
terraform state listpour répertorier toutes les ressources créées.D:\tool\terraform\projects\ecs>terraform state list data.alicloud_zones.default alicloud_instance.instance alicloud_security_group.default alicloud_security_group_rule.allow_tcp_22 alicloud_vpc.vpc alicloud_vswitch.vsw -
Exécutez la commande
terraform state show <resource_type>.<resource_name>pour afficher des informations détaillées sur une ressource spécifique.D:\tool\terraform\projects\ecs>terraform state show alicloud_vpc.vpc # alicloud_vpc.vpc: resource "alicloud_vpc" "vpc" { cidr_block = "172.16.0.0/12" classic_link_enabled = false create_time = "2024-09-09T05:54:41Z" description = null enable_ipv6 = false id = "vpc-2zexxx" ipv6_cidr_block = null ipv6_cidr_blocks = [] name = "tf-test" resource_group_id = "rg-acfxxx" route_table_id = "vtb-2zexxx" router_id = "vrt-2zexxx" router_table_id = "vtb-2zexxx" secondary_cidr_blocks = [] status = "Available" system_route_table_description = null system_route_table_name = null user_cidrs = [] vpc_name = "tf-test" } Consultez les informations relatives aux ressources créées sur la console de management Alibaba Cloud.
4,2 Gérer les ressources
Après avoir créé ou modifié des ressources, Terraform enregistre leur état et leurs attributs dans le fichier terraform.tfstate . Vous pouvez utiliser les commandes terraform state pour gérer l'état. Pour plus d'informations, consultez Présentation de l'état.
4,3 Modifier les ressources
-
Modifiez la définition d'une ressource dans votre fichier de configuration (tel que main.tf ou un autre fichier .tf ). Par exemple, vous pouvez ajouter une nouvelle règle entrante au groupe de sécurité.
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" } -
Exécutez la commande
terraform planpour prévisualiser vos modifications.Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create 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-2zexxx9pa" + type = "ingress" } Plan: 1 to add, 0 to change, 0 to destroy. -
Si le plan est correct, exécutez la commande
terraform apply. Saisissezyeslorsque vous y êtes invité pour appliquer les modifications.Plan: 1 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_security_group_rule.allow_tcp_22: Creating... alicloud_security_group_rule.allow_tcp_443: Creating... alicloud_security_group_rule.allow_tcp_22: Creation complete after 1s [id=sg-2zexxx:xxx:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1] alicloud_security_group_rule.allow_tcp_443: Creation complete after 1s [id=sg-2zexxx:xxx:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: ecs_id = "i-2zexxx" ecs_ip = "3x.xxx.xxx.x41"
5. Détruire les ressources
Lorsque vous n'avez plus besoin des ressources, exécutez la commande terraform destroy pour supprimer l'infrastructure.
Plan: 0 to add, 0 to change, 6 to destroy.
Changes to Outputs:
- ecs_id = "i-2zxxx" -> null
- ecs_ip = "3xxx" -> null
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-2zexxx:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
alicloud_security_group_rule.allow_tcp_22: Destroying... [id=sg-2zexxx:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_instance.instance: Destroying... [id=i-2zexxxkmo]
alicloud_security_group_rule.allow_tcp_443: Destruction complete after 1s
alicloud_security_group_rule.allow_tcp_22: Destruction complete after 1s
alicloud_instance.instance: Still destroying... [id=i-2zexxxkmo, 10s elapsed]
alicloud_instance.instance: Destruction complete after 12s
alicloud_security_group.default: Destroying... [id=sg-2zexxxpa]
alicloud_vswitch.vsw: Destroying... [id=vsw-2zexxxvdf]
alicloud_security_group.default: Destruction complete after 2s
alicloud_vswitch.vsw: Destruction complete after 8s
alicloud_vpc.vpc: Destroying... [id=vpc-2zexxxk5w]
alicloud_vpc.vpc: Destruction complete after 6s
Destroy complete! Resources: 6 destroyed.