Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Introduction à l' niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles propres à votre environnement en nuage.
Importer des ressources Oracle Cloud Infrastructure dans un fichier d'état Terraform
Présentation
L'utilisation de Terraform pour gérer vos ressources Oracle Cloud Infrastructure (OCI) présente de nombreux avantages. L'un d'eux est qu'il apporte cohérence et reproductibilité à vos déploiements d'infrastructure. Une autre est que les configurations Terraform peuvent être modulaires et réutilisées dans les projets, ce qui facilite la gestion et l'adaptation des configurations d'infrastructure. De même, avec Terraform, le provisionnement et la gestion de l'infrastructure peuvent être automatisés, menant à des déploiements cohérents et reproductibles. Un autre aspect important est que Terraform conserve un fichier d'état qui suit l'état courant de votre infrastructure. Ce fichier d'état est utilisé pour planifier et appliquer des 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 une autre personne. Par la suite, vous constaterez peut-être que vous avez besoin de ces ressources créées manuellement pour être gérées par Terraform.
Tenez compte des points suivants :
-
Créez un VCN avec Terraform afin d'avoir un fichier d'état et un fichier de configuration Terraform qui gère ce VCN.
-
Ajoutez manuellement une nouvelle ressource (calcul) dans votre location OCI.
Si vous voulez gérer le calcul nouvellement ajouté à l'aide du fichier de configuration et d'état Terraform que vous avez déjà, vous pouvez utiliser la commande d'importation Terraform, mais il y a d'autres étapes à suivre et vous devez mettre à jour le fichier de configuration Terraform.
Terraform v1.5.0
et versions supérieures prennent en charge les blocs d'importation. Avec cette approche, votre code Terraform existant n'est pas modifié. Vous pouvez choisir de l'intégrer au fichier de configuration Terraform existant, mais cela n'est pas nécessaire. 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'importation fonctionne avec les pipelines d'intégration et de développement en continu. De plus, il vous permet de 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 (une machine virtuelle de calcul OCI) et importez-la dans un fichier d'état Terraform existant pour la gérer davantage par Terraform.
Préalables
-
Terraform
v1.5.0
et versions supé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érifier 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 voir, nous avons des VCN, des sous-réseaux, des listes de sécurité et des 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 de calcul OCI dans la même région que celle où d'autres ressources OCI sont créées lors de la tâche 1. Pour ce tutoriel, nous le créons dans l'un des sous-réseaux qui existent dans la tâche 1 (il n'est pas nécessaire de le faire dans l'un de ces sous-réseaux). Après l'avoir créé, obtenez l'identificateur Oracle Cloud (OCID) de calcul, car il sera requis pour d'autres tâches.
Note : 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 donner un nom différent) dans le même dossier que celui 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éé lors de la tâche 2.
- à : Adresse d'instance que la ressource aura dans votre fichier d'état.
Nous importerons 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écuter la commande terraform plan
Exécutez la commande suivante . Cet argument generate-config-out
générera un fichier avec la configuration Terraform pour le calcul créé lors de 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.
Maintenant, nous avons 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écuter la commande terraform apply
Exécutez la commande suivante pour ajouter un calcul à votre 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.
Maintenant, appliquez 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
À ce stade, nous pouvons supprimer le fichier import_block.tf
en toute sécurité. Il sera quand même ignoré par Terraform.
Tâche 8 : Tester le service de calcul
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
Confirmation
- Auteur - Francisc Vass
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez 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
F96418-01
April 2024