Terraform-Ausführungsumgebung konfigurieren

Die Terraform-Ausführungsumgebung umfasst das Layout der Ordner und Terraform-Konfigurationsdateien, die für das Erstellen der Multi-Tier-Netzwerktopologie erforderlich sind.

Informationen zur Terraform-Ausführungsumgebung

Das Layout der Terraform-Ausführungsumgebung ist für Modularität und künftiges Wachstum ausgelegt.

Die Verzeichnisse und Dateien, die Ihre Terraform-Konfiguration enthalten, stellen die Ausführungsumgebung dar. Jedes Unterverzeichnis stellt ein Terraform-Modul dar. In diesem Fall machen die Unterverzeichnisse eine wiederverwendbare Library mit Ressourcen.

Die folgende Verzeichnisstruktur stellt die Ausführungsumgebung dar, die Sie in dieser Lösung erstellen.

Beschreibung von local_directory_structure.png folgt
Beschreibung der Abbildung local_directory_structure.png

Die gesamte Konfiguration befindet sich in einem Root-Verzeichnis mit dem Namen Ihrer Wahl. Dieses Verzeichnis muss leer sein, wenn Sie beginnen.

Nachdem Sie die Konfiguration erstellt haben, enthält das Root-Verzeichnis die folgenden Verzeichnisse und Dateien:

  • Das Verzeichnis compartments enthält die Konfigurationsparameter für die Compartments.
  • Das Verzeichnis iam enthält die Konfigurationsparameter für die Policys und Gruppen.
  • Das Verzeichnis vcn enthält die Konfigurationsparameter für das virtuelle Cloud-Netzwerk und die Gateways.
  • Die folgenden Dateien befinden sich im Root-Verzeichnis:
    • datasources.tf bestimmt die Anzahl der Availability-Domains in der Region und ruft deren Namen ab.
    • provider.tf definiert die Parameter der zu verwendenden Terraform-Provider.
    • root.tf definiert die Module, die Terraform ausführen soll.
    • terraform.tvars definiert die Werte der Variablen, die Sie an Terraform übergeben.
    • variables.tf deklariert die Variablen, die die Module in der Konfiguration verwenden.

Root-Modul erstellen

