Terraform und Yandex Cloud auf der lokalen Maschine einrichten, um auf die Cloud zuzugreifen

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...k vorgeschlagen)

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_id und folder_id können aus dem Output von yc resource-manager cloud list / folder list oder aus der Yandex Cloud-Konsole entnommen werden.

Bucket

Wie erhalte ich access_key und secret_key fü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

  1. Öffnen Sie den Katalog b1gObject Storage → den Bucket bucket.
  2. Stellen Sie sicher, dass ein Service-Account vorhanden ist, der Zugriff auf den Bucket benötigt (oder erstellen Sie einen neuen).
  3. Auf dem Bucket: Zugriffsrechte → weisen Sie eine Rolle wie storage.editor (oder bereits konfigurierte Rolle mit Zugriff auf Object Storage) diesem Service-Account zu.
  4. Wechseln Sie zu Service-Accountsder gewünschte Account → Registerkarte Statische Zugangs Schlüssel (oder „Zugangs Schlüssel“) → Neuen Schlüssel erstellen.
  5. 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.net und der Region ru-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

  1. Yandex Cloud-Spiegel – Kopieren Sie die Terraform-Konfiguration in Ihr Home-Verzeichnis (aus dem Repository kopieren Sie terraform.rc.example):

    cp ~/terraform.rc.example ~/.terraformrc
    

    Darin wird https://terraform-mirror.yandexcloud.net/ für registry.terraform.io/*/* festgelegt, wie in der Yandex Cloud-Dokumentation beschrieben.

  2. Wiederholen Sie:

    cd ~/yc-cloud
    terraform init
    
  3. Im Code wurde der Provider local explizit in provider.tf hinzugefügt (früher war nur null vorhanden), 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"