L11 — Terraform: elle kurduğunu koda çevir (yerel: LocalStack)#
A6'da altyapıyı elle kurdun; komutları hatırlaman, tekrar kurman gerekti. Bu lab aynı işi kod yapar: terraform apply sıfırdan kaynak açar, destroy kapatır, tekrar apply aynı sonucu üretir. Hiç bulut, hiç para — her şey LocalStack (AWS'i yerelde taklit eden bir container) üstünde.
Gerekenler#
terraform(veyatofu),docker,curl.- LocalStack:
docker run -d -p 4566:4566 --name localstack localstack/localstack. - (Opsiyonel)
awslocal/awsCLI — kaynakları dışarıdan doğrulamak için.
Görev#
- LocalStack'i başlat.
- Provider'ı incele.
starter/providers.tfAWS provider'ı LocalStack'e (http://localhost:4566) yönlendirir; sahtetest/testkimlik LocalStack'te yeterli. Bu bir gerçek credential değil — LocalStack onu görmezden gelir. - Kaynağı yaz.
starter/main.tf.template'imain.tfolarak doldur: uygulamanın artefaktları için biraws_s3_bucket, config için biraws_ssm_parameter. - Tekrarlanabilirliği kanıtla. İki
terraform destroy -auto-approve terraform apply -auto-approve # AYNI sonuç, elle hiçbir şey yapmadanapplyçıktısını karşılaştır — kaynak sayısı ve isimler aynı olmalı. - State'i anla.
terraform.tfstatedosyasına bak (JSON). Terraform "ne kurduğunu" nereden biliyor? Bu dosya silinirse ne olur?report.txt'e yaz — ayrıca state'in niçin paylaşılan ve kilitlenen bir yerde (S3+DynamoDB / TF Cloud) durması gerektiğini açıkla (bunu K03 kırık lab'ında yaşayacaksın).
Kabul kriterleri#
-
bash verify.shsıfır hatayla geçiyor. -
main.tfen az birresource(ör.aws_s3_bucket) tanımlıyor. -
providers.tfLocalStack endpoint'ine (4566) yönlendiriyor. -
report.txtstate'in ne olduğunu ve niçin kilitlenen bir yerde durması gerektiğini kendi cümlelerinle anlatıyor.
İpucu (çözüm değil)#
- LocalStack S3 için
s3_use_path_style = trueveskip_credentials_validation = truegerekir —providers.tfbunları içerir. - Idempotency: ikinci
apply"No changes" demeli. Diyorsa Terraform'un dünya görüşü (state) ile gerçeklik uyuşuyor demektir. Uyuşmazsa buna drift denir (K03). - State içinde hassas değer (parola) düz metin durabilir — bu yüzden state herkese açık repoda tutulmaz.
Takılırsan solution/'a bak — ama önce kendin dene.