Terraform
Breve: su Linux si installa solitamente Terraform, il CLI di Yandex Cloud (yc), si esegue l’inizializzazione, e poi si configurano le credenziali per Terraform (token IAM o chiave del account di servizio).
1. Terraform
Attraverso il binario ufficiale (universalmente):
# Esempio per amd64; sostituire la versione e l'architettura se necessario
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
Oppure tramite il gestore di pacchetti (se si utilizza Ubuntu/Debian e il repository di HashiCorp è configurato — come descritto nella documentazione del vostro sistema operativo).
2. Yandex Cloud CLI (yc)
curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash
exec -l $SHELL # oppure aprire un nuovo terminale
yc version
3. Profilo e accesso alla cloud
Interattivamente (comodo la prima volta):
yc init
Saranno richiesti:
- nome del profilo (scegliere “default” o crearne uno nuovo)
- token OAuth (vi fornirà un link per ottenerlo)
- nome della cloud (vi suggerirà una scelta — determina il billing, ovvero su quale cloud verrà emesso il fattura)
- nome della cartella (vi suggerirà una scelta)
- zona di calcolo predefinita (vi suggerirà di crearne una tra le opzioni
ru-central1-a...k)
Successivamente, yc salverà il profilo; per verificarlo:
yc config list
yc resource-manager cloud list
yc resource-manager folder list
4. Variabili per Terraform (provider Yandex)
Il provider legge le variabili di ambiente standard. Sono necessari almeno gli identificatori e uno dei metodi di autenticazione.
Opzione A — dall’utente (token IAM di yc):
export YC_TOKEN=$(yc iam create-token)
export YC_CLOUD_ID="<vostro-cloud-id>"
export YC_FOLDER_ID="<vostro-folder-id>"
Il token IAM è temporaneo; per un utilizzo prolungato è più comodo usare un account di servizio.
Opzione B — account di servizio (file chiave JSON):
export YC_SERVICE_ACCOUNT_KEY_FILE="/absolute/path/to/key.json"
export YC_CLOUD_ID="<cloud-id>"
```export YC_FOLDER_ID=""<folder-id>
(Il nome della variabile per la chiave del file nel provider è esattamente questo, vedere la documentazione del provider Yandex.)
5. Nel percorso del progetto Terraform
cd /path/to/your/terraform/project
terraform init
terraform plan
Note pratiche:
YC_TOKEN=$(yc iam create-token)deve essere aggiornato periodicamente.- Per CI e “sempre funzionante” si crea solitamente un account servizio con le ruoli necessarie sul cloud o nel catalogo e una chiave statica in formato JSON.
cloud_idefolder_idpossono essere ottenuti dal risultato diyc resource-manager cloud list/folder listo dalla console Yandex Cloud.
Bucket
Come ottengo
access_keyesecret_keyper un bucket esistente https://console.yandex.cloud/folders/b1g/storage/buckets/bucket ?
Nel Yandex Object Storage, i bucket non hanno access_key / secret_key propri. Le chiavi vengono rilasciate a un account servizio (o si utilizzano chiavi già create per esso). Il bucket viene quindi “collegato” tramite permessi IAM sul bucket o sul catalogo.
Attraverso la console
- Apri il catalogo
b1g→ Object Storage → il bucketbucket. - Assicurati di avere un account servizio che ha bisogno di accesso al bucket (oppure crea uno nuovo).
- Sul bucket: Permessi di accesso → assegna un ruolo come
storage.editor(o un ruolo già configurato da te con accesso a Object Storage) a questo account servizio. - Vai in Account servizio → account necessario → scheda Chiavi di accesso statiche (o “Chiavi di accesso”) → Crea nuova chiave.
- Salva l’ID della chiave e il segreto — il segreto viene visualizzato solo una volta.
L’ID della chiave = ciò che nei client S3 si chiama access_key / AWS_ACCESS_KEY_ID, il segreto = secret_key / AWS_SECRET_ACCESS_KEY.
Attraverso CLI (yc)
Elenca gli account servizio nel catalogo:
yc iam service-account list --folder-id b1g
Crea una chiave statica (sostituisci id con quello dell’account servizio necessario):
yc iam access-key create --service-account-id <SERVICE_ACCOUNT_ID>
Nella risposta verranno mostrati key_id e secret — questa è la coppia per l’API S3.
I permessi sul bucket è meglio assegnarli in anticipo (ruolo sul bucket o sul catalogo), ad esempio per storage.editor sul bucket — tramite console o API IAM; per scenari tipici spesso basta un ruolo sul catalogo, se è così nella tua organizzazione.
Importante
- Il segreto esistente non può essere visualizzato nuovamente — si può solo creare una nuova chiave e revocare la vecchia se necessario.
- Per lo stato Terraform in S3 si usano le stesse chiavi + endpoint
https://storage.yandexcloud.nete regioneru-central1(o la tua regione).
La logica ufficiale è descritta nella documentazione Yandex Cloud sui chiavi di accesso statiche e l’accesso a Object Storage tramite l’API S3.
Repository locale
Accedi alla cartella del repository e usa la chiave dell’account servizio per inizializzare il repository Terraform nella cartella:
terraform init \
-backend-config="access_key=<key_id>" \
-backend-config="secret_key=<secret>"
In questo modo collegherai la cartella cloud con quella locale.
Limitazioni di Hashicorp
Se ottieni
Inizializzazione del backend...
Configurazione del backend "s3" completata con successo! Terraform utilizzerà automaticamente questo backend a meno che la configurazione del backend non cambi.
Inizializzazione dei plugin dei provider...
- Ricerca della versione più recente di yandex-cloud/yandex...
- Ricerca delle versioni compatibili di hashicorp/null che corrispondono a "~> 3.2"...
- Ricerca della versione più recente di hashicorp/local...
- Installazione di yandex-cloud/yandex v0.200.0...
- Installato yandex-cloud/yandex v0.200.0 (firmato con chiave privata, ID chiave E40F590B50BB8E40)
I provider di partner e della community sono firmati dai loro sviluppatori.
Se desideri saperne di più sulla firma dei provider, puoi leggere qui:
https://www.terraform.io/docs/cli/plugins/signing.html
╷
│ Errore: Impossibile recuperare le versioni disponibili dei provider
│
│ Impossibile recuperare l'elenco delle versioni disponibili per il provider hashicorp/null: il registro
│ registry.terraform.io non contiene un provider denominato
│ registry.terraform.io/hashicorp/null
│
│ Tutti i moduli dovrebbero specificare i loro provider richiesti in modo che gli utenti esterni ottengano i
│ provider corretti quando utilizzano un modulo. Per vedere quali moduli attuali dipendono da
│ hashicorp/null, esegui il seguente comando:
│ terraform providers
╵
╷
│ Errore: Impossibile recuperare le versioni disponibili dei provider
│
│ Impossibile recuperare l'elenco delle versioni disponibili per il provider hashicorp/local: il registro
│ registry.terraform.io non contiene un provider denominato
│ registry.terraform.io/hashicorp/local
│
│ Tutti i moduli dovrebbero specificare i loro provider richiesti in modo che gli utenti esterni ottengano i
│ provider corretti quando utilizzano un modulo. Per vedere quali moduli attuali dipendono da
│ hashicorp/local, esegui il seguente comando:
│ terraform providers
Eseguire i passaggi seguenti.
Cosa sta accadendo
Il provider yandex-cloud/yandex è stato scaricato, ma hashicorp/null e hashicorp/local non lo sono. Questo accade quando registry.terraform.io non è raggiungibile (rete, DNS, politica) o risponde in modo errato: Terraform allora segnala che il provider “non esiste”.
Cosa fare sul tuo sistema
-
Specchio di Yandex Cloud — copiare il file di configurazione Terraform nel proprio percorso home (dal repository copiare
terraform.rc.example):cp ~/terraform.rc.example ~/.terraformrcAll’interno, viene impostato
https://terraform-mirror.yandexcloud.net/perregistry.terraform.io/*/*, come indicato nella documentazione di Yandex Cloud. -
Ripetere:
cd ~/yc-cloud terraform init -
Nel codice è stato aggiunto esplicitamente il provider
localnel fileprovider.tf(prima era presente solonull), per fissare le versioni in un’unica posizione.
Se si desidera l’accesso diretto senza specchio: verificare VPN/proxy e che curl -sI https://registry.terraform.io sia raggiungibile.```
$ terraform init -backend-config=“access_key=YCA” -backend-config=“secret_key=YCN”
Inizializzazione del backend…
Inizializzazione dei plugin dei provider…
- Ricerca delle versioni di hashicorp/null compatibili con “~> 3.2”…
- Ricerca delle versioni di hashicorp/local compatibili con “~> 2.5”…
- Ricerca della versione più recente di yandex-cloud/yandex…
- Installazione di yandex-cloud/yandex v0.200.0…
- yandex-cloud/yandex v0.200.0 installato (senza autenticazione)
- Installazione di hashicorp/null v3.2.4…
- hashicorp/null v3.2.4 installato (senza autenticazione)
- Installazione di hashicorp/local v2.8.0…
- hashicorp/local v2.8.0 installato (senza autenticazione)
Terraform ha creato un file di blocco .terraform.lock.hcl per registrare le selezioni dei provider effettuate sopra. Includi questo file nel tuo repository di controllo delle versioni in modo che Terraform possa garantire di effettuare le stesse selezioni predefinite quando eseguirai nuovamente il comando “terraform init” in futuro.
╷
│ Avviso: Informazioni incomplete nel file di blocco per i provider
│
│ A causa dei metodi personalizzati di installazione dei provider, Terraform è stato costretto a calcolare i checksum del file di blocco localmente per i seguenti provider:
│ - hashicorp/local
│ - hashicorp/null
│ - yandex-cloud/yandex
│
│ Il file corrente .terraform.lock.hcl include solo i checksum per linux_amd64, quindi l’esecuzione di Terraform su un’altra piattaforma fallirà nell’installazione di questi provider.
│
│ Per calcolare i checksum aggiuntivi per un’altra piattaforma, esegui:
│ terraform providers lock -platform=linux_amd64
│ (dove linux_amd64 è la piattaforma da generare)
╵
L’inizializzazione di Terraform è stata completata con successo!
Ora puoi iniziare a lavorare con Terraform. Prova ad eseguire “terraform plan” per visualizzare eventuali modifiche necessarie per la tua infrastruttura. Tutti i comandi di Terraform dovrebbero ora funzionare.
Se in seguito modifichi o imposti moduli o configurazioni del backend per Terraform, riavvia questo comando per riconfigurare la tua directory di lavoro. Se dimentichi, altri comandi rileveranno la situazione e ti ricorderanno di farlo se necessario.
Piano e applicazione di Terraform
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"