Alchemy: TypeScript ile Altyapı Kodlamayı (IaC) Yeniden Keşfedin
Altyapı Kodlaması (IaC) önemli ölçüde gelişti, ancak AWS CDK ve Terraform gibi araçlar genellikle özel durum yönetimi, ağır CLI'lar ve kendilerine özgü dilleriyle karmaşıklık katmanları oluşturur. Alchemy farklı bir yaklaşım benimsiyor: altyapıyı saf, birleştirilebilir TypeScript kodu olarak yeniden hayal ediyor.
Bu yazıda, Alchemy'i, felsefesini ve onunla ilk AWS kaynağınızı nasıl dağıtacağınızı inceleyeceğiz.
Alchemy Nedir?
Alchemy, Sam Goodwin tarafından oluşturulan hafif bir IaC araç setidir. Karmaşık motorlar gerektiren (CDK için JVM veya Terraform için Go runtime gibi) geleneksel araçların aksine, Alchemy sizi kontrol eden bir çerçeve değil, içe aktardığınız bir kütüphane olacak şekilde tasarlanmıştır.
CloudFormation gibi ara çeviri katmanlarına ihtiyaç duymadan, standart HTTPS isteklerini kullanarak doğrudan bulut hizmeti API'leriyle (AWS, Cloudflare gibi) iletişim kurar.
Felsefe: Sıfır Bağımlılık
Alchemy'nin temel felsefesi **"Sıfır Bağımlılık"**tır. Altyapının bir modülü içe aktarmak ve bir fonksiyon yazmak kadar doğal hissettirmesini hedefler.
- Ağır CLI yok:
bunveyanodegibi standart TypeScript çalışma zamanlarıyla çalıştırırsınız. - Doğrudan API çağrıları: AWS API'lerini temiz, asenkron fonksiyonlarla sarmalar.
- Birleştirilebilir: Kaynaklar, birleştirip yeniden kullanabileceğiniz fonksiyonlardan ibarettir.
Alchemy ile Başlangıç
Pratik bir örneğe dalalım. Alchemy ve bun kullanarak basit bir S3 bucket oluşturacağız.
Gereksinimler
Ortamınızda Bun'ın kurulu olduğundan ve AWS kimlik bilgilerinizin yapılandırıldığından emin olun.
1. Projeyi Başlatın
Yeni bir dizin oluşturun ve bir Bun projesi başlatın:
mkdir alchemy-demo
cd alchemy-demo
bun init -y
Giriş dosyasını Alchemy'nin kuralına uyacak şekilde yeniden adlandırın:
mv index.ts alchemy.run.ts
2. Alchemy'i Yükleyin
Alchemy paketini projenize ekleyin:
bun add alchemy
3. Altyapı Kodunu Yazın
alchemy.run.ts dosyasını açın ve aşağıdaki kodu ekleyin. Bu komut dosyası bir uygulama ve bir S3 bucket tanımlar.
import alchemy from 'alchemy';
import { Bucket } from 'alchemy/aws';
// Aşamayı tanımla (örn. dev, prod)
const stage = process.env.STAGE || 'dev';
// Alchemy uygulamasını başlat
const app = await alchemy('app', {
stage,
phase: process.argv.includes('--destroy') ? 'destroy' : 'up',
});
// Bir S3 Bucket kaynağı tanımla
const bucket = await Bucket('bucket', {
bucketName: `alchemy-demo-bucket-${stage}`,
});
// Uygulama durumunu sonlandır
await app.finalize();
Bu kod anlaşılır bir TypeScript kodudur. Bucket kaynağını içe aktarıyoruz, bir isimle tanımlıyoruz ve yaşam döngüsünü Alchemy hallediyor.
AWS'ye Dağıtım (Deploy)
Altyapınızı dağıtmak için komut dosyasını Bun ile çalıştırmanız yeterlidir:
bun alchemy.run.ts
Kaynak oluşturma işlemini gösteren bir çıktı görmelisiniz:
Create: "app/dev/bucket"
Created: "app/dev/bucket"
AWS Konsolunuzu kontrol ederseniz, yeni S3 bucket'ınızın kullanıma hazır olduğunu göreceksiniz.
Temizlik (Destroy)
En iyi özelliklerden biri, ortamı kaldırmanın ne kadar kolay olduğudur. Sadece kodda ele aldığımız destroy bayrağını (flag) geçirin:
bun alchemy.run.ts --destroy
Çıktı:
Delete: "app/dev/bucket"
Deleted: "app/dev/bucket"
Sonuç
Alchemy, daha basit ve geliştirici odaklı altyapı araçlarına doğru bir geçişi temsil ediyor. Standart dil özelliklerini ve doğrudan API etkileşimlerini kullanarak, geleneksel IaC araçlarının "kara kutu" büyüsünü ortadan kaldırıyor.
Modern altyapı yaklaşımlarıyla ilgileniyorsanız, AWS Danışmanlığı ve Kubernetes Danışmanlığı hizmetlerimize göz atabilirsiniz.
Sıkça Sorulan Sorular (SSS)
1. Alchemy durumu (state) nasıl yönetir?
Alchemy takılabilir bir durum yönetim sistemi kullanır. Varsayılan olarak durumu yerel olarak veya bulut depolamada saklayabilir ve karmaşık arka uç yapılandırmaları olmadan kaynak yaşam döngülerini şeffaf bir şekilde izler.
2. Alchemy prodüksiyon için hazır mı?
Alchemy daha yeni bir araçtır. Harika bir geliştirici deneyimi sunsa da, büyük ölçekli prodüksiyon iş yüklerini taşımadan önce olgunluğunu ve topluluk desteğini değerlendirmelisiniz.
3. Alchemy'i diğer bulut sağlayıcılarıyla kullanabilir miyim?
Evet, Alchemy genişletilebilir olacak şekilde tasarlanmıştır. AWS birincil odak noktası olsa da, mimarisi API'lerini benzer kaynak fonksiyonlarıyla sararak Cloudflare ve GitHub gibi diğer sağlayıcıları destekler.
Kaynak / Source: https://awsfundamentals.com/blog/alchemy-reimagining-iac