Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
Import de ressources Oracle Cloud Infrastructure dans un fichier d'état Terraform
Introduction
L'utilisation de Terraform présente de nombreux avantages pour la gestion de vos ressources Oracle Cloud Infrastructure (OCI). L'un d'eux est qu'il apporte cohérence et reproductibilité à vos déploiements d'infrastructure. Les configurations Terraform peuvent également être modularisées et réutilisées entre les projets, ce qui facilite la gestion et le redimensionnement des configurations d'infrastructure. De même, avec Terraform, le provisionnement et la gestion de l'infrastructure peuvent être automatisés, ce qui conduit à des déploiements cohérents et reproductibles. Un autre aspect important est que Terraform gère un fichier d'état qui suit l'état actuel de votre infrastructure. Ce fichier d'état est utilisé pour planifier et appliquer les modifications, ce qui permet à Terraform de déterminer les modifications à apporter pour atteindre l'état souhaité.
Toutefois, dans certains cas, toutes les ressources d'Oracle Cloud Infrastructure (OCI) ne sont pas gérées par Terraform. Cela se produit généralement lorsque vous provisionnez des ressources à l'aide de Terraform, qui sont ensuite présentes dans le fichier d'état, tandis que d'autres ressources sont créées manuellement par un autre utilisateur. Par la suite, vous découvrirez peut-être que ces ressources créées manuellement doivent être gérées par Terraform.
Prenez les éléments suivants en considération :
-
Créez un VCN avec Terraform afin de disposer d'un fichier d'état et d'un fichier de configuration Terraform qui gère ce VCN.
-
Ajoutez manuellement une nouvelle ressource (un calcul) dans votre location OCI.
Si vous voulez gérer le calcul que vous venez d'ajouter à l'aide du fichier de configuration et d'état Terraform dont vous disposez déjà, vous pouvez utiliser la commande d'import Terraform, mais d'autres étapes sont à suivre et vous devez mettre à jour le fichier de configuration Terraform.
Terraform v1.5.0
et les versions ultérieures prennent en charge les blocs d'import. Avec cette approche, votre code Terraform existant n'est pas modifié. Vous pouvez choisir de l'intégrer dans votre fichier de configuration Terraform existant, mais cela n'est pas obligatoire. L'objectif est d'importer des ressources OCI dans un fichier d'état Terraform qui n'est pas géré par Terraform.
Un aspect important est que le bloc d'import fonctionne avec les pipelines d'intégration continue et de déploiement continu. Vous pouvez également prévisualiser une opération d'importation avant de modifier l'état. À la fin, tout dépend de vous et de la complexité du cas d'utilisation.
Objectifs
- Créez une ressource manuellement (machine virtuelle OCI Compute) et importez-la dans un fichier d'état Terraform existant pour qu'elle soit gérée par Terraform.
Prérequis
-
Terraform
v1.5.0
et versions ultérieures. -
Environnement d'infrastructure créé et géré par Terraform. Dans ce tutoriel, nous avons un VCN avec des sous-réseaux, des listes de sécurité, des tables de routage, etc.
Tâche 1 : vérification de l'infrastructure existante créée avec Terraform
-
Exécutez la commande
terraform state list
pour vérifier les ressources OCI gérées par le fichier de configuration Terraform.terraform state list module.network.data.oci_core_services.all_oci_services module.network.oci_core_internet_gateway.igw["igw"] module.network.oci_core_nat_gateway.ngw["ngw"] module.network.oci_core_route_table.route_table["rt_priv"] module.network.oci_core_route_table.route_table["rt_pub"] module.network.oci_core_security_list.sl["sl_priv"] module.network.oci_core_security_list.sl["sl_public"] module.network.oci_core_service_gateway.this["sgw"] module.network.oci_core_subnet.subnets["sn1_priv"] module.network.oci_core_subnet.subnets["sn1_pub"] module.network.oci_core_subnet.subnets["sn2_priv"] module.network.oci_core_subnet.subnets["sn3_priv"] module.network.oci_core_virtual_network.vcn["vcn1"]
Comme vous pouvez le constater, nous disposons de VCN, de sous-réseaux, de listes de sécurité et de tables de routage.
-
Voici mes fichiers de configuration Terraform.
~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -l total 120 -rwxr-xr-x@ 1 fvass staff 849 Jul 10 2023 main.tf drwxr-xr-x@ 3 fvass staff 96 May 25 2023 modules -rwxr-xr-x@ 1 fvass staff 387 May 25 2023 output.tf -rw-r--r-- 1 fvass staff 379 Apr 3 09:18 provider.auto.tfvars -rw-r--r-- 1 fvass staff 29040 Apr 3 11:00 terraform.tfstate -rw-r--r-- 1 fvass staff 182 Apr 3 11:00 terraform.tfstate.backup -rwxr-xr-x@ 1 fvass staff 6007 Apr 3 10:59 terraform.tfvars -rwxr-xr-x@ 1 fvass staff 2869 May 25 2023 variables.tf
Tâche 2 : créer une machine virtuelle de calcul OCI à l'aide de la console OCI
Créez une machine virtuelle OCI Compute dans la région dans laquelle d'autres ressources OCI sont créées dans la tâche 1. Pour ce tutoriel, nous le créons dans l'un des sous-réseaux qui existe dans la tâche 1 (il n'est pas nécessaire qu'il se trouve dans l'un de ces sous-réseaux). Une fois créé, obtenez l'identificateur Oracle Cloud de calcul (OCID) tel qu'il sera requis dans d'autres tâches.
Remarque : cette machine virtuelle n'est pas gérée par Terraform pour le moment.
Tâche 3 : créer le fichier import_block.tf
Créez un fichier nommé import_block.tf
(vous pouvez lui attribuer un autre nom) dans le dossier où se trouve le code Terraform.
-
import_block.tf
.import { to = oci_core_instance.demo_inst_1 id = "ocid1.instance.oc1.iad.anuwcljswe6j4fqcqxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
- id : OCID de votre calcul créé dans la tâche 2.
- to : adresse d'instance que la ressource aura dans votre fichier d'état.
Nous allons importer une ressource de calcul à l'aide du type oci_core_instance
. Le nom de la ressource sera demo_inst_1
. Lorsque nous exécutons la commande terraform plan
, Terraform lit ce fichier et reconnaît qu'il doit importer une nouvelle ressource dans le fichier d'état existant.
Tâche 4 : exécutez la commande terraform plan
.
Exécutez la commande suivante . Cet argument generate-config-out
génère un fichier avec la configuration Terraform pour le calcul créé dans la tâche 2.
terraform plan --generate-config-out=compute.tf
La sortie doit ressembler à :
Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
╷
│ Warning: Config generation is experimental
│
│ Generating configuration during import is currently experimental, and the generated configuration format may change in future versions.
╵
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Terraform has generated configuration and written it to compute.tf. Please review the configuration and edit it as necessary before adding it to version control.
Nous avons maintenant un fichier compute.tf
.
~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -ltr
total 144
-rwxr-xr-x@ 1 fvass staff 387 May 25 2023 output.tf
drwxr-xr-x@ 3 fvass staff 96 May 25 2023 modules
-rwxr-xr-x@ 1 fvass staff 2869 May 25 2023 variables.tf
-rw-r--r-- 1 fvass staff 379 Apr 3 09:18 provider.auto.tfvars
-rwxr-xr-x@ 1 fvass staff 6007 Apr 3 10:59 terraform.tfvars
-rw-r--r-- 1 fvass staff 182 Apr 3 11:00 terraform.tfstate.backup
-rw-r--r-- 1 fvass staff 29040 Apr 3 11:00 terraform.tfstate
-rwxr-xr-x@ 1 fvass staff 855 Apr 3 11:12 main.tf
-rw-r--r-- 1 fvass staff 142 Apr 3 11:12 import_block.tf
-rw-r--r-- 1 fvass staff 4421 Apr 3 11:17 compute.tf
Tâche 5 : exécutez la commande terraform apply
.
Exécutez la commande suivante pour ajouter Compute au fichier d'état Terraform.
terraform apply
La sortie doit ressembler à :
Plan: 1 to import, 0 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.
Appliquez maintenant la configuration.
Tâche 6 : vérifier le fichier d'état
Exécutez la commande terraform state list
et vérifiez que oci_core_instance.demo_inst_1
est présent.
~/workORCL/_MY_OCI_INFRA/oci-vcn> terraform state list
oci_core_instance.demo_inst_1
module.network.data.oci_core_services.all_oci_services
module.network.oci_core_internet_gateway.igw["igw"]
module.network.oci_core_nat_gateway.ngw["ngw"]
module.network.oci_core_route_table.route_table["rt_priv"]
module.network.oci_core_route_table.route_table["rt_pub"]
module.network.oci_core_security_list.sl["sl_priv"]
module.network.oci_core_security_list.sl["sl_public"]
module.network.oci_core_service_gateway.this["sgw"]
module.network.oci_core_subnet.subnets["sn1_priv"]
module.network.oci_core_subnet.subnets["sn1_pub"]
module.network.oci_core_subnet.subnets["sn2_priv"]
module.network.oci_core_subnet.subnets["sn3_priv"]
module.network.oci_core_virtual_network.vcn["vcn1"]
Tâche 7 : supprimer le fichier import_block.tf
A ce stade, nous pouvons enlever le fichier import_block.tf
en toute sécurité. Terraform l'ignorera de toute façon.
Tâche 8 : Test sur Compute
Vous pouvez modifier la forme de votre calcul. Dans compute.tf
, remplacez memory_in_gbs
par shape_config
et exécutez terraform plan
pour voir la modification.
La sortie doit ressembler à :
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
# oci_core_instance.demo_inst_1 will be updated in-place
~ resource "oci_core_instance" "demo_inst_1" {
id = "ocid1.instance.oc1.iad.anuwcljswe.........."
# (20 unchanged attributes hidden)
~ shape_config {
~ memory_in_gbs = 16 -> 32
# (8 unchanged attributes hidden)
}
# (7 unchanged blocks hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
Liens connexes
Remerciements
- Auteur - Francisc Vass
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Import Oracle Cloud Infrastructure Resources into a Terraform State File
F96414-01
April 2024