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.
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.
Alibaba Cloud propose deux environnements en ligne permettant d'exécuter des commandes Terraform sans installation locale :
Terraform Explorer : cliquez sur Initiate Debugging pour exécuter l'exemple de code de cette rubrique.
Cloud Shell : copiez le code fourni dans cette rubrique et exécutez directement les commandes Terraform dans Créer des ressources avec Terraform.
Accédez au site officiel de Terraform pour télécharger le package correspondant à votre système d'exploitation.
-
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/binWindows
Extrayez le package. Par exemple, le répertoire de destination est D:\tool\terraform.
Sur le bureau, cliquez avec le bouton droit sur Ce PC et sélectionnez .
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.
-
Exécutez la commande
terraformpour vérifier la configuration du chemin d'accès.terraformSi 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.
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 :
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.
-
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.
-
Créez des variables d'environnement pour stocker vos identifiants d'authentification.
Linux
ImportantLes variables d'environnement définies avec la commande
exportsont 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
Sur le bureau, cliquez avec le bouton droit sur Ce PC et sélectionnez .
-
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.
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
alicloud_vpc : crée un VPC.
alicloud_vswitch : crée un vSwitch.
alicloud_security_group : crée un groupe de sécurité.
alicloud_security_group_rule : crée une règle de groupe de sécurité.
alicloud_instance : crée une instance ECS.
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.
-
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.tfWindows
Créez un nouveau dossier nommé
ecs-quickstart. Dans ce dossier, créez un fichier de configuration Terraform nommé main.tf. -
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 } -
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 } -
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" } -
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
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é.
-
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" } -
Exécutez la commande
terraform planpour 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 estsg-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. -
Si les modifications correspondent à vos attentes, exécutez la commande
terraform applypour appliquer les changements à votre infrastructure. Lorsque Terraform vous demande de confirmer, saisissezyeset 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 estsg-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
Pour les types
ResourceetData Sourcepris en charge par ECS, consultez la rubrique Liste des ressources prises en charge.Vous pouvez utiliser Terraform dans Terraform Explorer pour déboguer le code Terraform sans installer ni configurer Terraform.
Vous pouvez utiliser Terraform dans Créer des ressources avec Terraform pour exécuter manuellement les commandes Terraform sans installer ni configurer Terraform.