Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
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:
-
Erstellen Sie ein VCN mit Terraform, sodass Sie über eine Statusdatei und eine Terraform-Konfigurationsdatei verfügen, die dieses VCN verwaltet.
-
Fügen Sie manuell eine neue Ressource (eine Compute-Ressource) in Ihrem OCI-Mandanten hinzu.
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
- Erstellen Sie die Ressource manuell (eine OCI Compute Virtual Machine), und importieren Sie sie in eine vorhandene Terraform-Statusdatei, um sie weiter von Terraform zu verwalten.
Voraussetzungen
-
Terraform
v1.5.0
und höher. -
Infrastrukturumgebung, die von Terraform erstellt und verwaltet wird. In diesem Tutorial ist ein VCN mit einigen Subnetzen, Sicherheitslisten, Routentabellen usw. vorhanden.
Aufgabe 1: Vorhandene Infrastruktur prüfen, die mit Terraform erstellt wurde
-
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.
-
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.
-
import_block.tf
.import { to = oci_core_instance.demo_inst_1 id = "ocid1.instance.oc1.iad.anuwcljswe6j4fqcqxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
- ID: OCID der Compute-Instanz, die in Aufgabe 2 erstellt wurde.
- to: Die Instanzadresse, die diese Ressource in Ihrer Statusdatei haben wird.
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.
Verwandte Links
Danksagungen
- Autor - Franziskusvass
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.
Import Oracle Cloud Infrastructure Resources into a Terraform State File
F96417-01
April 2024