Resource Discovery einrichten

Richten Sie die Ressourcen-Discovery ein, um Terraform-Dateien für vorhandene Ressourcen in Ihrem Compartment zu generieren.

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 richten Sie das Ressourcen-Discovery-Feature des Oracle Cloud Infrastructure-Terraform-Providers in Ihrer lokalen Umgebung ein. Um das Setup zu bestätigen, führen Sie die Ressourcen-Discovery aus, um Informationen aus Ihrem Mandanten abzurufen und ein entsprechendes Skript zu erstellen.

Zu den wichtigsten Aufgaben gehören:

  • Erstellen Sie RSA-Schlüssel.
  • Installieren Sie die Binärdateien des Terraform-OCI-Providers.
  • Richten Sie API-Authentifizierungsvariablen für den Terraform-OCI-Provider ein.
  • Authentifizieren Sie die CLI-Befehle des OCI-Providers.
  • Erstellen Sie mit dem Feature zur Ressourcen-Discovery ein Skript in Ihrer Umgebung bezüglich der Availability-Domains in Ihrem Mandanten.
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. Ein dritter Pfeil mit dem Label "Daten abrufen" 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 mit Terraform-OCI-Providerbefehlen und Terraform Registry abrufen. In diesem Beispiel zeigt der Mandant drei Availability-Domains an. Diese Informationen werden von der Ressourcen-Discovery abgerufen, um Terraform-Skripte in der Benutzerumgebung zu erstellen.

Weitere Informationen finden Sie unter Anwendungsfälle und Vorteile.

Bevor Sie beginnen

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

MacOS oder Linux

1. Vorbereiten

Bereiten Sie Ihre Umgebung auf die Authentifizierung und Ausführung von Befehlen zur Ressourcen-Discovery vor. Erfassen Sie außerdem die Informationen, die Ihr Account zur Authentifizierung von Befehlen benötigt.

RSA-Schlüssel erstellen

Sie erstellen RSA-Schlüssel für eine API-Anmeldung bei Ihrem Oracle Cloud Infrastructure-Account.

Hinweis

Wenn Sie Cloud Shell oder Resource Manager verwenden, überspringen Sie das Erstellen der RSA-Schlüssel. Sie sind bereits authentifiziert, wenn Sie sich bei der OCI-Konsole anmelden.
  1. Öffnen Sie ein Terminalfenster.
  2. Erstellen Sie unter Ihrem Home-Verzeichnis ein Verzeichnis .oci.
    mkdir <your-home-directory>/.oci

    Beispiel für Oracle Linux:

    mkdir /home/opc/.oci
    Hinweis

    Wenn Sie das Windows-Subsystem für Linux (WSL) verwenden, erstellen Sie das Verzeichnis /.oci direkt in der Linux-Umgebung. Wenn Sie das Verzeichnis /.oci in einem Ordner /mnt (Windows-Dateisystem) erstellen, müssen Sie mit dem Befehl chmod die Berechtigungen für die WSL-Konfigurationsdateien ändern.
  3. Generieren Sie einen 2048-Bit-Private Key in einem PEM-Format:
    openssl genrsa -out <your-home-directory>/.oci/<your-rsa-key-name>.pem 2048
  4. Ändern Sie die Berechtigungen, damit nur Sie die Private-Key-Datei lesen und darin schreiben können:
    chmod 600 <your-home-directory>/.oci/<your-rsa-key-name>.pem
  5. Generieren Sie den Public Key:
    openssl rsa -pubout -in <your-home-directory>/.oci/<your-rsa-key-name>.pem -out $HOME/.oci/<your-rsa-key-name>_public.pem
  6. Kopieren Sie den Public Key.
    Geben Sie im Terminal Folgendes ein:
    cat <your-home-directory>/.oci/<your-rsa-key-name>_public.pem

    Beispiel (Auszug):

    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoTFqF...
    ...
    -----END PUBLIC KEY——
  7. Fügen Sie den Public Key zu Ihrem Benutzeraccount hinzu.
    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 API-Schlüssel aus.
    4. Wählen Sie API-Schlüssel hinzufügen aus.
    5. Wählen Sie Public Key einfügen aus.
    6. Fügen Sie den Wert aus dem vorherigen Schritt ein, einschließlich der Zeilen mit BEGIN PUBLIC KEY und END PUBLIC KEY.
    7. Klicken Sie auf Hinzufügen.

      Das Dialogfeld Vorschau der Konfigurationsdatei wird geöffnet. Beispiel:

      [DEFAULT]
      user=ocid1.user.oc1..exampleid
      fingerprint=exampleid
      tenancy=ocid1.tenancy.oc1..exampleid
      region=us-ashburn-1
      key_file=<path to your private keyfile> # TODO
    8. Wählen Sie Kopieren aus, und fügen Sie sie in den Notizblock ein.

      Die Vorschau der Konfigurationsdatei enthält Informationen, die Sie später benötigen, wie Mandanten- und Benutzer-OCIDs, Fingerprint und Region.

