Terraform
Kurz: Auf Linux installiert man normalerweise Terraform, die Yandex Cloud CLI (yc), führt die Initialisierung durch und legt für Terraform Authentifizierungsdaten (IAM-Token oder Service-Account-Schlüssel) fest.
1. Terraform
Über den offiziellen Binär-Download (universell):
# Beispiel für amd64; ändern Sie ggf. Version und Architektur
TERRAFORM_VERSION=1.9.8
wget "https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip"
unzip "terraform_${TERRAFORM_VERSION}_linux_amd64.zip"
sudo mv terraform /usr/local/bin/
terraform version
Oder über einen Paket-Manager (falls Sie Ubuntu/Debian verwenden und den HashiCorp-Repo eingerichtet haben — wie in Ihrer Distributionsdokumentation beschrieben).
2. Yandex Cloud CLI (yc)
curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
exec -l $SHELL # oder öffnen Sie einen neuen Terminal
yc version
3. Profil und Zugriff auf die Cloud
Interaktiv (bequem zum ersten Mal):
yc init
Sie benötigen:
- Profilname (wählen Sie „default“ oder erstellen Sie ein neues)
- OAuth-Token (wird eine URL angezeigt, um es zu erhalten)
- Cloud-Name (wird vorgeschlagen — bestimmt den Billing, auf welches Cloud-Konto die Rechnung ausgestellt wird)
- Ordner-Name (wird vorgeschlagen)
- Standard-Compute-Zone (wird aus der Liste
ru-central1-a...kvorgeschlagen)
Danach speichert yc das Profil; Überprüfung:
yc config list
yc resource-manager cloud list
yc resource-manager folder list
4. Umgebungsvariablen für Terraform (Yandex-Provider)
Der Provider liest Standard-Umgebungsvariablen. Mindestens benötigt man Identifikatoren und einen Authentifizierungsmechanismus.
Option A — vom Benutzer (IAM-Token aus yc):
export YC_TOKEN=$(yc iam create-token)
export YC_CLOUD_ID="<Ihr Cloud-ID>"
export YC_FOLDER_ID="<Ihr Folder-ID>"
IAM-Token sind nicht dauerhaft; für längere Nutzung ist ein Service-Account besser geeignet.
Option B — Service-Account (JSON-Schlüssel):
export YC_SERVICE_ACCOUNT_KEY_FILE="/absolute/path/to/key.json"
export YC_CLOUD_ID="<Cloud-ID>"
```export YC_FOLDER_ID=""<folder-id>"
(Namen der Datei für den Schlüssel im Provider – genau dieser Name, siehe Dokumentation des Yandex-Providers.)
5. Im Verzeichnis mit der Terraform-Konfiguration
cd /pfad/zum/terraform/projekt
terraform init
terraform plan
Praktische Hinweise:
YC_TOKEN=$(yc iam create-token)muss regelmäßig aktualisiert werden.- Für CI und „immer funktioniert“ erstellt man normalerweise einen Service-Account mit den erforderlichen Rollen auf den Katalog/Cloud und einen statischen Schlüssel im JSON-Format.
cloud_idundfolder_idkönnen aus dem Output vonyc resource-manager cloud list/folder listoder aus der Yandex Cloud-Konsole entnommen werden.
Bucket
Wie erhalte ich
access_keyundsecret_keyfür einen bestehenden Bucket https://console.yandex.cloud/folders/b1g/storage/buckets/bucket?
Im Yandex Object Storage hat der Bucket keine eigenen access_key / secret_key. Die Schlüssel werden dem Service-Account (oder Sie verwenden bereits dafür erstellte Schlüssel) zugewiesen. Der Bucket ist dann über IAM-Rechte auf den Bucket oder den Katalog „gebunden“.
Über die Konsole
- Öffnen Sie den Katalog
b1g→ Object Storage → den Bucketbucket. - Stellen Sie sicher, dass ein Service-Account vorhanden ist, der Zugriff auf den Bucket benötigt (oder erstellen Sie einen neuen).
- Auf dem Bucket: Zugriffsrechte → weisen Sie eine Rolle wie
storage.editor(oder bereits konfigurierte Rolle mit Zugriff auf Object Storage) diesem Service-Account zu. - Wechseln Sie zu Service-Accounts → der gewünschte Account → Registerkarte Statische Zugangs Schlüssel (oder „Zugangs Schlüssel“) → Neuen Schlüssel erstellen.
- Speichern Sie den Schlüssel-Identifikator und den Geheimtext – der Geheimtext wird nur einmal angezeigt.
Der Schlüssel-Identifikator = das, was in S3-Klienten normalerweise als access_key / AWS_ACCESS_KEY_ID bezeichnet wird, der Geheimtext = secret_key / AWS_SECRET_ACCESS_KEY.
Über die CLI (yc)
Liste der Service-Accounts im Katalog:
yc iam service-account list --folder-id b1g
Erstellen eines statischen Schlüssels (ersetzen Sie <SERVICE_ACCOUNT_ID> durch die ID des gewünschten SA):
yc iam access-key create --service-account-id <SERVICE_ACCOUNT_ID>
Im Antwort werden key_id und secret angezeigt – das ist die Paarung für das S3-API.
Rechte auf den Bucket sollten besser im Voraus zugewiesen werden (Rolle auf den Bucket-Ressource oder auf den Katalog), z. B. für storage.editor auf den Bucket – entweder über die Konsole oder über das IAM-API; für typische Szenarien reicht oft die Rolle auf den Katalog aus, wenn dies in Ihrer Organisation üblich ist.
Wichtig
- Ein bereits vorhandener Geheimtext kann nicht erneut „gesehen“ werden – erstellen Sie einen neuen Schlüssel und widerrufen Sie bei Bedarf den alten.
- Für Terraform State in S3 werden dieselben Schlüssel verwendet + der Endpoint
https://storage.yandexcloud.netund der Regionru-central1(oder Ihre Region).
Die offizielle Logik ist in der Yandex Cloud-Dokumentation zu statischen Zugangs Schlüsseln und dem Zugriff auf Object Storage über das S3-API beschrieben.
lokaler Repo
Wechseln Sie in das Verzeichnis mit dem Repository und verwenden Sie den Schlüssel des Service-Accounts zur Initialisierung des Terraform-Repository in diesem Verzeichnis:
terraform init \
-backend-config="access_key=<key_id>" \
-backend-config="secret_key=<secret>"
Damit verbinden Sie die Cloud-Verzeichnis mit dem lokalen.
Hashicorp-Beschränkungen
Wenn Sie erhalten:
Backend wird initialisiert...
Der Backend „s3“ wurde erfolgreich konfiguriert! Terraform verwendet diesen Backend automatisch, es sei denn, die Backend-Konfiguration ändert sich.
Provider-Plugins werden installiert...
- Suche der neuesten Version von yandex-cloud/yandex...
- Suche von hashicorp/null-Versionen, die „~> 3.2“ erfüllen...
- Suche der neuesten Version von hashicorp/local...
- Installiere yandex-cloud/yandex v0.200.0...
- yandex-cloud/yandex v0.200.0 installiert (selbstsigniert, Schlüssel-ID E40F590B50BB8E40)
Partner- und Community-Provider werden von ihren Entwicklern signiert.
Wenn Sie mehr über die Signierung von Providern erfahren möchten, lesen Sie hier:
https://www.terraform.io/docs/cli/plugins/signing.html
╷
│ Fehler: Fehler beim Abfragen verfügbarer Provider-Pakete
│
│ Die Liste der verfügbaren Versionen für den Provider hashicorp/null konnte nicht abgerufen werden: Der Provider-
│ Registry registry.terraform.io hat keinen Provider namens
│ registry.terraform.io/hashicorp/null
│
│ Alle Module sollten ihre required_providers angeben, damit externe Verbraucher beim Verwenden eines Moduls die
│ richtigen Provider erhalten. Um zu sehen, welche Module aktuell auf hashicorp/null angewiesen sind, führen Sie den folgenden Befehl aus:
│ terraform providers
╵
╷
│ Fehler: Fehler beim Abfragen verfügbarer Provider-Pakete
│
│ Die Liste der verfügbaren Versionen für den Provider hashicorp/local konnte nicht abgerufen werden: Der Provider-
│ Registry registry.terraform.io hat keinen Provider namens
│ registry.terraform.io/hashicorp/local
│
│ Alle Module sollten ihre required_providers angeben, damit externe Verbraucher beim Verwenden eines Moduls die
│ richtigen Provider erhalten. Um zu sehen, welche Module aktuell auf hashicorp/local angewiesen sind, führen Sie den folgenden Befehl aus:
│ terraform providers
Führen Sie die folgenden Schritte aus.
Was passiert
yandex-cloud/yandex wurde erfolgreich heruntergeladen, aber hashicorp/null und hashicorp/local fehlen. Dies tritt auf, wenn registry.terraform.io nicht erreichbar ist (Netzwerk, DNS, Firewall-Politik) oder eine falsche Antwort liefert: Terraform meldet dann, dass der Provider „nicht vorhanden“ ist.
Was Sie tun müssen
-
Yandex Cloud-Spiegel – Kopieren Sie die Terraform-Konfiguration in Ihr Home-Verzeichnis (aus dem Repository kopieren Sie
terraform.rc.example):cp ~/terraform.rc.example ~/.terraformrcDarin wird
https://terraform-mirror.yandexcloud.net/fürregistry.terraform.io/*/*festgelegt, wie in der Yandex Cloud-Dokumentation beschrieben. -
Wiederholen Sie:
cd ~/yc-cloud terraform init -
Im Code wurde der Provider
localexplizit inprovider.tfhinzugefügt (früher war nurnullvorhanden), um die Versionen an einem zentralen Ort zu fixieren.
Falls Sie keinen Spiegel verwenden möchten und direkten Zugriff benötigen: Prüfen Sie VPN/Proxy und ob curl -sI https://registry.terraform.io erreichbar ist.```bash
$ terraform init -backend-config=“access_key=YCA” -backend-config=“secret_key=YCN”
Backend initialisieren…
Provider-Plugins initialisieren…
- Suche nach Versionen von hashicorp/null, die „~> 3.2“ erfüllen…
- Suche nach Versionen von hashicorp/local, die „~> 2.5“ erfüllen…
- Suche nach neuester Version von yandex-cloud/yandex…
- Installiere yandex-cloud/yandex v0.200.0…
- yandex-cloud/yandex v0.200.0 installiert (ohne Authentifizierung)
- Installiere hashicorp/null v3.2.4…
- hashicorp/null v3.2.4 installiert (ohne Authentifizierung)
- Installiere hashicorp/local v2.8.0…
- hashicorp/local v2.8.0 installiert (ohne Authentifizierung)
Terraform hat eine Lock-Datei (.terraform.lock.hcl) erstellt, um die oben getroffenen Provider-Auswahl zu dokumentieren. Füge diese Datei deinem Versionskontrollsystem hinzu, damit Terraform zukünftig bei jedem Ausführen von „terraform init“ dieselben Auswahl treffen kann.
╷
│ Warnung: Unvollständige Lock-Dateiinformationen für Provider
│
│ Aufgrund deiner benutzerdefinierten Provider-Installationen wurde Terraform gezwungen, die Prüfsummen für die folgenden Provider lokal zu berechnen:
│ - hashicorp/local
│ - hashicorp/null
│ - yandex-cloud/yandex
│
│ Die aktuelle .terraform.lock.hcl-Datei enthält nur Prüfsummen für linux_amd64, weshalb Terraform auf anderen Plattformen diese Provider nicht installieren kann.
│
│ Um zusätzliche Prüfsummen für eine andere Plattform zu berechnen, führe aus:
│ terraform providers lock -platform=linux_amd64
│ (wo linux_amd64 die Plattform ist, für die die Prüfsummen generiert werden sollen)
╵
Terraform wurde erfolgreich initialisiert!
Sie können nun mit Terraform arbeiten. Versuchen Sie, „terraform plan“ auszuführen, um zu sehen, welche Änderungen für Ihre Infrastruktur erforderlich sind. Alle Terraform-Befehle funktionieren jetzt.
Wenn Sie Module oder Backend-Konfigurationen für Terraform festlegen oder ändern, führen Sie diesen Befehl erneut aus, um Ihr Arbeitsverzeichnis neu zu initialisieren. Vergessen Sie es nicht – andere Befehle erkennen es und erinnern Sie gegebenenfalls daran, es zu tun.
```bash
# Terraform plan / apply
terraform plan -input=false -var-file=count_vars.vars -out=tfplan
terraform apply -auto-approve tfplan
terraform destroy -auto-approve -var-file="count_vars.vars"