Terraform state'i hoidmine Pilvio S3-s
Pilvio pakub S3-ühilduvat objektisalvestust aadressil s3.pilw.io. Saad seda kasutada Terraformi S3 backend'ina, aga kuna tegemist pole päris AWS-iga, on vaja mitut ühilduvusflag'i.
Eeldused
-
S3 credentials — võta access key ja secret key Pilvio dashboardist (või API kaudu:
GET https://api.pilvio.com/v1/storage/user). -
Loo state bucket (ühekordne):
export AWS_ACCESS_KEY_ID="<sinu_access_key>" export AWS_SECRET_ACCESS_KEY="<sinu_secret_key>" aws s3 mb s3://my-tfstate --endpoint-url https://s3.pilw.io -
Ekspordi credentials nii, et Terraform leiab need:
export AWS_ACCESS_KEY_ID="<sinu_access_key>" export AWS_SECRET_ACCESS_KEY="<sinu_secret_key>"
Backend'i konfiguratsioon
terraform {
backend "s3" {
bucket = "my-tfstate"
key = "project/terraform.tfstate"
# Pilvio S3 endpoint
endpoint = "https://s3.pilw.io"
region = "eu-west-1" # Terraform nõuab, aga iga valiidne region-string töötab
# Nõutud mitte-AWS S3-ühilduvate pakkujate jaoks:
skip_credentials_validation = true # Pilvio ei toeta AWS STS-i
skip_metadata_api_check = true # EC2 instance metadata service puudub
skip_requesting_account_id = true # AWS account ID endpoint puudub
skip_s3_checksum = true # Pilvio ei toeta AWS checksum header'eid
force_path_style = true # kasuta s3.pilw.io/bucket, mitte bucket.s3.pilw.io
}
}
Mida iga flag teeb
| Flag | Miks vajalik |
|---|---|
skip_credentials_validation | Terraform üritab credentials'eid AWS STS-i kaudu valideerida — Pilviol STS-i pole |
skip_metadata_api_check | Terraform otsib credentials'eid EC2 IMDS-ist — väljaspool AWS-i puudub |
skip_requesting_account_id | Terraform kutsub AWS IAM-i account ID saamiseks — Pilviol pole |
skip_s3_checksum | Pilvio ei toeta x-amz-checksum-* header'eid, mida uuem AWS SDK saadab |
force_path_style | Pilvio kasutab path-style URL-e (s3.pilw.io/bucket), mitte virtual-hosted (bucket.s3.pilw.io) |
Ilma nende flag'ideta annab terraform init veateateid nagu "No valid credential sources found" või "failed to refresh cached credentials, no EC2 IMDS role found".
Terraform >= 1.11.2 workaround
On teadaolev bug, kus skip_s3_checksum üksi ei suuda Terraform >= 1.11.2 puhul checksum header'eid täielikult välja lülitada. Lahendus — ekspordi lisaks:
export AWS_REQUEST_CHECKSUM_CALCULATION=when_required
export AWS_RESPONSE_CHECKSUM_VALIDATION=when_required
Deprecated endpoint parameeter
Uuemad Terraformi versioonid hoiatavad, et endpoint on deprekateeritud endpoints.s3 kasuks. Kui näed seda hoiatust, uuenda:
endpoints = {
s3 = "https://s3.pilw.io"
}
Kontroll
Kui config on paigas ja credentials eksporditud, käivita:
terraform init
Õnnestumisel näed teadet Terraform has been successfully initialized! ja state fail ilmub sinu Pilvio bucketisse my-tfstate võtme all project/terraform.tfstate.
Kontrolli käsureaga:
aws s3 ls s3://my-tfstate/project/ --endpoint-url https://s3.pilw.io
Miks see oluline on
Terraform state fail on sinu infrastruktuuri tõeallikas. Kui see on AWS S3-s, on sinu Eesti serverite state fail USA jurisdiktsioonis — CLOUD Act risk. Pilvio S3-s hoidmine tähendab, et state fail jääb Eestisse, samasse jurisdiktsiooni nagu su ülejäänud infrastruktuur.
Loe lähemalt: S3 objektisalvestus Eestis ja StorageVault teenuse leht.