Sie haben nun die RSA-Schlüssel für die Verbindung mit dem OCI-Account eingerichtet.

Verweis
So generieren Sie einen API-Signaturschlüssel
Listen-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-that-your-username-belongs-to> to read all-resources in tenancy

Mit dieser Berechtigung können Sie alle Ressourcen im Mandanten auflisten.

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: list-resources
    • Beschreibung: Allow the group <a-group-that-your-username-belongs-to> to list the resources in this 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-that-your-username-belongs-to> to read all-resources in tenancy
  11. Wählen Sie Erstellen.

Referenz: Allgemeine Policys

Erforderliche Informationen erfassen

Erstellen Sie die Informationen, die Sie zum Authentifizieren der Terraform-OCI-Providerbefehle benötigen, und kopieren Sie sie in Notepad.

Hinweis

Wenn Sie Cloud Shell verwenden, müssen Sie die <tenancy-ocid> nur im folgenden Schritt suchen.
  1. Erfassen Sie die folgenden Zugangsdateninformationen aus der Oracle Cloud-Konsole.
    • Mandanten-OCID: <tenancy-ocid>
      • Wählen Sie im Navigationsmenü das Menü Profil Symbol für Profilmenü aus, und wählen Sie Mandant: <your_tenancy_name> aus.
    • Benutzer-OCID: <user-ocid>
      • 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.
      • OCID kopieren.
    • Fingerprint: <fingerprint>
      • 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.
      • Wählen Sie API-Schlüssel aus.
      • Kopieren Sie den Fingerprint, der mit dem RSA-Public Key verknüpft ist, den Sie im Abschnitt RSA-Schlüssel erstellen erstellt haben. Das Format lautet: xx:xx:xx...xx.
    • Region: <region-identifier>
      • Suchen Sie in der Navigationsleiste der Konsole Ihre Region.
      • Suchen Sie nach der <region-identifier> Ihrer Region unter Regionen und Availability-Domains. Beispiel: us-ashburn-1.
  2. Erfassen Sie die folgenden Informationen aus der Umgebung.
    • Private-Key-Pfad: <rsa-private-key-path>
      • Pfad zum RSA-Private Key, den Sie unter RSA-Schlüssel erstellen erstellt haben. Beispiel: $HOME/.oci/<your-rsa-key-name>.pem.
Terraform-OCI-Provider installieren
Hinweis

Wenn Sie Cloud Shell verwenden, überspringen Sie diesen Abschnitt.

