Skripte und Statusdateien mit der Resource Discovery erstellen

Generieren Sie Terraform-Dateien für vorhandene Ressourcen in Ihrem Compartment.

Mit dem OCI-Ressourcen-Discovery-Feature können Sie:

  • Erstellen Sie in der Konsole Statusdateien für vorhandene Ressourcen, und fügen Sie diese Ressourcen dann einem Terraform-Setup hinzu.
  • Kopieren Sie Ihre vorhandene Infrastruktur in einem neuen Mandanten oder einer neuen Region.
  • Ermitteln Sie die Statusdrift für aktualisierte Ressourcen.

In diesem Tutorial erstellen Sie mit dem Feature zur Ressourcen-Discovery Skripte und Statusdateien für Ressourcen in Ihrem Account. Anschließend können Sie die Ressourcen mit Terraform verwalten.

Zu den wichtigsten Aufgaben gehören:

  • Erstellen Sie eine Ressource über die Konsole.
  • Erstellen Sie Skripte und eine Statusdatei für die Ressource über das Feature zur Ressourcen-Discovery.
  • Aktualisieren Sie die Ressource mit Terraform.
  • Bestätigen Sie, dass die Ressource in der Konsole aktualisiert wurde.
Ein Diagramm eines Benutzers, der über eine lokale Umgebung mit einem Oracle Cloud Infrastructure-Mandanten verbunden ist. Die lokale Umgebung ist Linux. Sie verfügt über die Binärdateien des Terraform-OCI-Providers. Ein Pfeil führt von der lokalen Umgebung zu Terraform Registry in der Cloud. Ein zweiter Pfeil sendet eine Nachricht mit dem Label "Authentifizieren?" von der lokalen Umgebung an den Oracle Cloud Infrastructure-Mandanten des Benutzers. Der dritte Pfeil mit dem Label "Daten abrufen, Skripte erstellen, Statusdatei erstellen" verläuft vom Mandanten zur lokalen Umgebung. Diese Pfeile deuten darauf hin, dass der Benutzer seine OCI-Providervariablen für die Authentifizierung durch seinen Mandanten eingerichtet hat. Der Benutzer kann dann Informationen aus dem Mandanten abrufen und Skripte und Statusdateien mit Terraform-OCI-Providerbefehlen und Terraform Registry erstellen. Der Mandant enthält einen Bucket mit dem Namen "rd-bucket" in einem Compartment mit dem Namen "rd-compartment". Die Ressourcen-Discovery ruft Informationen zu diesem Bucket ab, um Terraform-Skripte und eine Statusdatei in der Umgebung des Benutzers zu erstellen.

Weitere Informationen finden Sie unter:

Bevor Sie beginnen

Für eine erfolgreiche Ausführung des Tutorials benötigen Sie Folgendes:

Anforderungen
  • Einen Oracle Cloud Infrastructure-Account. Siehe Kostenlose Oracle Cloud-Promotions anfordern und verwalten.
  • Einen MacOS-, Linux- oder Windows-Rechner.
  • Terraform-Tutorialressourcen:
    • Gehen Sie durch alle Schritte unter Ressourcen-Discovery einrichten.
    • Notieren Sie sich den OCI-Terraform-Providerbefehl:
      • Cloud Shell: terraform-provider-oci_<version> von /usr/bin
      • Compute-Instanz oder lokale Umgebung: Verwenden Sie die im vorherigen Tutorial erstellte <shorter-alias> anstelle des Befehls terraform-provider-oci_<version>.
        • Beispiel: tf-oci
  • Terraform v1.1.3+:
    • Wenn Sie Cloud Shell verwenden, müssen Sie Terraform nicht installieren. Terraform ist bereits installiert.
    • Wenn Sie eine Compute-Instanz oder eine lokale Umgebung verwenden, führen Sie die Schritte unter Terraform installieren aus.

1. Ressource erstellen

Erstellen Sie über die Konsole einen Bucket im Mandanten. Dieser Bucket enthält kein Terraform-Skript. Erstellen Sie später mit der Ressourcen-Discovery ein Terraform-Skript und eine Statusdatei für den Bucket.

Compartment-Policy hinzufügen

Wenn sich Ihr Benutzername in der Gruppe Administrators befindet, überspringen Sie diesen Abschnitt. Andernfalls bitten Sie den Administrator, die folgende Policy zu Ihrem Mandanten hinzuzufügen:

allow group <a-group-your-username-belongs-to> to manage compartments in tenancy

Mit dieser Berechtigung können Sie ein Compartment für alle Ressourcen in Ihrem Tutorial erstellen.

Schritte zum Hinzufügen der Policy
  1. Melden Sie sich bei der Oracle Cloud-Konsole an.
  2. Wählen Sie im Navigationsmenü das Menü Profil Symbol für Profilmenü aus, und wählen Sie je nach der angezeigten Option Benutzereinstellungen oder Mein Profil aus.
  3. Wählen Sie je nach der angezeigten Option Gruppen oder Meine Gruppen aus.
  4. Kopieren Sie den Namen einer Gruppe, zu der Ihr Benutzername gehört.
  5. Öffnen Sie das Navigationsmenü , und wählen Sie Identität und Sicherheit aus. Wählen Sie unter Identität die Option Policys aus.
  6. Wählen Sie das Compartment aus: <your-tenancy>(root)
  7. Wählen Sie Policy erstellen aus.
  8. Geben Sie auf der Seite Policy erstellen die folgenden Werte ein:
    • Name: manage-compartments
    • Beschreibung: Allow the group <a-group-your-username-belongs-to> to list, create, update, delete and recover compartments in the tenancy.
    • Compartment: <your-tenancy>(root)
  9. Wählen Sie unter Policy Builder die Option Manuellen Editor anzeigen aus.
  10. Fügen Sie die folgende Policy ein:
    allow group <a-group-your-username-belongs-to> to manage compartments in tenancy
  11. Wählen Sie Erstellen.

Referenz: Details zu Kombinationen aus Verben und Ressourcentyp (siehe Ressourcentyp compartments)

Compartment erstellen

Erstellen Sie ein Compartment für die Ressourcen, die Sie in diesem Tutorial erstellen.

  1. Wählen Sie in der Konsole im Navigationsmenü die Option Identität und Sicherheit aus. Wählen Sie unter Identität die Option Compartments aus.
  2. Wählen Sie Compartment erstellen aus.
  3. Geben Sie folgende Werte ein:
    • Name: <your-compartment-name>
    • Beschreibung: Compartment für <your-description>.
    • Übergeordnetes Compartment: <your-tenancy>(Root)
  4. Wählen Sie Compartment erstellen aus.

Referenz: Compartment erstellen

Ressourcen-Policy hinzufügen

Wenn sich Ihr Benutzername in der Gruppe Administrators befindet, überspringen Sie diesen Abschnitt. Andernfalls bitten Sie den Administrator, die folgende Policy zu Ihrem Mandanten hinzuzufügen:

allow group <a-group-your-username-belongs-to> to manage all-resources in compartment <your-compartment-name>

Mit dieser Berechtigung können Sie alle Ressourcen im Compartment verwalten und Ihnen Administratorrechte in diesem Compartment erteilen.

Schritte zum Hinzufügen der Policy
  1. Öffnen Sie in der Konsole das Navigationsmenü , und wählen Sie Identität und Sicherheit aus. Wählen Sie unter Identität die Option Policys aus.
  2. Wählen Sie Ihr Compartment aus.
  3. Wählen Sie Policy erstellen aus.
  4. Geben Sie auf der Seite Policy erstellen die folgenden Werte ein:
    • Name: manage-<your-compartment-name>-resources
    • Beschreibung: Allow users to list, create, update, and delete resources in <your-compartment-name>.
    • Compartment: <your-tenancy>(root)
  5. Geben Sie unter Policy Builder die folgenden Werte ein:
    • Policy-Anwendungsfälle: Compartment-Verwaltung
    • Allgemeine Policy-Vorlagen: Verwalten des Compartments durch Compartment-Administratoren zulassen
    • Identitätsdomain: <identity-domain>
    • Gruppen: <a-group-your-username-belongs-to>
    • Speicherort: <your-compartment-name>
  6. Wählen Sie Erstellen.

Referenz: Allgemeine Policys

