AWS'de Serverless ToDo Uygulaması: Terraform ve GitHub Actions ile
Bir ToDo uygulaması geliştirmek basit gibi görünse de, ölçeklenebilirlik, güvenlik ve bakım gibi faktörleri göz önünde bulundurmak oldukça karmaşık olabilir. Bu makalede, AWS'nin sunduğu serverless mimarisi, Terraform'un altyapı yönetimi yetenekleri ve GitHub Actions'ın sürekli entegrasyon/sürekli dağıtım (CI/CD) gücüyle nasıl basit ve güçlü bir ToDo uygulaması oluşturabileceğinizi adım adım göstereceğiz. Bu uygulama sayesinde, sunucu yönetimi derdinden kurtulup, kodunuza odaklanabilirsiniz.
Serverless Mimari Nedir ve Neden Kullanmalıyız?
Serverless mimari, sunucu yönetimi sorumluluğunu bulut sağlayıcısına devrederek, kodunuza odaklanmanızı sağlayan bir yaklaşım. AWS Lambda gibi serverless fonksiyonları kullanarak, kodunuz sadece ihtiyaç duyulduğunda çalışır ve kaynakları yalnızca o süre boyunca tüketir. Bu da maliyet tasarrufu ve ölçeklenebilirlik sağlar. Örneğin, ToDo uygulamanızda bir kullanıcı yeni bir görev eklediğinde, Lambda fonksiyonu tetiklenir ve veri tabanı işlemlerini gerçekleştirir. Kullanıcı sayısı arttığında, Lambda fonksiyonları otomatik olarak ölçeklenir ve performans düşüşü yaşamazsınız. Bu esneklik, geleneksel sunucu tabanlı uygulamalara göre çok daha avantajlıdır. Ayrıca, serverless mimari, uygulamanızın daha güvenli ve daha kolay yönetilebilir olmasını sağlar.
Temel Kavramlar: AWS Servisleri ve Araçları
Bu projeyi anlamanız için bazı temel AWS servislerini ve araçlarını tanımanız gerekiyor. İlk olarak, AWS Lambda, kodunuzun çalıştırılacağı serverless hesaplama ortamıdır. Amazon DynamoDB, uygulamanızın verilerini saklamak için kullanacağımız NoSQL veritabanıdır. API Gateway, uygulamanızın dış dünyaya açılan kapısıdır ve istekleri Lambda fonksiyonlarına yönlendirir. Terraform, altyapınızı kod olarak tanımlamanızı ve yönetmenizi sağlayan bir altyapı olarak kod (IaC) aracıdır. Son olarak, GitHub Actions, kodunuzun sürekli entegrasyon ve dağıtımını otomatikleştirmenize yardımcı olur. Bu bileşenler, ToDo uygulamasının temel taşlarını oluşturur ve birlikte kusursuz bir iş akışı sağlar. Bu araçların güçlü kombinasyonu, geliştirme sürecini hızlandırır ve uygulamanın güvenilirliğini artırır.
Uygulamanın Mimarisini Tasarlamak: API Gateway, Lambda ve DynamoDB
Uygulamamız, API Gateway tarafından yönlendirilen istekleri işleyen Lambda fonksiyonlarından ve verileri saklayan DynamoDB'den oluşacaktır. API Gateway, RESTful API'ler oluşturarak istekleri Lambda fonksiyonlarına iletir. Lambda fonksiyonları, DynamoDB ile etkileşerek verileri yönetir. Bu mimari, uygulamanın farklı bileşenlerini ayrıştırır ve ölçeklenebilirliğini artırır. Örneğin, yüksek trafik durumunda, API Gateway ve Lambda fonksiyonları otomatik olarak ölçeklenir ve performans düşüşü önlenir. Bu mimari ayrıca, uygulamanın bakımını ve güncellemesini kolaylaştırır. Her bileşeni bağımsız olarak yönetebilir ve güncelleyebilirsiniz. Daha detaylı bilgi için fatihsoysal.com sitesini ziyaret edebilirsiniz.
Terraform ile Altyapıyı Otomatikleştirmek
Terraform kullanarak, tüm AWS kaynaklarını kod olarak tanımlayabiliriz. Bu, altyapınızı versiyon kontrolü altına almanıza ve kolayca yönetebilmenize olanak tanır. Aşağıdaki örnek, bir DynamoDB tablosu ve bir API Gateway endpoint'i oluşturmak için kullanılan Terraform kodunu göstermektedir:
terraform
resource "aws_dynamodb_table" "todo" {
name = "todo-table"
billing_mode = "PAY_PER_REQUEST"
hash_key = "id"
attribute {
name = "id"
type = "S"
}
}
resource "aws_api_gateway_rest_api" "todo_api" {
name = "TodoAPI"
}
resource "aws_api_gateway_resource" "proxy" {
rest_api_id = aws_api_gateway_rest_api.todo_api.id
parent_id = aws_api_gateway_rest_api.todo_api.root_resource_id
path_part = "{proxy+}"
}
Bu kod, DynamoDB tablosunun ve API Gateway endpoint'inin oluşturulmasını tanımlar. Terraform, bu kodu çalıştırarak AWS'de gerekli kaynakları otomatik olarak oluşturur. Bu, altyapı yönetimini oldukça basitleştirir ve hataları azaltır.
GitHub Actions ile Sürekli Entegrasyon ve Dağıtım (CI/CD)
GitHub Actions, kod değişiklikleriniz otomatik olarak test edilmesini ve dağıtılmasını sağlar. Bir GitHub Actions workflow'ü oluşturarak, kodunuz her push edildiğinde Terraform'u çalıştırabilir ve uygulamanızı otomatik olarak dağıtabilirsiniz. Bu, geliştirme sürecini hızlandırır ve hataları erken aşamalarda yakalamanıza yardımcı olur. Aşağıdaki örnek, bir basit GitHub Actions workflow'ünü gösterir:
yaml
name: Deploy Todo App
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Terraform
run: sudo apt-get update && sudo apt-get install -y terraform
- name: Apply Terraform
run: terraform init && terraform apply -auto-approve
Bu workflow, kodunuz main dalına push edildiğinde Terraform'u çalıştırır ve değişiklikleri AWS'de uygular. Bu otomatik dağıtım süreci, geliştirme ekibinin zamanını korur ve uygulamanın her zaman güncel kalmasını sağlar.
Lambda Fonksiyonlarını Yazmak ve API Gateway ile Entegre Etmek
Lambda fonksiyonlarını Python, Node.js, Java veya Go gibi birçok dilde yazabilirsiniz. Bu fonksiyonlar, API Gateway tarafından gönderilen istekleri işler ve DynamoDB ile etkileşim kurar. Aşağıdaki örnek, bir Node.js Lambda fonksiyonunun temel yapısını gösterir:
javascript
exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
Bu fonksiyon, basit bir "Hello from Lambda!" mesajı döndürür. Daha karmaşık fonksiyonlar, DynamoDB ile etkileşim kurarak veri işlemlerini gerçekleştirir. API Gateway, Lambda fonksiyonlarını belirli HTTP yöntemleri (GET, POST, PUT, DELETE) ile ilişkilendirir, böylece farklı işlemler için farklı fonksiyonları çağırır. Bu entegrasyon, uygulamanın RESTful API'sini oluşturur.
Gerçek Dünya Senaryoları ve Vaka Analizleri
Örneğin, bir e-ticaret şirketinin ürün envanterini yönetmesi veya bir sosyal medya platformunun kullanıcı yorumlarını işlemesi gibi uygulamalarda serverless mimari kullanılabilir. Bu uygulamalar, serverless mimarisinin ölçeklenebilirlik ve maliyet avantajlarını göstermektedir. Yüksek trafik dönemlerinde, serverless fonksiyonlar otomatik olarak ölçeklenir ve performans düşüşü yaşanmaz. Aynı zamanda, düşük trafik dönemlerinde kaynak tüketimi minimuma indirilir, böylece maliyetler azaltılır. Bu, geleneksel sunucu tabanlı uygulamalara göre büyük bir avantajdır.
İleri Düzey Konular: Güvenlik ve Performans Optimizasyonu
Uygulamanızın güvenliğini sağlamak için, IAM rollerini doğru şekilde yapılandırmanız ve Lambda fonksiyonlarınıza erişimi kısıtlamanız önemlidir. Ayrıca, DynamoDB tablosuna erişimi kontrol etmek ve veri şifrelemesi kullanmak da güvenliği artırır. Performans optimizasyonu için, Lambda fonksiyonlarını optimize etmeli ve veritabanı sorgularını iyileştirmelisiniz. Büyük verilerle çalışıyorsanız, DynamoDB'nin global tablo özelliğini kullanabilirsiniz. Daha fazla ipucu ve püf noktası için fatihsoysal.com sitesini inceleyebilirsiniz.
Öğrenme Yol Haritası
Yeni Başlayan:
- AWS Lambda, API Gateway ve DynamoDB'nin temel kavramlarını öğrenin.
- Basit bir Hello World Lambda fonksiyonu oluşturun.
- Terraform'un temel komutlarını öğrenin.
Orta Seviye:
- Bir API Gateway endpoint'i oluşturun ve bir Lambda fonksiyonu ile entegre edin.
- DynamoDB'ye veri ekleme, okuma, güncelleme ve silme işlemlerini gerçekleştiren bir Lambda fonksiyonu yazın.
- Terraform ile basit bir altyapı oluşturun.
İleri Seviye:
- GitHub Actions kullanarak CI/CD pipeline'ı oluşturun.
- Uygulamanızın güvenliğini sağlamak için IAM rollerini ve politikalarını yapılandırın.
- Uygulamanızın performansını optimize edin.
Sonuç
Bu makalede, AWS'de serverless bir ToDo uygulaması geliştirmenin temel adımlarını anlattık. Serverless mimari, Terraform ve GitHub Actions kullanarak, ölçeklenebilir, güvenli ve kolay yönetilebilir bir uygulama oluşturabilirsiniz. Bu yaklaşım, geliştirme sürecini hızlandırır ve maliyetleri azaltır. Unutmayın ki güvenlik ve performans optimizasyonu her zaman önemlidir. Uygulamanızı güvence altına almak ve performansını en üst düzeye çıkarmak için gerekli önlemleri alın.
Sıkça Sorulan Sorular
- Serverless mimarinin maliyeti nedir? Serverless mimari, kullanımı bazlı ödeme modeline sahiptir. Sadece kullandığınız kaynaklar için ödeme yaparsınız.
- Serverless mimari ölçeklenebilir mi? Evet, serverless mimari otomatik olarak ölçeklenir. Kullanıcı talebindeki artışa göre kaynaklar otomatik olarak artar.
- Terraform ne işe yarar? Terraform, altyapınızı kod olarak tanımlamanıza ve yönetmenize olanak sağlayan bir IaC aracıdır.
- GitHub Actions nedir? GitHub Actions, kodunuzun sürekli entegrasyon ve dağıtımını otomatikleştiren bir CI/CD platformudur.
- Uygulamanın güvenliği nasıl sağlanır? IAM rolleri, politikalar ve veri şifrelemesi kullanılarak uygulamanın güvenliği sağlanabilir.
Yazar: Fatih Soysal