Installieren Sie die neueste Version der Terraform-OCI-Providerbinären v4.2+:

  1. Navigieren Sie in einem Browser zu HashiCorp Releases.
  2. Wählen Sie den letzten Link aus.
  3. Klicken Sie auf den Link für Ihre Umgebung, und kopieren Sie die Linkadresse. Beispiel für Linux 64 Bit:
    https://releases.hashicorp.com/terraform-provider-oci/4.59.0/terraform-provider-oci_4.59.0_linux_amd64.zip
  4. Erstellen Sie in Ihrer Umgebung ein temporäres Verzeichnis, und wechseln Sie in dieses Verzeichnis:
    mkdir temp
    cd temp
  5. Laden Sie die Terraform-ZIP-Datei herunter. Beispiel
    wget https://releases.hashicorp.com/terraform-provider-oci/4.59.0/terraform-provider-oci_4.59.0_linux_amd64.zip
  6. Datei komprimieren. Beispiel
    unzip terraform-provider-oci_4.59.0_linux_amd64.zip
  7. Verschieben Sie den dekomprimierten Ordner in /usr/local/bin. Beispiel:
    sudo mv terraform-provider-oci_v4.59.0_x4 /usr/local/bin
    Hinweis

    Verwenden Sie sudo für das Verzeichnis /usr/local/bin, wenn Sie die Befehle nicht ausführen können.
  8. Verwenden Sie einen symbolischen Link, um den Befehl terraform-provider-oci_<version> zu kürzen:
    sudo ln -s <source-executable> <shorter-alias>
    cd /usr/local/bin/
    sudo ln -s terraform-provider-oci_<version> tf-oci

    Verwenden Sie für dieses Tutorial tf-oci für <shorter-alias> anstelle von <source-executable>.

  9. Gehen Sie zu Ihrem Home-Verzeichnis zurück:
    cd
  10. Prüfen Sie die Terraform-OCI-Providerversion:
    Hinweis

    Unter MacOS müssen Sie eine Sicherheitsausnahme für die ausführbare Datei erstellen.
    tf-oci

    Beispielausgabe: [INFO] terraform-provider-oci 4.59.0.

2. Authentifizierungsskript erstellen

Erstellen Sie ein Shell-Skript, um den OCI-Providerauthentifizierungsvariablen Authentifizierungsinformationen zuzuweisen. Ihr Oracle Cloud Infrastructure-Account authentifiziert Ihre OCI-Providerbefehle über die Werte, die diesen Parametern zugewiesen sind.

Authentifizierung hinzufügen
Hinweis

Wenn Sie Cloud Shell oder Resource Manager verwenden, müssen Sie keine Authentifizierung hinzufügen. Fahren Sie mit Abschnitt 3 fort. Ressource suchen.
  1. Erstellen Sie eine ausführbare Skriptdatei an einer beliebigen Stelle im PATH, und nennen Sie sie provider-oci.sh. Beispiel: Wenn ~/bin im PATH enthalten ist, gehen Sie folgendermaßen vor:
    cd ~/bin
    touch provider-oci.sh
    chmod 755 provider-oci.sh
    ls -l

    Sie erhalten in etwa Folgendes:

    -rwxr-xr-x 1 <your-username> <your-username> 0 <date> provider-oci.sh
  2. Fügen Sie folgenden Code zu provider-oci.sh hinzu.

    Ersetzen Sie die Felder mit Klammern durch die Informationen, die Sie unter Erforderliche Informationen erfassen erfasst haben.

    #!/bin/bash
    export TF_VAR_tenancy_ocid="<tenancy-ocid>"
    export TF_VAR_user_ocid="<user-ocid>"
    export TF_VAR_fingerprint="<fingerprint>"
    export TF_VAR_private_key_path="<rsa-private-key-path>"
    export TF_VAR_region="<region-identifier>"
  3. Speichern Sie die Datei provider-oci.sh.
Erläuterung
  • Gehen Sie zu Authentifizierung (Ressourcen-Discovery).
  • Richten Sie die folgenden Umgebungsvariablen für die auf API-Schlüssel basierte Authentifizierung ein:
    • TF_VAR_tenancy_ocid
    • TF_VAR_user_ocid
    • TF_VAR_fingerprint
    • TF_VAR_private_key_path
    • TF_VAR_region
Umgebungsvariablen exportieren

