Rust API’sini GitLab Pipeline ile Cloud Run’a Deploy Etme
Rust ile geliştirdiğiniz performanslı ve güvenilir API’nizi Google Cloud Run’a, GitLab’ın güçlü CI/CD pipeline’larını kullanarak nasıl kolayca deploy edeceğinizi adım adım açıklayacağız. Bu rehber, hem yeni başlayanlar hem de deneyimli geliştiriciler için faydalı bilgiler içermektedir. Rust, Cloud Run ve GitLab’ın birleşimi ile hızlı ve ölçeklenebilir bir uygulama dağıtım süreci oluşturacaksınız. Hazırsanız, başlayalım!
Rust API Geliştirme Temelleri: İlk Adımlar
Öncelikle, Rust ile basit bir API geliştireceğiz. Bu bölümde, temel Rust yapıları ve web framework’leri hakkında bilgi sahibi olmanız gerekmektedir. Eğer Rust programlama diline yeni başladıysanız, Rust resmi dokümantasyonuna (https://www.rust-lang.org/learn) göz atmanızı tavsiye ederim. Bu rehberde, popüler ve kullanımı kolay bir web framework’ü olan Actix Web’i kullanacağız. Actix Web, asenkron programlama modeliyle yüksek performans sunar. Projemizi oluşturmak için cargo kullanacağız:
cargo new my-rust-api --bin
Daha sonra Cargo.toml dosyasına Actix Web bağımlılığını eklemeliyiz:
[dependencies]
actix-web = "4"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
Şimdi basit bir "Hello World" API'si oluşturalım:
use actix_web::{get, App, HttpResponse, HttpServer, Responder};
#[get("/")]
async fn hello() -> impl Responder {
HttpResponse::Ok().body("Hello World!")
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(hello)
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
Bu kod, / yoluna gelen isteklere "Hello World!" cevabı veren basit bir API tanımlar. cargo run komutu ile bu API'yi çalıştırabilirsiniz. Daha karmaşık API'ler için, veritabanı entegrasyonu, hata yönetimi ve güvenlik önlemleri gibi konuları da ele almanız gerekecektir. Bu konular ileri düzeyde daha detaylı ele alınacaktır. Bu aşamada, temel bir API'nin nasıl oluşturulduğunu anlamak önemlidir.
GitLab CI/CD Pipeline Kurulumu: Kodun Yolculuğu
API'mizi geliştirdikten sonra, GitLab'ın CI/CD pipeline'ını kullanarak otomatik olarak Cloud Run'a deploy edeceğiz. Öncelikle, GitLab projenizde bir .gitlab-ci.yml dosyası oluşturmalısınız. Bu dosya, pipeline'ın nasıl çalışacağını tanımlar. Aşağıdaki örnek .gitlab-ci.yml dosyası, Rust projenizi derleyip Cloud Run'a deploy eder:
stages:
- build
- deploy
build:
stage: build
image: rust:1.68
script:
- cargo build --release
artifacts:
paths:
- target/release/my-rust-api
deploy:
stage: deploy
image: google/cloud-sdk:latest
services:
- docker:latest
before_script:
- gcloud auth activate-service-account --key-file "$GOOGLE_APPLICATION_CREDENTIALS"
- gcloud config set project "$PROJECT_ID"
- docker login -u _json_key -p "$GOOGLE_APPLICATION_CREDENTIALS" https://us-docker.pkg.dev
script:
- docker build -t us-docker.pkg.dev/$PROJECT_ID/$PROJECT_NAME/my-rust-api:latest .
- docker push us-docker.pkg.dev/$PROJECT_ID/$PROJECT_NAME/my-rust-api:latest
- gcloud run deploy my-rust-api --image us-docker.pkg.dev/$PROJECT_ID/$PROJECT_NAME/my-rust-api:latest --platform managed
only:
- main
variables:
GOOGLE_APPLICATION_CREDENTIALS: "$GOOGLE_APPLICATION_CREDENTIALS"
PROJECT_ID: "$PROJECT_ID"
PROJECT_NAME: "$PROJECT_NAME"
Bu dosyada, öncelikle build ve deploy aşamaları tanımlanmıştır. build aşamasında Rust projesi derlenir ve target/release/my-rust-api dosyası oluşturulur. deploy aşamasında ise, Google Cloud SDK kullanılarak docker imajı oluşturulur, Google Container Registry'ye (GCR) yüklenir ve son olarak Cloud Run'a deploy edilir. GOOGLE_APPLICATION_CREDENTIALS, PROJECT_ID ve PROJECT_NAME değişkenleri GitLab değişkenleri olarak tanımlanmalıdır. Bu değişkenler, Google Cloud projenizin kimlik bilgilerini içerir. Dikkatlice bu değişkenleri oluşturmanız ve güvenli bir şekilde saklamanız gerekir.
Google Cloud Projesi ve Cloud Run Hazırlığı: Altyapı Kurulumu
Cloud Run'a deploy etmek için Google Cloud Platform'da (GCP) bir proje oluşturmanız ve gerekli izinleri ayarlamanız gerekmektedir. Google Cloud Console'da bir proje oluşturun ve Cloud Run API'sini etkinleştirin. Sonrasında, Google Cloud SDK'yı yerel makinenize yükleyip yapılandırmanız gerekmektedir. Google Cloud'un sağladığı servis hesabı yetkilendirmelerini kullanarak, .gitlab-ci.yml dosyasındaki GOOGLE_APPLICATION_CREDENTIALS değişkenine bir servis hesabı JSON dosyası yolunu girmeniz gerekir. Bu dosyayı Google Cloud Console üzerinden oluşturup indirmeniz gerekecektir. Bu dosyayı asla public bir repository'ye koymamalısınız! PROJECT_ID ve PROJECT_NAME değişkenlerini de ilgili değerler ile doldurmanız gerekmektedir. Daha detaylı bilgi için Google Cloud dokümantasyonuna (https://cloud.google.com/run/docs) bakabilirsiniz.
Projeniz, GCR'ye push edilecek docker imajını oluşturmak için bir Dockerfile'a ihtiyaç duyar. Basit bir Dockerfile örneği aşağıdaki gibidir:
FROM rust:1.68
WORKDIR /app
COPY Cargo.toml .
COPY Cargo.lock .
RUN cargo build --release
COPY . .
CMD ["./target/release/my-rust-api"]
İleri Düzey Konular: Ölçeklendirme ve Güvenlik
API'nizin performansını ve güvenliğini iyileştirmek için ileri düzey teknikleri kullanabilirsiniz. Örneğin, API'niz yüksek trafik alıyorsa, Cloud Run'ın otomatik ölçeklendirme özelliğini kullanarak kaynakları dinamik olarak ayarlayabilirsiniz. Bunun için Cloud Run'da minimum ve maksimum instance sayısını belirleyebilirsiniz. Ayrıca, API'niz için güvenlik duvarı kuralları ve kimlik doğrulama mekanizmaları uygulayarak güvenliğini artırabilirsiniz. JWT (JSON Web Token) gibi token tabanlı kimlik doğrulama yöntemleri kullanabilirsiniz. Veritabanı entegrasyonu için güvenli bağlantı yöntemlerini kullanmalısınız (örneğin, SSL/TLS). Daha karmaşık API'ler için, hata yönetimi, logging ve monitoring sistemlerini de entegre etmeniz önemlidir.
Ayrıca, performansı daha da artırmak için Rust'ın sunduğu asenkron programlama olanaklarından tam olarak yararlanmalısınız. Actix Web gibi asenkron framework'leri, birden fazla isteği aynı anda işleyebildiği için performansı önemli ölçüde artırabilir. Eğer API'nizde yoğun hesaplama işlemleri varsa, bu işlemleri ayrı bir servis olarak (örneğin Cloud Functions veya Kubernetes) çalıştırarak API'nin performansını koruyabilirsiniz. Bu, API'nizin genel yanıt süresini iyileştirmeye yardımcı olur.
Gerçek Dünya Senaryoları ve Vaka Analizleri
Örneğin, bir e-ticaret platformunda ürün katalogunu gösteren bir API geliştiriyorsanız, Rust'ın performans avantajlarından yararlanarak hızlı yanıt süreleri sağlayabilirsiniz. Bu API, veritabanından ürün bilgilerini çekerek JSON formatında istekleri yanıtlayabilir. GitLab pipeline'ı kullanarak, kod değişikliklerini otomatik olarak Cloud Run'a deploy ederek, yeni özelliklerin hızlı bir şekilde kullanıma sunulmasını sağlayabilirsiniz. Ayrıca, A/B testi yapmak için farklı API sürümlerini Cloud Run'da çalıştırabilirsiniz. Bu, farklı özelliklerin performansını ve kullanıcı deneyimini karşılaştırarak en iyi seçeneği belirlemenize yardımcı olur.
Başka bir örnek olarak, bir IoT cihazından veri toplayan ve işleyen bir API geliştirebilirsiniz. Rust'ın güvenilirliği ve gömülü sistemlerdeki performansı, bu tür bir uygulama için ideal bir seçimdir. GitLab pipeline'ı, bu API'yi sürekli olarak güncelleyerek, cihazların en son yazılım sürümünü çalıştırmasını sağlar. Bu yaklaşım, sistemin güvenilirliğini ve performansını sürekli olarak iyileştirmenize olanak tanır. Ayrıca, Cloud Run'ın ölçeklenebilirliği, artış gösteren veri hacmini yönetmenize yardımcı olur.
Öğrenme Yol Haritası
Yeni Başlayanlar
- Rust programlama dilinin temellerini öğrenin.
- Basit bir Rust API'si oluşturun ve çalıştırın.
- GitLab ve Google Cloud Platform hesapları oluşturun.
- Basit bir
.gitlab-ci.ymldosyası oluşturun ve çalıştırın.
Orta Seviye
- Actix Web gibi bir web framework'ü kullanarak daha karmaşık API'ler oluşturun.
- Veritabanı entegrasyonu yapın.
- Kimlik doğrulama ve yetkilendirme mekanizmaları ekleyin.
- Dockerfile oluşturarak Docker imajı oluşturun ve GCR'ye yükleyin.
İleri Seviye
- Cloud Run'ın ölçeklendirme özelliklerini kullanın.
- Güvenlik duvarı kuralları ve güvenlik önlemleri uygulayın.
- Hata yönetimi, logging ve monitoring sistemleri entegre edin.
- Performans optimizasyonları yapın.
Sonuç
Bu rehberde, Rust ile geliştirilen bir API'nin GitLab CI/CD pipeline'ı ile Cloud Run'a nasıl deploy edileceğini adım adım açıkladık. Bu yöntem, hızlı, güvenilir ve ölçeklenebilir bir uygulama dağıtım süreci sağlar. Rust'ın performans avantajları ve Cloud Run'ın ölçeklenebilirliği birleştirilerek, yüksek performanslı ve güvenilir API'ler geliştirebilirsiniz. Daha fazla bilgi için (https://fatihsoysal.com) inceleyebilirsiniz.
Sıkça Sorulan Sorular
- Soru: Google Cloud SDK'yı nasıl yüklerim? Cevap: Google Cloud SDK'nın resmi dokümantasyonundan (https://cloud.google.com/sdk/docs/install) indirme ve kurulum talimatlarını takip edebilirsiniz.
- Soru: Servis hesabı nasıl oluşturulur? Cevap: Google Cloud Console'da Servis Hesapları bölümünden yeni bir servis hesabı oluşturabilir ve JSON dosyasını indirebilirsiniz.
- Soru:
.gitlab-ci.ymldosyasındaki değişkenleri nasıl saklarım? Cevap: GitLab'ın sağladığı "Variables" özelliğini kullanarak bu değişkenleri güvenli bir şekilde saklayabilirsiniz. - Soru: Cloud Run'ın ölçeklendirme ayarlarını nasıl yaparım? Cevap: Cloud Run'ın arayüzünden veya
gcloudkomutlarını kullanarak minimum ve maksimum instance sayısını ayarlayabilirsiniz. - Soru: Rust dışında başka hangi diller Cloud Run'da kullanılabilir? Cevap: Cloud Run, Docker imajı çalıştırabildiği için birçok dil ve framework ile uyumludur. Python, Node.js, Java, Go gibi diller yaygın olarak kullanılır.
Yazar: Fatih Soysal