Remarques :

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 :

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

Prérequis

Tâche 1 : vérification de l'infrastructure existante créée avec Terraform

  1. 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.

  2. 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.

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.

Remerciements

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.