AWS Landing Zone Accelerator ile Terraform Kullanımı
Giriş
Amazon Web Services (AWS) ekosistemini yönetmek için AWS Control Tower ve Landing Zone Accelerator on AWS (LZA) kullanımı giderek yaygınlaşmaktadır. Bu yazımızda, LZA kullanarak AWS altyapınızı yönetirken HashiCorp Terraform’u nasıl entegre edebileceğinizi detaylı bir şekilde inceleyeceğiz. LZA, AWS en iyi uygulamalarına ve küresel uyumluluk çerçevelerine uygun olarak mimari temelleri hazırlar ve çok hesaplı AWS ortamlarını yönetmek için kapsamlı bir çözüm sunar.
AWS Landing Zone Accelerator (LZA) Nedir?
LZA, AWS müşterilerine çoklu hesap yönetimi, güvenlik, uyumluluk ve operasyonel yetenekler açısından güçlü bir temel sağlar. Kamu sektörü ve sıkı düzenlemelere tabi endüstriler için özel olarak tasarlanan bu çözüm, AWS Control Tower ile birlikte kullanıldığında merkezi bir yönetişim sunar. AWS Control Tower, AWS hesaplarını merkezi olarak yönetmek için standartlaştırılmış bir yapı sunarken, LZA ile ek işlevsellikler ve güvenlik servisleri sağlanabilir.
LZA, YAML yapılandırma dosyaları kullanarak aşağıdaki bileşenlerin yönetilmesini sağlar:
- Ağ kaynakları (Amazon VPC, AWS Transit Gateway vb.)
- Şifreleme yönetimi (AWS KMS anahtarları)
- Ortam parametreleri (Geliştirme, Test, Üretim)
Terraform ile LZA altyapısını kullanarak nasıl genişletebileceğimizi ve yönetebileceğimizi inceleyelim.
Kullanım Senaryoları
Bir organizasyon, LZA kullanarak merkezi bir bulut platformu oluşturduktan sonra, farklı ekiplerin Terraform ile altyapıyı genişletmesi gerekebilir. Örneğin, bir altyapı ekibi aşağıdaki üç temel kullanım senaryosuna odaklanabilir:
- Ağ Yönetimi: Mevcut Amazon VPC altyapısının Terraform ile kullanılması
- Şifreleme Yönetimi: AWS KMS anahtarlarının kullanımı
- Ortam Parametreleri: Farklı ortamlara (Geliştirme, Test, Üretim) özgü yapılandırmaların uygulanması
Bu senaryoları adım adım inceleyelim.
1. Ağ Yönetimi
Bir AWS Organizasyonu’nda ağ kaynakları merkezi olarak yönetildiğinde, Terraform kullanıcıları mevcut ağ altyapısını kendi dağıtımları için kullanabilirler. Aşağıdaki örnekte, LZA tarafından oluşturulmuş bir Amazon VPC içinde Terraform ile bir EC2 Auto Scaling grubu oluşturacağız.
LZA Konfigürasyonu ile VPC Tanımlama
Aşağıdaki YAML yapılandırması, bir VPC’nin nasıl oluşturulduğunu gösterir:
vpcs:
- name: lza-managed-vpc
account: Sandbox
region: eu-west-2
cidrs:
- 10.0.0.0/16
enableDnsHostnames: true
enableDnsSupport: true
Terraform ile VPC’yi Kullanma
LZA tarafından sağlanan VPC’yi Terraform kodu ile kullanabiliriz:
data "aws_vpc" "this" {
tags = {
Name = "lza-managed-vpc"
}
}
data "aws_subnets" "this" {
filter {
name = "vpc-id"
values = [data.aws_vpc.this.id]
}
}
Bu bilgiler ışığında, aşağıdaki Terraform kodu ile EC2 Auto Scaling grubu oluşturabiliriz:
resource "aws_autoscaling_group" "this" {
name = "autoscaling-group"
max_size = 5
min_size = 2
desired_capacity = 4
vpc_zone_identifier = data.aws_subnets.this.ids[*]
launch_template {
id = aws_launch_template.this.id
version = "$Latest"
}
}
2. Şifreleme Yönetimi
LZA, AWS KMS anahtarlarını merkezi olarak yöneterek tüm organizasyon için şifreleme sağlar. Aşağıdaki örnekte, mevcut AWS KMS anahtarını kullanarak bir S3 bucket oluşturacağız.
Terraform ile AWS KMS Kullanımı
Öncelikle AWS KMS anahtarına erişiyoruz:
data "aws_kms_alias" "s3" {
name = "alias/accelerator/kms/s3/key"
}
Şimdi bu anahtarı kullanarak S3 bucket’ı şifreleyelim:
resource "aws_s3_bucket_server_side_encryption_configuration" "this" {
bucket = aws_s3_bucket.this.bucket
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = data.aws_kms_alias.s3.target_key_arn
sse_algorithm = "aws:kms"
}
}
}
3. Ortam Parametreleri
Farklı ortamlar için (Geliştirme, Test, Üretim) özelleştirilmiş yapılandırmalar oluşturmak için AWS Systems Manager Parameter Store’u kullanabiliriz.
LZA YAML Konfigürasyonu
customizations:
cloudFormationStacks:
- name: DevelopmentEnvironment
parameters:
- name: Environment
value: Development
Terraform ile Ortam Parametrelerini Kullanma
data "aws_ssm_parameter" "environment" {
name = "/accelerator/environment"
}
resource "aws_s3_bucket" "this" {
bucket = "bucket-${data.aws_ssm_parameter.environment.value}-${data.aws_caller_identity.current.account_id}"
}
Bu yapı, oluşturulan S3 bucket’in ortam adına göre farklılık göstermesini sağlar.
Sonuç
Bu makalede, Terraform’un AWS Landing Zone Accelerator ile nasıl entegre edilebileceğini detaylı bir şekilde ele aldık.
- Ağ yönetimi için LZA tarafından sağlanan VPC’leri nasıl kullanabileceğimizi gördük.
- Şifreleme yönetimi ile AWS KMS anahtarlarını Terraform’da nasıl kullanacağımızı inceledik.
- Ortam parametreleri ile farklı ortamlar için özelleştirilmiş yapılandırmalar oluşturduk.
Bu yöntemleri kullanarak, LZA’nın sunduğu güçlü altyapıyı Terraform ile daha esnek ve yönetilebilir hale getirebilirsiniz. AWS ortamınızın güvenliğini ve yönetişimini sağlamak için LZA ve Terraform’un sağladığı avantajları bir araya getirmek, hem ölçeklenebilir hem de uyumlu bir bulut altyapısı oluşturmanıza yardımcı olacaktır.