Terraform Remote State Backup mit Digital Ocean Spaces

Jan 08 2023
Wir sind heutzutage alle so an AWS gewöhnt, dass Terraform beschließt, AWS standardmäßig als Backend für Terraform-Backups zu verwenden. Nicht jeder nutzt AWS in seinem täglichen Leben, aus Kostengründen entscheiden sich Menschen für Digital Ocean.

Wir sind heutzutage alle so an AWS gewöhnt, dass Terraform beschließt, AWS standardmäßig als Backend für Terraform-Backups zu verwenden. Nicht jeder nutzt AWS in seinem täglichen Leben, aus Kostengründen entscheiden sich Menschen für Digital Ocean. Wir sind einer von ihnen.

Da ich als SRE die gesamte Infrastruktur selbst betreue, ist es meine Aufgabe, so viel Automatisierung wie möglich zu machen. Nachdem wir unsere gesamte Infrastruktur auf IAC umgestellt haben. Ich mache mir ein wenig Sorgen um die Statusdatei, die Terraforms erstellt und die jedes Mal geändert wird, wenn ich etwas an der Infrastruktur ändere. Als ich ein Automatisierungsskript für die Bereitstellung von Terraform-Skripts schrieb, als mehrere Leute anfingen, an IAC zu arbeiten, stellte ich fest, dass unser digitaler Ozean etwas anders ist. Sie müssen Terraform irgendwie glauben machen, dass es immer noch AWS als Backend verwendet.

Erstellen Sie zuerst einen Bucket und generieren Sie dann den DigitalOcean-API-Schlüssel und das Geheimnis zur Verwendung auf Terraform. Sie können auf DigitalOcean zur API gehen und diese wie die unten gezeigten erstellen.

Installieren Sie dann AWS CLI auf Ihrem Computer. Dann müssen Sie ein Profil erstellen

aws configure --profile digitalocean

Dann müssen Sie, genau wie im Code gezeigt, einen Backend-Codeblock hinzufügen.

Es gibt ein paar Dinge, die Sie möglicherweise beachten müssen:

  • wo die Region von AWS stammt, da Terraform DigitalOcean-Regionen nicht erkennt, selbst nach dem Hinzufügen von Endpunkten.
  • Sie müssen nicht die ursprüngliche URL verwenden, die im Bucket angegeben ist. Sie können einfach den Teil nach dem Bucket-Namen verwenden.
  • Der Bucket-Name sollte derjenige sein, in den Sie die Statusdateien einfügen möchten.
  • terraform {
      required_providers {
        digitalocean = {
          source = "digitalocean/digitalocean"
          version = "~> 2.0"
        }
      }
      backend "s3" {
        endpoint                    = "sgp1.digitaloceanspaces.com"
        key                         = "terraform.tfstate"
        bucket                      = "bucketname"
        region                      = "ap-southeast-1"
        skip_credentials_validation = true
        skip_metadata_api_check     = true
      }
    }