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.
Configurer Terraform. Configurez l'authentification pour le fournisseur Alibaba Cloud.
Rédiger un fichier de configuration Terraform. Définissez les ressources à créer, telles que les utilisateurs RAM et les politiques.
Initialiser et créer les ressources. Téléchargez le plug-in du fournisseur et déployez les ressources déclarées.
Afficher et gérer les ressources. Inspectez, modifiez ou mettez à jour les ressources déployées selon l'évolution de vos besoins.
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.
-
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.tfL'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.
-
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
Créer un utilisateur RAM
Autoriser un utilisateur RAM à se connecter à la console
Créer une paire AccessKey pour un utilisateur RAM
Créer une politique d'accès
Accorder des autorisations à un utilisateur RAM
Copiez le code suivant dans main.tf. Appuyez sur
Escpour quitter le mode insertion, saisissez:wqet 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
-
Exécutez
terraform planpour prévisualiser les ressources qui seront créées, modifiées ou détruites parterraform 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. -
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 à 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
-
Exécutez
terraform showpour 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 } -
Exécutez
terraform state listpour 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 -
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" } 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
-
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.
Exécutez la commande
vim main.tfet appuyez sur la touche i pour passer en mode édition.-
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." } Appuyez sur Esc et saisissez :wq pour enregistrer le fichier.
-
Exécutez
terraform planpour 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. -
Si le plan est correct, exécutez
terraform apply. À l'invite, saisissezyespour 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.
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
}