Qu'est-ce qu'une ressource
Une ressource est un élément d'infrastructure que vous configurez à l'aide du code Terraform : une instance Elastic Compute Service (ECS), un compartiment Object Storage Service (OSS), un réseau Virtual Private Cloud (VPC) ou tout autre objet cloud. Terraform appelle l'API de chaque service Alibaba Cloud pour créer et gérer ces ressources, notamment les instances ECS, les modèles de déploiement d'instances ECS, les groupes de sécurité, les réseaux VPC, les règles de pare-feu, les VPN, les tables de routage, les bases de données et les équilibreurs de charge Server Load Balancers (SLB).
Syntaxe de déclaration des ressources
Définissez les ressources dans les fichiers .tf. Placez les ressources de types similaires dans le même dossier et déclarez-les dans le fichier main.tf.
Dans cet exemple, main.tf constitue le fichier de configuration racine :
-
resource
Le mot-clé
resourcedéclare un seul objet d'infrastructure. -
resource_type
resource_typeidentifie le type de ressource à créer. Les types disponibles proviennent du provider déclaré dans le bloc provider Terraform. Un provider est un plugin qui expose un ensemble de types de ressources. -
resource_name
resource_nameest un identifiant logique pour la ressource au sein du dossier de configuration actuel — il ne s'agit pas du nom de l'objet d'infrastructure réel créé dans le cloud. La valeurresource_namedoit être unique parmi toutes les ressources du même type dans le dossier actuel. -
Paramètres de ressource
Les paramètres de ressource utilisent des expressions pour déclarer les propriétés d'une ressource. Certains paramètres sont obligatoires lors de la création ; d'autres sont facultatifs et permettent de configurer des fonctionnalités avancées.
Un seul fichier de configuration Terraform peut contenir plusieurs ressources du même type ou de types différents, et ces ressources peuvent s'étendre sur plusieurs providers.
Dans cet exemple, le premier bloc resource déclare un réseau VPC et le second déclare un vSwitch, tous deux dans le même fichier main.tf. La ressource VPC est de type alicloud_vpc et nommée main-vpc ; la ressource vSwitch est de type alicloud_vswitch et nommée main-vswitch.
Tous les paramètres du bloc alicloud_vpc sont facultatifs. Par exemple, cidr_block est facultatif car il possède une valeur par défaut — si vous l'omettez, le provider ou le backend du service VPC en génère une automatiquement.
Pour alicloud_vswitch, vpc_id, cidr_block et zone_id sont obligatoires ; tous les autres paramètres sont facultatifs.
Les paramètres de ressource sont spécifiques à chaque type de ressource et varient considérablement d'un type à l'autre. Par exemple, alicloud_vpc accepte vpc_name et cidr_block, tandis que alicloud_vswitch accepte vswitch_name, cidr_block, zone_id et vpc_id.
Référence des paramètres d'attribut
Pour référencer une propriété de ressource depuis un autre bloc resource, utilisez le format suivant : <resource_type>.<resource_name>.<attribute>.
Dans l'exemple ci-dessus, alicloud_vswitch requiert l'ID VPC lors de la création. Comme l'ID VPC est généré par le serveur lors de la création du VPC, alicloud_vswitch le référence depuis le bloc alicloud_vpc en utilisant alicloud_vpc.main_vpc.id.
Les références croisées entre ressources ne fonctionnent que lorsque les ressources concernées sont définies dans des fichiers situés dans le même dossier de configuration racine.
Considérations relatives aux définitions de ressources
Gardez à l'esprit les règles suivantes lors de la définition des blocs resource :
-
Le nom de la ressource doit être unique
Chaque ressource est identifiée par son type et son nom au sein du dossier de configuration actuel. Les noms de ressources doivent être uniques parmi toutes les ressources du même type dans ce dossier.
-
Le type de ressource ne peut pas être personnalisé
Le type de ressource est un mot-clé fixe lié à un provider. Un compartiment OSS, par exemple, doit utiliser le mot-clé
alicloud_oss_bucket. Tout autre identifiant entraîne l'échec des commandesterraform planetterraform apply. -
Tous les paramètres de configuration doivent être déclarés dans le corps du bloc resource
Toutes les propriétés d'infrastructure d'une ressource doivent être déclarées à l'intérieur du bloc resource, entre les accolades
{}.Lorsque vous exécutez une commande Terraform, une erreur similaire à la suivante s'affiche :
Error: Argument or block definition required on main.tf line 4: 4: storage_class An argument or block definition is required here. -
Tous les paramètres obligatoires doivent être définis
L'omission d'un paramètre obligatoire entraîne l'échec des commandes
terraform planetterraform apply.Lorsque vous exécutez une commande Terraform, une erreur similaire à la suivante s'affiche :
Error: Missing required argument on main.tf line 1, in resource "alicloud_vswitch" "main_vswitch": 1: resource "alicloud_vswitch" "main_vswitch" { The argument "vpc_id" is required, but no definition was found.