In diesem Abschnitt führen Sie die Datei provider-oci.sh aus, um die Authentifizierungsvariablen des OCI-Providers zu Ihren Umgebungsvariablen hinzuzufügen.

  1. Führen Sie die Datei provider-oci.sh im Verzeichnis $HOME/bin aus.
    source provider-oci.sh
  2. Stellen Sie sicher, dass die Authentifizierungsvariablen des OCI-Providers zu den Umgebungsvariablen hinzugefügt wurden.
    env | sort

    Die Variablen werden in alphabetischer Reihenfolge angezeigt. Beispiel:

    ...
    TF_VAR_fingerprint=<fingerprint>
    TF_VAR_private_key_path=<rsa-private-key-path>
    TF_VAR_region=<region-identifier>
    TF_VAR_tenancy_ocid=<tenancy-ocid>
    TF_VAR_user_ocid=<user-ocid>
    ...
  3. Um die Umgebungsvariablen zu laden, hängen Sie beim Starten einer neuen Shell den Befehl source ~/bin/provider-oci.sh an .bashrc an.
    source ~/bin/provider-oci.sh

3. Ressource ermitteln

Ermitteln Sie die Availability-Domains in Ihrem Mandanten.

Ressourcen-Discovery ausführen

Jeder Mandant verfügt über eine Liste von Availability-Domains. Durch Ermittlung der Availability-Domains in Ihrer Region bestätigen Sie Folgendes:

  • Ihr Oracle Cloud Infrastructure-Account kann Ihre Oracle Cloud Infrastructure-Providerbefehle authentifizieren.
  • Mit dem Feature zur Ressourcen-Discovery erhalten Sie Informationen von Ihrem Account.
  1. Erstellen Sie im Verzeichnis $HOME das Verzeichnis resource-discovery.
    cd
    mkdir resource-discovery
  2. Wenn Sie Cloud Shell verwenden, suchen Sie die installierte OCI-Terraform-Providerdatei im Verzeichnis /usr/bin.
    ls /usr/bin

    Der Dateiname lautet:

    terraform-provider-oci_<version>

    Beispieldatei:

    terraform-provider-oci_v5.2.1
  3. Führen Sie den folgenden Befehl aus:
    • In Cloud Shell:
      terraform-provider-oci_<version> -command=export -compartment_id=<tenancy-ocid> -services=availability_domain -output_path=$HOME/resource-discovery
    • Auf Ihrer Compute-Instanz oder in Ihrer lokalen Umgebung:
      tf-oci -command=export -compartment_id=<tenancy-ocid> -services=availability_domain -output_path=$HOME/resource-discovery
    Wichtig

    • Ersetzen Sie <tenancy-ocid> durch die Informationen unter Erforderliche Informationen erfassen.
    • Wenn Sie Cloud Shell verwenden, ersetzen Sie terraform-provider-oci_<version> durch den Dateinamen, den Sie in Schritt 2 gefunden haben.

    Beispielausgabe:

    ...
    INFO <date> [INFO] ===> Generating resource 'oci_identity_availability_domain.export_QnsC-US-ASHBURN-AD-1'
    INFO <date> [INFO] ===> Generating resource 'oci_identity_availability_domain.export_QnsC-US-ASHBURN-AD-2'
    INFO <date> [INFO] ===> Generating resource 'oci_identity_availability_domain.export_QnsC-US-ASHBURN-AD-3'
    ...
    INFO <date> Found 6 'availability_domain' resources. Generated under '/<home-directory>/resource-discovery/availability_domain.tf'.
    INFO <date> === COMPLETED ===
    Hinweis

    • Die Mandanten-OCID ist die Compartment-OCID für das Root Compartment. Wenn Sie eine bestimmte <compartment-ocid> oder Ihre <tenancy-ocid> angeben, werden dieselben Availability-Domains ausgegeben.
    • Um Identitätsressourcen zu ermitteln, müssen Sie keine Compartment-OCID angeben. Im vorherigen Beispiel erhalten Sie dasselbe Ergebnis, wenn Sie compartment_id aus dem Befehl entfernen. compartment_id soll Ihnen lediglich helfen, die Syntax für andere Services zu lernen.
Fehlerbehebung
  • Fehlmeldung: Fehler beim Abfragen der verfügbaren Providerpackages:
    • Wenn Sie ein VPN verwenden, überprüfen Sie Ihre Proxy-Einstellungen.
  • Fehler 401 (Service error: NotAuthenticated):
    • Sie haben einen falschen Wert bei einer der folgenden Angaben:
      • Mandanten-OCID
      • Benutzer-OCID
      • Fingerprint
      • RSA-Private Key (Pfad oder Schlüssel)
  • Kein derartiger Host:
    • Sie haben einen falschen Wert bei einer der folgenden Angaben:
      • Regions-ID