Bucket erstellen

Erstellen Sie in Ihrem Compartment einen Bucket.

  1. Öffnen Sie das Navigationsmenü , und wählen Sie Speicher aus. Wählen Sie unter Object Storage und Archive Storage die Option Buckets aus.
  2. Wählen Sie das Compartment aus: <your-compartment-name>.
  3. Wählen Sie Bucket erstellen aus.
  4. Geben Sie folgende Werte ein:
    • Bucket-Name: <your-bucket-name>
    • Übernehmen Sie die übrigen Standardwerte.
  5. Klicken Sie auf Erstellen.
Sie haben erfolgreich einen privaten Bucket erstellt.
Hinweis

Erstellen Sie den Bucket in <your-compartment-name>.

2. Ressource ermitteln

Ermitteln Sie den Bucket, den Sie in Ihrem Compartment erstellt haben.

Bucket ermitteln
  1. Löschen Sie im Verzeichnis $HOME das Verzeichnis resource-discovery, und erstellen Sie es erneut, das Sie für das Tutorial Ressourcen-Discovery einrichten erstellt haben.
    cd
    rm -R resource-discovery
    mkdir resource-discovery
  2. Führen Sie den folgenden Befehl aus:
    tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    Cloud Shell:
    terraform-provider-oci_<version> -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    • Ersetzen Sie <your-compartment-name> durch den Namen Ihres Compartments.
    Beispielausgabe:
    ...
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_namespace.export_namespace'
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_bucket.export_<your-bucket-name>'
    INFO <date> [INFO] Optional TF attribute 'kms_key_id' not found in source
    INFO <date> Found 2 'object_storage' resources. Generated under '/<home-directory>/resource-discovery/object_storage.tf'.
    INFO <date> === COMPLETED ===
    Hinweis

    Sie erhalten möglicherweise folgende Meldung:
    <date> ERROR IN GET: Service error: LifecyclePolicy NotFound. The bucket '<your-bucket-name>' does not define a lifecycle policy.. http status code: 404. Opc request id: iad-1:xxx

    Dieses Tutorial enthält keine Lebenszyklus-Policy. Informationen zum Planen des automatischen Archivierens oder Löschens dieses Buckets durch den Service finden Sie unter Object Lifecycle Management verwenden.

  3. Prüfen Sie die generierten Terraform-Skripte.
    cd resource-discovery
    ls
    • object_storage.tf
    • provider.tf
    • vars.tf
  4. Zeigen Sie das Skript object_storage.tf an.
    cat object_storage.tf
    ## This configuration was generated by terraform-provider-oci
    
    data oci_objectstorage_namespace export_namespace {
      compartment_id = var.compartment_ocid
    }
    resource oci_objectstorage_bucket export_<your-bucket-name> {
      access_type    = "NoPublicAccess"
      auto_tiering   = "Disabled"
      compartment_id = var.compartment_ocid
      defined_tags = {
      }
      freeform_tags = {
      }
      #kms_key_id = <<Optional value not found in discovery>>
      metadata = {
      }
      name                  = "<your-bucket-name>"
      namespace             = data.oci_objectstorage_namespace.export_namespace.namespace
      object_events_enabled = "false"
      storage_tier          = "Standard"
      versioning            = "Disabled"
    }
