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

    1. S3 credentials — võta access key ja secret key Pilvio dashboardist (või API kaudu: GET https://api.pilvio.com/v1/storage/user).

    2. 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
      
    3. 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

    FlagMiks vajalik
    skip_credentials_validationTerraform üritab credentials'eid AWS STS-i kaudu valideerida — Pilviol STS-i pole
    skip_metadata_api_checkTerraform otsib credentials'eid EC2 IMDS-ist — väljaspool AWS-i puudub
    skip_requesting_account_idTerraform kutsub AWS IAM-i account ID saamiseks — Pilviol pole
    skip_s3_checksumPilvio ei toeta x-amz-checksum-* header'eid, mida uuem AWS SDK saadab
    force_path_stylePilvio 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.