Im Root-Modul definieren Sie die Parameter, die für Terraform erforderlich sind, um eine Verbindung zu Oracle Cloud Infrastructure herzustellen. Außerdem definieren Sie die Daten und Variablen, die die Module in der Konfiguration verwenden.

  1. Erstellen Sie auf dem Computer, auf dem Sie Terraform installiert haben, ein Verzeichnis, das im weiteren Verlauf dieser Lösung als Root-Verzeichnis bezeichnet wird.
  2. Erstellen Sie die folgenden Unterverzeichnisse im Root-Verzeichnis:
    • compartments
    • iam
    • vcn
  3. Erstellen Sie eine Textdatei mit dem Namen variables.tf im Root-Verzeichnis, und fügen Sie den folgenden Code in die Datei ein.
    Dieser Code deklariert die Variablen, die die Module in der Terraform-Konfigurationsverwendung aufweisen. Im nächsten Schritt geben Sie die Werte dieser Variablen an.
    variable "tenancy_ocid" {}
    variable "user_ocid" {}
    variable "fingerprint" {}
    variable "private_key_path" {}
    variable "private_key_password" {}
    variable "app_tag" {}
    variable "environment" {}
    variable "home_region" {}
    variable "region" {}
    variable "vcn_cidr" {
      default = "10.0.0.0/16"
    }
    
  4. Erstellen Sie eine Textdatei mit dem Namen terraform.tfvars im Root-Verzeichnis, und fügen Sie den folgenden Code in die Datei ein.
    In diesem Code definieren Sie die Werte der Variablen, die im vorherigen Schritt deklariert wurden.
    # Parameters to authenticate with Oracle Cloud Infrastructure
    tenancy_ocid="EXAMPLE: ocid1.tenancy.oc1..aaaaaaaaf76usem7gyfrakr35anvky4tyowvdvbik7kbrcizlyjsgfxpdg2a"
    user_ocid="EXAMPLE: ocid1.user.oc1..aaaaaaaa5tds42w2zzbsdflkjwerkjghswdjfbvbts7imlb5yru2p10a"
    fingerprint="EXAMPLE: 9b:6a:ab:ab:32:0b:7f:d5:5b:6w:c0:fe:54:72:f1:pl"
    private_key_path="YOUR_HOME_DIRECTORY/.oci/oci_api_key.pem"
    
    # Leave empty if your private key does not have a password
    private_key_password=""
    
    # See https://docs.oracle.com/pls/topic/lookup?ctx=cloud&id=oci_general_regions
    home_region="EXAMPLE: us-ashburn-1"
    region="EXAMPLE: us-phoenix-1"
    
    # A short identifier for the application, used as a prefix for naming the compartments and other resources
    app_tag="myapp"
    
    # The environment that you're creating resources for: test, dev, prod, or staging
    environment="dev"
    
    # Base CIDR for the VCN
    vcn_cidr="10.0.0.0/16"
  5. Aktualisieren Sie die Werte der Variablen in terraform.tfvars wie in der folgenden Tabelle beschrieben:
    Variable Beschreibung
    tenancy_ocid Die Oracle Cloud-ID (OCID) des Mandanten.

    Um die OCID Ihres Mandanten zu finden, wählen Sie Administration aus dem Menü "Services", und klicken Sie dann auf Mandantendetails .

    user_ocid Die Oracle Cloud-ID (OCID) des Benutzers, den Terraform zur Authentifizierung mit Oracle Cloud Infrastructure verwenden soll.

    Um die OCID des Benutzers zu suchen, wählen Sie Identität aus dem Dienstmenü und wählen dann Benutzer . Suchen Sie den Benutzernamen in der Liste, und kopieren Sie den Wert für OCID.

    fingerprint Der Fingerprint für den API-Signaturschlüssel, den Sie hochgeladen haben.
    private_key_path Der Pfad zu der Datei, die Ihren Private Key enthält.
    private_key_password Die Passphrase für den Private Key. Wenn der Schlüssel keine Passphrase enthält, lassen Sie diese Variable leer.
    home_region Der Heimatbereich des Mandanten. Compartments, Policys und Gruppen werden in der Startregion erstellt.

    Um den Home-Bereich abzurufen, wählen Sie Administration aus dem Dienstmenü, klicken auf Mandantendetails und kopieren den Wert in das Feld "Home-Region" .

    Bereich Der Bereich, in dem das Netzwerk, die Berechnung und andere Ressourcen erstellt werden sollen. Dieser Bereich kann der Home-Bereich oder ein beliebiger anderer Oracle Cloud Infrastructure-Bereich sein.
    app_tag Ein Präfix, das in den Namen der Ressourcen verwendet werden soll, um die Anwendung anzugeben, auf die sich jede Ressource bezieht. Es empfiehlt sich, alle Kleinbuchstaben zu verwenden.
    Umgebung Ein Präfix, das in den Namen der Ressourcen verwendet werden muss, um die Umgebung anzugeben, für die jede Ressource gilt: Entwicklung, Test, Staging oder Production. Es empfiehlt sich, alle Kleinbuchstaben zu verwenden.
    vcn_cidr Der Adressbereich des VCNs im CIDR-Format. Planen Sie diesen Bereich sorgfältig. Eine spätere Änderung ist nicht möglich.
  6. Erstellen Sie eine Textdatei mit dem Namen datasources.tf im Root-Verzeichnis, und fügen Sie den folgenden Code in die Datei ein.
    Der Code in datasources.tf bestimmt die Anzahl der Availability-Domains in der Region und deren Namen. Dieser Code verwendet den Bereich, den Sie in der Variable region angeben.
    data "oci_identity_availability_domains" "ad" {
      compartment_id = "${var.tenancy_ocid}"
    }
    
    data "template_file" "ad_names" {
      count    = "${length(data.oci_identity_availability_domains.ad.availability_domains)}"
      template = "${lookup(data.oci_identity_availability_domains.ad.availability_domains[count.index], "name")}"
    }
  7. Erstellen Sie eine Textdatei mit dem Namen provider.tf im Root-Verzeichnis, und fügen Sie den folgenden Code in die Datei ein.
    Der Code in provider.tf definiert die Parameter für den Provider , den Terraform verwenden soll. Ein Provider übersetzt Terraform-Befehle in API-Aufrufe, die speziell für einen Cloudserviceprovider gelten.
    provider "oci" {
      alias                = "home"
      region               = "${var.home_region}"
      tenancy_ocid         = "${var.tenancy_ocid}"
      user_ocid            = "${var.user_ocid}"
      fingerprint          = "${var.fingerprint}"
      private_key_path     = "${var.private_key_path}"
      private_key_password = "${var.private_key_password}"
    }
    
    provider "oci" {
      region               = "${var.region}"
      tenancy_ocid         = "${var.tenancy_ocid}"
      user_ocid            = "${var.user_ocid}"
      fingerprint          = "${var.fingerprint}"
      private_key_path     = "${var.private_key_path}"
      private_key_password = "${var.private_key_password}"
    }
    In diesem Beispiel werden zwei Provider definiert. Beide Provider gelten für Oracle Cloud Infrastructure . Der erste Provider ist für den Home-Bereich bestimmt, in dem Sie die Oracle Cloud Infrastructure Identity and Access Management-Ressourcen erstellen. Der zweite Provider ist für den Bereich bestimmt, in dem Sie Networking, Compute und andere Ressourcen erstellen möchten.
  8. Erstellen Sie eine Textdatei mit dem Namen root.tf im Root-Verzeichnis, und fügen Sie den folgenden Code in die Datei ein.
    Dieser Code gibt die Module an, die Terraform ausführen muss. Der Provider wird explizit für die Module compartments und iam angegeben, da die Compartments, Gruppen und Policys im Home-Bereich erstellt werden müssen.
    module "compartments" {
      source       = "./compartments"
      tenancy_ocid = "${var.tenancy_ocid}"
      app_tag      = "${var.app_tag}"
      environment  = "${var.environment}"
    
      providers = {
        oci = "oci.home"
      }
    }
    
    module "a_vcn" {
      source           = "./vcn"
      tenancy_ocid     = "${var.tenancy_ocid}"
      compartment_ocid = "${module.compartments.networks_id}"
      app_tag          = "${var.app_tag}"
      environment      = "${var.environment}"
      vcn_cidr         = "${var.vcn_cidr}"
    }
    
    module "iam" {
      source       = "./iam"
      tenancy_ocid = "${var.tenancy_ocid}"
      app_tag      = "${var.app_tag}"
      environment  = "${var.environment}"
    
      providers = {
        oci = "oci.home"
      }
    }
    Die Variablen app_tag und environment erzwingen ein Benennungsschema. Die Verwendung eines Benennungsschemas ist nicht erforderlich, es handelt sich jedoch um eine Best Practice.