Sie haben erfolgreich Object Storage-Ressourcen in Ihrem Compartment ermittelt.
Erläuterung
  • Gehen Sie zu Nutzung (Ressourcen-Discovery).

    Es werden zwei Befehlsoptionen aufgeführt.

  • Wählen Sie die Befehlsoption aus, die compartment_name als Basisbefehl verwendet:
    terraform-provider-oci -command=export -compartment_name=<xxx> -output_path=<xxx>
  • Aktualisieren Sie den Basisbefehl:
    • Verwenden Sie anstelle von terraform-provider-oci den symbolischen Linkbefehl:

      tf-oci

    • Prüfen Sie den Abschnitt Parameterbeschreibung, um den Parametern im Basisbefehl die richtigen Werte hinzufügen:
      • Verwenden Sie den export-Befehl, um Ressourcen-Discovery auszuführen:

        -command=export

      • Geben Sie den Namen des Compartments ein, dessen Ressourcen Sie ermitteln möchten:

        -compartment_name=<your-compartment-name>

      • Erstellen Sie ein Verzeichnis für die folgenden Ressourcen:

        Beispiel: -output_path=$HOME/resource-discovery

  • Fügen Sie den folgenden Parameter aus dem Abschnitt Parameterbeschreibung zum Basisbefehl hinzu:
    • services
  • Verwenden Sie von den für services aufgeführten Service-Namen folgende:
    • object_storage
    • Beispiel: -services=object_storage
    • Wenn Sie mehrere Services ermitteln möchten, trennen Sie die Servicenamen durch ein Komma.
    • Beispiel: -services=object_storage,core
    • Die Servicenamen müssen nicht in Anführungszeichen gesetzt werden.
  • Erstellen Sie den Befehl:

    Beispiel:

    tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -output_path=$HOME/resource-discovery
    Hinweis

    Fehlerbehebung
    [ERROR] output_path does not exist: stat /$HOME/resource-discovery: no such file or directory

    Der Befehl zur Ressourcenerkennung erstellt kein Verzeichnis für die erkannten Ressourcen. Erstellen Sie ein Verzeichnis, und geben Sie den Pfad im Befehl an.

    [ERROR] no output directory specified

    Der Parser stopet bei dem Parameter, der keinen Gedankenstrich hat. Stellen Sie sicher, dass Sie am Anfang jedes Parameters einen Bindestrich hinzufügen. Beispiel: Wenn Sie services anstelle von -services verwenden, erreicht der Parser das Ausgabeverzeichnis nicht.

