A
<p>Kod Olarak Altyapı (Infrastructure as Code - IaC), bulut kaynaklarını yönetmek için standart bir uygulama haline geldi. Terraform gibi araçlar alana özgü diller (HCL) kullanırken, Pulumi farklı bir yaklaşım benimseyerek altyapınızı TypeScript, Python, Go ve C# gibi bildiğiniz genel amaçlı programlama dilleriyle tanımlamanıza olanak tanır.</p>
<p>Bu rehberde, Pulumi'nin temel kavramlarını inceleyecek ve TypeScript kullanarak gerçek bir AWS kaynağı dağıtacağız.</p>
<h2 id="pulumi-nedir">Pulumi Nedir?</h2>
<p>Pulumi, bulut altyapısını oluşturmanıza, dağıtmanıza ve yönetmenize olanak tanıyan açık kaynaklı bir IaC aracıdır. Yeni bir sözdizimi öğrenmenizi gerektiren diğer araçların aksine, Pulumi mevcut ekosistemlerden yararlanır.</p>
<ul>
<li><strong>Diller:</strong> Döngüler, fonksiyonlar, sınıflar ve paket yöneticilerini (npm, pip) kullanabilirsiniz.</li>
<li><strong>Durum (State) Yönetimi:</strong> Pulumi, altyapınızın durumunu varsayılan olarak Pulumi Cloud'da veya tercih ederseniz bir S3 bucket/yerel dosya sisteminde saklar.</li>
<li><strong>Çoklu Bulut:</strong> AWS, Azure, Google Cloud ve Kubernetes'i destekler.</li>
</ul>
<h2 id="on-kosullar">Ön Koşullar</h2>
<p>Başlamadan önce aşağıdakilerin kurulu olduğundan emin olun:</p>
<ul>
<li><strong>Node.js:</strong> TypeScript çalışma zamanı için gereklidir.</li>
<li><strong>AWS CLI:</strong> AWS kimlik bilgilerinizle yapılandırılmış olmalıdır (<code>aws configure</code>).</li>
<li><strong>Pulumi CLI:</strong> Homebrew (macOS), curl (Linux) veya Chocolatey (Windows) ile kurulabilir.</li>
</ul>
<pre><code class="language-bash"># macOS
brew install pulumi
Linux
curl -fsSL https://get.pulumi.com | sh
Windows
choco install pulumi</code></pre>
<h2 id="projeyi-kurma">Projeyi Kurma</h2>
<p>AWS TypeScript şablonunu kullanarak yeni bir Pulumi projesi oluşturalım.</p>
<h3 id="1-projeyi-baslatma">1. Projeyi Başlatma</h3>
<pre><code class="language-bash">mkdir pulumi-aws-demo && cd pulumi-aws-demo
pulumi new aws-typescript</code></pre>
<p>CLI sizden şunları isteyecektir:</p>
<ul>
<li><strong>Project name:</strong> (varsayılan: pulumi-aws-demo)</li>
<li><strong>Description:</strong> Kısa bir açıklama.</li>
<li><strong>Stack name:</strong> (varsayılan: dev) - Bu, izole edilmiş bir ortamı temsil eder (örn. dev, prod).</li>
<li><strong>AWS Region:</strong> (örn. us-east-1).</li>
</ul>
<h2 id="altyapi-kodunu-yazma">Altyapı Kodunu Yazma</h2>
<p><code>index.ts</code> dosyasını açın. Kaynaklarımızı burada tanımlarız. Basit bir S3 bucket oluşturacağız.</p>
<pre><code class="language-typescript">import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
// AWS kaynağı oluştur (S3 Bucket) const bucket = new aws.s3.Bucket("my-bucket", { tags: { Environment: "Dev", Name: "MyPulumiBucket" } });
// Bucket adını dışa aktar export const bucketName = bucket.id;</code></pre>
<p><strong>Temel Kavramlar:</strong></p>
<ul>
<li><strong>Resources (Kaynaklar):</strong> <code>aws.s3.Bucket</code>, AWS S3 hizmetine eşlenen bir Pulumi kaynak sınıfıdır.</li>
<li><strong>Outputs (Çıktılar):</strong> <code>bucket.id</code> bir çıktı özelliğidir. Pulumi bu değeri kaynak oluşturulduktan sonra kesinleştirir.</li>
<li><strong>Exports (Dışa Aktarmalar):</strong> <code>export const bucketName</code>, dağıtımdan sonra bu değeri CLI'da görmemizi sağlar.</li>
</ul>
<h2 id="altyapiyi-dagitma">Altyapıyı Dağıtma</h2>
<p>Kaynakları sağlamak (provision) için şu komutu çalıştırın:</p>
<pre><code class="language-bash">pulumi up</code></pre>
<p>Pulumi değişikliklerin bir önizlemesini ("plan") gösterecektir. İnceleyin ve onaylamak için <strong>yes</strong> seçeneğini seçin.</p>
<pre><code class="language-bash">Updating (dev)
Type Name Status
- pulumi:pulumi:Stack pulumi-aws-demo created
- └─ aws:s3:Bucket my-bucket created
Outputs: bucketName: "my-bucket-12345abcdef"
Resources: + 2 created
Duration: 4s</code></pre>
<h2 id="dagitimi-dogrulama">Dağıtımı Doğrulama</h2>
<p>Bucket'ın var olduğunu AWS CLI kullanarak doğrulayabilirsiniz:</p>
<pre><code class="language-bash">aws s3 ls | grep my-bucket</code></pre>
<h2 id="temizlik">Temizlik</h2>
<p>Maliyet oluşmasını önlemek için işiniz bittiğinde kaynakları yok edin:</p>
<pre><code class="language-bash">pulumi destroy</code></pre>
<p>Bu stack tarafından yönetilen tüm kaynakları kaldırmak için <strong>yes</strong> ile onaylayın.</p>
<h2 id="sss">SSS</h2>
<h3>Pulumi ücretsiz mi?</h3>
<p>Pulumi açık kaynaklıdır ve bireysel geliştiriciler için kullanımı ücretsizdir. Gelişmiş politika ve durum yönetimi özelliklerine ihtiyaç duyan ekipler için ücretli planlar sunarlar.</p>
<h3>Pulumi durumumu (state) nerede saklar?</h3>
<p>Varsayılan olarak Pulumi, durumu Pulumi Cloud'da (yönetilen hizmet) saklar. Ancak, durumu yerel olarak veya bir S3 bucket/Azure Blob/GCS içinde saklayacak şekilde yapılandırabilirsiniz.</p>
<h3>Mevcut AWS kaynaklarını kullanabilir miyim?</h3>
<p>Evet, Pulumi mevcut kaynakları stack'inize aktarmanızı (import) destekler, böylece onları kod aracılığıyla yönetebilirsiniz.</p>