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 kaynaktaprevent_destroy
özelliğinitrue
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.
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.
Şimdi AWS S3 yönetim paneline girdiğinizde oluşturduğunuz bucket'ı görebilirsiniz.
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.