Hinweis:

Oracle Cloud Infrastructure-Ressourcen in eine Terraform-Statusdatei importieren

Einführung

Die Verwendung von Terraform zur Verwaltung Ihrer Oracle Cloud Infrastructure-(OCI-)Ressourcen bietet viele Vorteile. Einer davon ist, dass es Konsistenz und Reproduzierbarkeit in Ihre Infrastrukturbereitstellungen bringt. Außerdem können Terraform-Konfigurationen projektübergreifend modularisiert und wiederverwendet werden, sodass Infrastrukturkonfigurationen einfach verwaltet und skaliert werden können. Ebenso können Infrastruktur-Provisioning und -Management mit Terraform automatisiert werden, was zu konsistenten und wiederholbaren Deployments führt. Ein weiterer wichtiger Aspekt ist, dass Terraform eine Statusdatei verwaltet, die den aktuellen Status Ihrer Infrastruktur verfolgt. Diese Statusdatei wird verwendet, um Änderungen zu planen und anzuwenden. So kann Terraform bestimmen, welche Änderungen vorgenommen werden müssen, um den gewünschten Status zu erreichen.

Es gibt jedoch Situationen, in denen nicht alle Ressourcen in Oracle Cloud Infrastructure (OCI) von Terraform verwaltet werden. Dies tritt häufig auf, wenn Sie Ressourcen mit Terraform bereitstellen, die dann in der Statusdatei vorhanden sind, während andere Ressourcen manuell von einer anderen Person erstellt werden. Später stellen Sie möglicherweise fest, dass diese manuell erstellten Ressourcen von Terraform verwaltet werden müssen.

Beachten Sie Folgendes:

Wenn Sie das neu hinzugefügte Compute mit der bereits vorhandenen Terraform-Konfigurations- und Statusdatei verwalten möchten, können Sie den Terraform-Importbefehl verwenden. Es sind jedoch weitere Schritte erforderlich, und Sie müssen die Terraform-Konfigurationsdatei aktualisieren.

Terraform v1.5.0 und höher unterstützt Importblöcke. Bei diesem Ansatz ist Ihr vorhandener Terraform-Code unverändert. Möglicherweise möchten Sie sie in die vorhandene Terraform-Konfigurationsdatei integrieren, dies ist jedoch nicht erforderlich. Das Ziel besteht darin, OCI-Ressourcen in eine Terraform-Statusdatei zu importieren, die nicht von Terraform verwaltet wird.

Ein wichtiger Aspekt ist, dass der Importblock mit CI/CD-Pipelines funktioniert. Außerdem können Sie eine Vorschau eines Importvorgangs anzeigen, bevor Sie den Status ändern. Am Ende hängt alles von Ihnen und der Komplexität des Anwendungsfalls ab.

Ziele

Voraussetzungen

Aufgabe 1: Vorhandene Infrastruktur prüfen, die mit Terraform erstellt wurde

  1. Führen Sie den Befehl terraform state list aus, um die OCI-Ressourcen zu prüfen, die von der Terraform-Konfigurationsdatei verwaltet werden.

    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"]
    

    Wie Sie sehen können, gibt es VCN, Subnetze, Sicherheitslisten und Routentabellen.

  2. Hier sind meine Terraform-Konfigurationsdateien.

    ~/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
    

Aufgabe 2: OCI Compute-VM mit der OCI-Konsole erstellen

Erstellen Sie eine OCI Compute-VM in derselben Region, in der auch andere OCI-Ressourcen in Aufgabe 1 erstellt werden. Für dieses Tutorial erstellen wir es in einem der Subnetze, die in Aufgabe 1 vorhanden sind (diese müssen sich nicht in einem dieser Subnetze befinden). Rufen Sie nach dem Erstellen die Compute-Oracle Cloud-ID (OCID) ab, wie sie bei weiteren Aufgaben erforderlich ist.

Hinweis: Diese VM wird derzeit nicht von Terraform verwaltet.

Aufgabe 3: Datei import_block.tf erstellen

Erstellen Sie eine Datei mit dem Namen import_block.tf (Sie können ihr einen anderen Namen geben) in demselben Ordner, in dem sich der Terraform-Code befindet.

Wir importieren eine Compute-Ressource mit dem Typ oci_core_instance. Der Ressourcenname lautet demo_inst_1. Wenn Sie den Befehl terraform plan ausführen, liest Terraform diese Datei und erkennt, dass eine neue Ressource in die vorhandene Statusdatei importiert werden muss.

Aufgabe 4: Befehl terraform plan ausführen

Führen Sie den folgenden Befehl aus. Mit diesem Argument generate-config-out wird eine Datei mit der Terraform-Konfiguration für die in Aufgabe 2 erstellte Compute-Instanz generiert.

terraform plan --generate-config-out=compute.tf

Die Ausgabe sollte folgendermaßen aussehen:

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.

Jetzt wird eine compute.tf-Datei angezeigt.

~/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

Aufgabe 5: Befehl terraform apply ausführen

Führen Sie den folgenden Befehl aus, um Compute zu Ihrer Terraform-Statusdatei hinzuzufügen.

terraform apply

Die Ausgabe sollte folgendermaßen aussehen:

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.

Wenden Sie die Konfiguration an.

Aufgabe 6: Statusdatei prüfen

Führen Sie den Befehl terraform state list aus, und prüfen Sie, ob oci_core_instance.demo_inst_1 vorhanden ist.

~/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"]

Aufgabe 7: Datei import_block.tf entfernen

An diesem Punkt können Sie die Datei import_block.tf sicher entfernen. Er wird von Terraform trotzdem ignoriert.

Aufgabe 8: Test auf Compute

Sie können die Ausprägung Ihrer Compute-Ressourcen ändern. Ändern Sie in compute.tf die memory_in_gbs von shape_config, und führen Sie terraform plan aus, um die Änderung anzuzeigen.

Die Ausgabe sollte folgendermaßen aussehen:

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.

Danksagungen

Weitere Lernressourcen

Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Außerdem können Sie education.oracle.com/learning-explorer besuchen, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.