Statusdatei generieren
Zur Verfolgung der Ressourcen speichert Terraform den Status der Ressourcen in einer Statusdatei. Immer wenn Sie eine Ressource mit Terraform aktualisieren, aktualisiert Terraform die Statusdatei auf diese Änderung.
  1. Führen Sie den Befehl zur Ermittlung der Ressource mit dem Flag -generate_state aus:
    • In Cloud Shell:
    • terraform-provider-oci_<version> -command=export -compartment_id=<tenancy-ocid> -command=export -compartment_name=<your-compartment-name> -services=object_storage -generate_state -output_path=$HOME/resource-discovery
    • Auf Ihrer Compute-Instanz oder in Ihrer lokalen Umgebung:
      tf-oci -command=export -compartment_name=<your-compartment-name> -services=object_storage -generate_state -output_path=$HOME/resource-discovery
    Beispielausgabe:
    ...
    Terraform has been successfully initialized!
    ...
    Import successful!
    
    The resources that were imported are shown above. These resources are now in
    your Terraform state and will henceforth be managed by Terraform.
    
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_namespace.export_namespace'
    INFO <date> [INFO] ===> Generating resource 'oci_objectstorage_bucket.export_<your-bucket-name>'
    INFO <date> [INFO] Optional TF attribute 'kms_key_id' not found in source
    INFO <date> Found 2 'object_storage' resources. Generated under '/<home-directory>/resource-discovery/object_storage.tf'.
    INFO <date> === COMPLETED ===
    
    Hinweis

    Fehlerbehebung:
    • Fehler: Verfügbare Providerpakete konnten nicht abgerufen werden:
      • Wenn Sie sich in einem VPN befinden, prüfen Sie Ihre Proxyeinstellungen.
  2. Zeigen Sie den Inhalt des Verzeichnisses resource-discovery an.
    ls

    Beispielausgabe:

    • object_storage.tf
    • provider.tf
    • terraform.tfstate
    • vars.tf
    Hinweis

    Bei jeder Ausführung des Befehls zur Ressourcen-Discovery werden die <resource>.tf-Dateien überschrieben. Wenn Sie keinen Service angeben, wird eine <resource>.tf-Datei für jede Ressource im angegebenen Compartment erstellt.
  3. Zeigen Sie die generierte Terraform-Statusdatei an.
    cat terraform.tfstate

    Beispielausgabe:

    ...
    "instances": [
      {
          "bucket_id": "ocid1.bucket.xxx",
          "compartment_id": "ocid1.compartment.xxx",
          "created_by": "ocid1.user.xxx",
          "id": "xxx/<your-bucket-name>",
    ...

Herzlichen Glückwunsch. Sie haben eine Statusdatei für die Bucket-Ressource erstellt.

Referenzen:

3. Ressource aktualisieren

Aktualisieren Sie den Namen des Buckets in der Datei object_storage.tf, und führen Sie die Terraform-Skripte aus. Ihr Account authentifiziert die Skripte, und Terraform aktualisiert dann den Bucket-Namen. Bestätigen Sie den neuen Bucket-Namen über die Konsole.

Bucket-Name ändern
  1. Öffnen Sie im Editor die Datei object_storage.tf, und ändern Sie den Bucket-Name von <your-bucket-name> in <your-bucket-name>-2.
    Hinweis

    Sie können nur leere Buckets umbenennen.
    ## This configuration was generated by terraform-provider-oci
    
    data oci_objectstorage_namespace export_namespace {
      compartment_id = var.compartment_ocid
    }
    resource oci_objectstorage_bucket export_<your-bucket-name> {
      access_type    = "NoPublicAccess"
      auto_tiering   = "Disabled"
      compartment_id = var.compartment_ocid
      defined_tags = {
      }
      freeform_tags = {
      }
      #kms_key_id = <<Optional value not found in discovery>>
      metadata = {
      }
      name                  = "<your-bucket-name>-2"
      namespace             = data.oci_objectstorage_namespace.export_namespace.namespace
      object_events_enabled = "false"
      storage_tier          = "Standard"
      versioning            = "Disabled"
    }
  2. Speichern Sie die Datei object_storage.tf.
Initialisieren
Wenn Sie eine Statusdatei erstellen, initialisiert die Ressourcen-Discovery ein Arbeitsverzeichnis, das Terraform-Konfigurationsdateien enthält. Führen Sie diesen Befehl bei jeder Aktualisierung der Terraform-Skripte aus.
  1. Prüfen Sie den Inhalt des Verzeichnisses resource-discovery.
    ls -a

    Sie haben einen Ordner mit dem Namen .terraform, der die Plug-ins für den OCI-Provider enthält.

  2. Stellen Sie sicher, dass Terraform installiert ist.
    terraform -v
  3. Führen Sie den init-Befehl aus:
    terraform init

    Beispielausgabe:

    Initializing the backend...
    
    Initializing provider plugins...
    - Using previously-installed hashicorp/oci vx.x.x
    ...
    Terraform has been successfully initialized!
Plan
Ein Ausführungsplan ist die Liste der Änderungen, die Terraform-Pläne auf Ihren Account anwenden sollen.
  1. Erstellen Sie einen Ausführungsplan:
    terraform plan
  2. Prüfen Sie den Ausführungsplan.

    Mit dem terraform plan-Befehl prüfen Sie, ob die im Ausführungsplan angezeigten Änderungen Ihren Erwartungen entsprechen, ohne zu den echten Ressourcen zu wechseln. Beispielausgabe:

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
    -/+ destroy and then create replacement
    
    Terraform will perform the following actions:
    
      # oci_objectstorage_bucket.export_<your-bucket-name> must be replaced
    -/+ resource "oci_objectstorage_bucket" "export_<your-bucket-name>" {
    ...
        ~ name = "<your-bucket-name>" -> "<your-bucket-name>-2" # forces replacement
            namespace = "<your-tenancy>"
            ...
    
    Plan: 1 to add, 0 to change, 0 to destroy.
Einspielen

Bucket aktualisieren

  1. Terraform-Skripte ausführen:
    terraform apply
  2. Wenn Sie zur Bestätigung aufgefordert werden, geben Sie yes ein, damit der Bucket-Name ersetzt wird.

    Beispielausgabe:

    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Nach neuem Bucket-Namen in der Konsole suchen

  1. Öffnen Sie das Navigationsmenü , und wählen Sie Speicher aus. Wählen Sie unter Object Storage und Archive Storage die Option Buckets aus.
  2. Wählen Sie das Compartment aus: <your-compartment-name>.
  3. Prüfen Sie in der Liste der Buckets den Bucket-Namen.

    Der Name des Bucket lautet jetzt <your-bucket-name>-2.