Cloud Assembly-Benutzer, die Terraform-Integrationen entwerfen und ausführen müssen, während sie keinen Internetzugriff haben, können ihre Laufzeitumgebung einrichten, indem sie dem nachstehenden Beispiel folgen.

Hinweis: Um eine Quelle für die Image-Erstellung zu erhalten, müssen Sie kurz eine Verbindung zum Internet herstellen. Unter Umständen müssen Sie diese Schritte außerhalb der getrennten Site durchführen, wenn eine temporäre Verbindung nicht möglich ist.

Bei diesem Vorgang wird davon ausgegangen, dass Sie über Ihre eigene Docker-Registrierung verfügen und über eine Internetverbindung auf deren Repositorys zugreifen können.

Erstellen des benutzerdefinierten Container-Images

  1. Erstellen Sie ein benutzerdefiniertes Container-Image, das die Binärdateien des Terraform-Anbieter-Plug-Ins enthält.

    In der folgenden Datei „Dockerfile“ ist ein Beispiel für die Erstellung eines benutzerdefinierten Images mit dem GCP-Anbieter für Terraform zu sehen.

    Das Herunterladen des Basisimages projects.registry.vmware.com/vra/terraform:latest in die Datei „Dockerfile“ erfordert Internetzugriff auf die VMware Harbor-Registrierung unter „projects.registry.vmware.com“.

    Firewall- oder Proxy-Einstellungen können dazu führen, dass der Image-Build fehlschlägt. Möglicherweise müssen Sie Zugriff auf „releases.hashicorp.com“ aktivieren, um die Binärdateien des Terraform-Anbieter-Plug-Ins herunterzuladen. Sie können jedoch optional Ihre private Registrierung verwenden, um die Plug-In-Binärdateien zur Verfügung zu stellen.

    FROM projects.registry.vmware.com/vra/terraform:latest as final
     
    # Create provider plug-in directory
    ARG plugins=/tmp/terraform.d/plugin-cache/linux_amd64
    RUN mkdir -m 777 -p $plugins
      
    # Download and unzip all required provider plug-ins from hashicorp to provider directory
    RUN cd $plugins \
        && wget -q https://releases.hashicorp.com/terraform-provider-google/3.58.0/terraform-provider-google_3.58.0_linux_amd64.zip \
        && unzip *.zip \
        && rm *.zip
      
    # For "terraform init" configure terraform CLI to use provider plug-in directory and not download from internet
    ENV TF_CLI_ARGS_init="-plugin-dir=$plugins -get-plugins=false"
  2. Erstellen, taggen und übertragen Sie das benutzerdefinierte Container-Image in Ihr eigenes Docker-Repository auf der getrennten Site.
  3. Wechseln Sie in Cloud Assembly auf der getrennten Site unter Infrastruktur > Verbindungen > Integrationen zu Ihrer Terraform-Laufzeitintegration.
  4. Erstellen oder bearbeiten Sie die Laufzeit-Containereinstellungen, um Ihr Repository für das benutzerdefinierte Container-Image hinzuzufügen. Der Name des beispielhaft erstellten benutzerdefinierten Container-Images lautet registry.ourcompany.com/project1/image1:latest.
    Terraform-Container-Image

Lokales Hosten der Terraform-CLI

  1. Laden Sie die Terraform-CLI-Binärdateien herunter.
  2. Laden Sie die Terraform-CLI-Binärdateien auf Ihren lokalen Web- oder FTP-Server hoch.
  3. Wechseln Sie in Cloud Assembly zu Infrastruktur > Konfigurieren > Terraform-Versionen.
  4. Erstellen oder bearbeiten Sie die Terraform-Version so, dass sie die URL zu den Terraform-CLI-Binärdateien enthält, die auf Ihrem lokalen Server gehostet werden.
  5. Wenn für den lokalen Web- oder FTP-Server eine Anmeldeauthentifizierung erforderlich ist, wählen Sie Standardauthentifizierung aus und geben Sie die Anmeldedaten (Benutzername und Kennwort) für den Zugriff auf den Server ein.

    Zum Ändern des Authentifizierungstyps müssen Sie über die Cloud-Administratorrolle in Cloud Assembly verfügen.

    Terraform-CLI-URL

Entwerfen und Bereitstellen von Terraform-Konfigurationen

Sobald die Laufzeit vorhanden ist, können Sie Terraform-Konfigurationsdateien in Git hinzufügen, Cloud-Vorlagen für sie entwerfen und Bereitstellungen vornehmen.

Informationen zu den ersten Schritten finden Sie unter Vorbereiten auf Terraform-Konfigurationen in Cloud Assembly.

Fehlerbehebung

Öffnen Sie beim Bereitstellen die Bereitstellung in Cloud Assembly. Suchen Sie auf der Registerkarte „Verlauf“ nach Terraform-Ereignissen und klicken Sie rechts auf Protokolle anzeigen. Wenn Ihr lokaler Terraform-Anbieter funktioniert, werden die folgenden Meldungen im Protokoll angezeigt.

Initializing provider plugins

Terraform has been successfully initialized

Für ein robusteres Protokoll können Sie den Code der Cloud-Vorlage manuell bearbeiten und TF_LOG: DEBUG hinzufügen, wie im folgenden Beispiel gezeigt.

resources:
  terraform:
    type: Cloud.Terraform.Configuration
    properties:
      providers:
        - name: google
          # List of available cloud zones: gcp/us-west1
          cloudZone: gcp/us-west1
      environment:
        # Configure terraform CLI debug log settings
        TF_LOG: DEBUG
      terraformVersion: 0.12.29
      configurationSource:
        repositoryId: fc569ef7-f013-4489-9673-6909a2791071
        commitId: 3e00279a843a6711f7857929144164ef399c7421
        sourceDirectory: gcp-simple

Erstellen eines eigenen Basisimages

Obwohl VMware das Basisimage gelegentlich unter projects.registry.vmware.com/vra/terraform:latest aktualisiert, ist dieses Image möglicherweise veraltet und enthält Schwachstellen.

Verwenden Sie stattdessen die folgende Dockerfile-Datei, um Ihr eigenes Basisimage zu erstellen.

FROM alpine:latest as final
RUN apk add --no-cache git wget curl openssh