Erläuterung
  • Gehen Sie zu Nutzung (Ressourcen-Discovery).

    Es werden zwei Befehlsoptionen aufgeführt.

  • Wählen Sie die Befehlsoption aus, die compartment_id als Basisbefehl verwendet:
    terraform-provider-oci -command=export -compartment_id= -output_path=
  • 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

      • Fügen Sie die OCID des Compartments hinzu, in dem Sie Ressourcen ermitteln:

        -compartment_id=<tenancy-ocid>

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

        Beispiel: -output_path=$HOME/resource-discovery

  • Suchen Sie nach dem Begriff availability_domain, und beachten Sie die folgenden Informationen:
    Resources that are dependent on availability domains will be generated under availability_domain.tf file. These include:
    
        oci_core_boot_volume
        oci_file_storage_file_system
        oci_file_storage_mount_target
        oci_file_storage_snapshot
    
  • Verwenden Sie für Services Folgendes:
    • availability_domain (Obwohl es sich nicht um einen Service handelt, funktioniert er mit Service.)
    • Beispiel: -services=availability_domain
    • Die Servicenamen müssen nicht in Anführungszeichen gesetzt werden.
  • Erstellen Sie den Befehl:

    Beispiel:

    tf-oci -command=export -compartment_id=<tenancy-ocid> -services=availability_domain -output_path=$HOME/resource-discovery
    Hinweis

    Der Befehl zur Ressourcenerkennung erstellt kein Verzeichnis für die erkannten Ressourcen. Erstellen Sie ein Verzeichnis, und geben Sie den Pfad im Befehl an.
Erkannte Ressourcen prüfen
  1. Wechseln Sie vom Verzeichnis $HOME zum Verzeichnis resource-discovery.
    cd resource-discovery
  2. Zeigen Sie den Inhalt des Verzeichnisses an.
    ls

    Beispielausgabe:

    availability_domain.tf  provider.tf  vars.tf
  3. Prüfen Sie das Terraform-Skript auf Availability-Domains:
    cat availability_domain.tf

    Beispielausgabe:

    ## This configuration was generated by terraform-provider-oci
    
    data oci_identity_availability_domain export_QnsC-US-ASHBURN-AD-1 {
      compartment_id = var.compartment_ocid
      ad_number      = "1"
    }
    data oci_identity_availability_domain export_QnsC-US-ASHBURN-AD-2 {
      compartment_id = var.compartment_ocid
      ad_number      = "2"
    }
    data oci_identity_availability_domain export_QnsC-US-ASHBURN-AD-3 {
      compartment_id = var.compartment_ocid
      ad_number      = "3"
    }
    resource oci_file_storage_file_system export_JennFS ... <some info>
    resource oci_file_storage_snapshot export_Snapshot-1 ... <some info>
    resource oci_file_storage_mount_target export_MountTarget-xxx ... <some info>
    Hinweis

    Das Terraform-Skript availability_domain.tf verwendet eine Variable namens compartment_ocid. Suchen Sie nach dem Wert dieser Variablen in vars.tf.
  4. Prüfen Sie die Variablen:
    cat vars.tf

    Beispielausgabe:

    variable compartment_ocid { default = "<tenancy-ocid>" }
    variable region { default = "us-ashburn-1" }
  5. Prüfen Sie die Providerskriptinformationen:
    cat provider.tf

    Beispielausgabe:

    provider oci {
            region = var.region
    }
    Hinweis

    • provider.tf gibt an, dass Sie den Terraform-OCI-Provider mit provider oci { } verwenden.
    • Die Datei provider.tf enthält keine Authentifizierungsinformationen, da Sie Authentifizierungsinformationen über Ihre Umgebungsvariablen bereitstellen.

Herzlichen Glückwunsch. Ihr Oracle Cloud Infrastructure-Account kann jetzt Ihre Terraform-OCI-Providerbefehle authentifizieren. Ihre Umgebung kann die Befehle zur Ressourcen-Discovery ausführen.

Referenzen: