Terraform İle AWS Kullanımı ve S3 Bucket Oluşturma

Terraform ile AWS S3 Bucket oluşturarak nesnelerinizi yüksek güvenilirlik ve erişebilirlik ile depolayabilirsiniz. Üstelik Free Tier ile ücretsiz bir şekilde depolama alanı da elde edebilirsiniz.

Amazon S3 ile depolamayı etkinleştirmek için ilk adım bir S3 bucket oluşturmaktır. Bunun için bir klasörde bir main.tf dosyası oluşturun ve dosyanın üst kısmında sağlayıcı olarak AWS'yi belirtin:

provider "aws" {
  region = "us-east-2"
}

Ardından, aws_s3_bucket kaynağını kullanarak bir S3 bucket oluşturun:

resource "aws_s3_bucket" "terraform_state" {
  bucket = "terraform-kerteriz-blog-s3-bucket"

  # Bu S3 bucket'ın yanlışlıkla silinmesini önleyin
  lifecycle {
    prevent_destroy = true
  }
}

Bu kod aşağıdaki argümanları ayarlar:

  • bucket: Bu, S3 bucket adıdır. S3 paket adlarının tüm AWS müşterileri arasında küresel olarak benzersiz olması gerektiğini unutmayın. Bu nedenle, "terraform-kerteriz-blog-s3-bucket" (daha önce oluşturduğum) olan bucket parametresini kendi bucket adınızla değiştirmeniz gerekecektir. Bu adı hatırladığınızdan ve hangi AWS bölgesi olduğunuzu not ettiğinizden emin olun. Çünkü her iki bilgiye de biraz sonra tekrar ihtiyacınız olacak.
  • prevent_destroy: Bu bir yaşam döngüsü ayarıdır. Bir kaynakta prevent_destroy özelliğini true olarak ayarladığınızda, o kaynağı silmeye yönelik herhangi bir girişim (örneğin, terraform destroy çalıştırarak) Terraform'un bir hata atmasına neden olur. Bu, tüm Terraform state'ini depolayacak olan S3 bucket gibi önemli bir kaynağın yanlışlıkla silinmesini önlemenin iyi bir yoludur. Tabii ki, gerçekten silmek istiyorsanız, sadece o ayarı yorum satırı yapabilirsiniz.

Şimdi bu S3 bucket için birkaç ekstra koruma katmanı ekleyelim.

İlk olarak, bucketta bir dosyaya yapılan her güncellemenin aslında o dosyanın yeni bir sürümünü oluşturması için S3 bucketta sürüm oluşturmayı etkinleştirelim. Bunun için aws_s3_bucket_versioning kaynağını kullanacağız. Bu, dosyanın eski sürümlerini görmenize ve istediğiniz zaman eski sürümlere geri dönmenize olanak tanır. Böylece, bir şeyler ters giderse yararlı bir geri dönüş mekanizması olabilir:

resource "aws_s3_bucket_versioning" "enabled" {
  bucket = aws_s3_bucket.terraform_state.id
  versioning_configuration {
    status = "Enabled"
  }
}

İkinci olarak, bu S3 klasörüne yazılan tüm veriler için sunucu tarafı şifrelemeyi varsayılan olarak açmak için aws_s3_bucket_server_side_encryption_configuration kaynağını kullanın. Bu, dosyalarınızın her zaman diskte şifrelenmesini sağlar. Eğer hassas verilerinizin güvende kalmasını isterseniz bu ayarı kullanmanızı tavsiye ederiz. Aksi halde şifrelemeden dolayı bir gecikme istemezseniz bu ayarı es geçebilirsiniz:

resource "aws_s3_bucket_server_side_encryption_configuration" "default" {
  bucket = aws_s3_bucket.terraform_state.id

  rule {
    apply_server_side_encryption_by_default {
      sse_algorithm = "AES256"
    }
  }
}

Üçüncüsü, S3 bucketa tüm public erişimi engellemek için aws_s3_bucket_public_access_block kaynağını kullanın. S3 bucketlar varsayılan olarak private'dır, ancak genellikle statik içerik (ör. resimler, yazı tipleri, CSS, JS, HTML) sunmak için kullanıldıklarından, bucketları public hale getirmek mümkündür, hatta kolaydır. Terraform state dosyalarınız hassas veriler içerebileceğinden, ekibinizdeki hiç kimsenin bu S3 bucketa yanlışlıkla public hale getirmemesini sağlamak için bu ekstra koruma katmanını eklemeye değerdir:

resource "aws_s3_bucket_public_access_block" "public_access" {
  bucket                  = aws_s3_bucket.terraform_state.id
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

Şimdi sağlayıcı kodunu indirmek için terraform init'i çalıştırın.

Şekil 1: Terraform init komutu

Ardından deploy etmek için terraform apply'ı çalıştırın ve planı yes yazarak onaylayın. Her şey deploy edildikten sonra bir S3 bucketa sahip olacaksınız.

Şekil 2: Terraform apply komutu

Şimdi AWS S3 yönetim paneline girdiğinizde oluşturduğunuz bucket'ı görebilirsiniz.

Şekil 3: Oluşturduğumuz S3 bucketı panelde görebilirsiniz.
💡
Eğer terraform destroy komutu ile bucketı silmek isterseniz prevent_destroy = true satırını yorum haline getirmeniz gerekmektedir. Aksi halde hata ile karşılaşırsınız.