Note :

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 :

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

Préalables

Tâche 1 : Vérifier 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 voir, nous avons des VCN, des sous-réseaux, des listes de sécurité et des 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 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.

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.

Confirmation

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.