CDK Construct’larıyla Çalışmak
AWS CDK uygulamaları, temel yapısal öğeler olarak construct’lara dayanır. İster yerleşik servis construct’larını kullanın ister kendi yeniden kullanılabilir desenlerinizi oluşturun, construct’ları ustalıkla kullanmak altyapı kodunuzu daha modüler, sürdürülebilir ve okunabilir hale getirir.
Bu bölüm, L2 (üst düzey) construct’ların kullanımını ve tekrarlayan desenleri azaltan özel construct’ların nasıl geliştirileceğini öğretir.
L2 construct’ları kullanma
L2 construct’lar, ham CloudFormation’a (L1) göre kullanımı daha kolay CDK-yerel soyutlamalardır. Makul varsayılanlara ve tip güvenliğine sahiptir; genellikle bir AWS kaynağını kurmak için daha az satır kod gerektirirler.
Neden L2 construct’ları kullanmalı?
- Daha az şablon kodu — L1’e kıyasla daha az zorunlu alan
- Daha okunabilir ve deyimsel Python kodu
.add_to_role_policy()veya.add_event_notification()gibi yardımcı yöntemler içerir- Kaynaklar arasındaki bağımlılıkları otomatik olarak yönetir
Örnek: L2 kullanarak S3 kovası oluşturma
from aws_cdk import aws_s3 as s3
# Create a versioned and encrypted S3 bucket
bucket = s3.Bucket(
self,
"MyBucket",
versioned=True,
encryption=s3.BucketEncryption.S3_MANAGED
)
Eşdeğer L1 construct’ı s3.CfnBucket, tüm özelliklerin elle ayarlanmasını ve yapılandırmanın ham dict’ler olarak tanımlanmasını gerektirir — çok daha az sezgiseldir.
Diğer yaygın L2 construct’lar şunlardır:
- AWS Lambda için
lambda_.Function() - DynamoDB için
dynamodb.Table() - SQS için
sqs.Queue() - SNS için
sns.Topic()
Özel construct’lar oluşturma
Altyapınız, belirli izinlere sahip Lambda fonksiyonları ve S3 kovaları oluşturmak gibi yinelenen desenlerle genişleyecektir. Bu özel senaryo için en ideal çözüm özel construct’lardır.
Özel construct’lar, ilişkili kaynakları tek bir mantıksal birimde birleştirmenize olanak tanır; bu birim yığınlar veya projeler arasında yeniden kullanılabilir.
Ne zaman özel bir construct oluşturmalı:
- Her zaman birlikte sağlanan 3+ kaynağınız varsa
- Yeniden kullanılabilir mantığı kapsüllemek istediğinizde
- Yığınlar arasında kod tekrarını azaltmak istediğinizde
Örnek: Yeniden kullanılabilir S3 + Lambda deseni
from constructs import Construct
from aws_cdk import aws_s3 as s3, aws_lambda as lambda_
class StorageWithLambda(Construct):
def __init__(self, scope: Construct, id: str) -> None:
super().__init__(scope, id)
# S3 bucket
self.bucket = s3.Bucket(self, "MyBucket")
# Lambda function
self.function = lambda_.Function(
self,
"MyFunction",
runtime=lambda_.Runtime.PYTHON_3_9,
handler="index.handler",
code=lambda_.Code.from_asset("lambda")
)
# Grant Lambda access to the S3 bucket
self.bucket.grant_read_write(self.function)
Artık bu construct’ı herhangi bir yığın içinde şöyle kullanabilirsiniz:
from my_project.storage_with_lambda import StorageWithLambda
storage = StorageWithLambda(self, "ReusableComponent")
Yukarıdakini çalıştırmadan önce, proje kökünde lambda adlı bir klasör ve içinde aşağıdaki içeriğe sahip index.py dosyası oluşturun:
def handler(event, context):
return {
"statusCode": 200,
"body": "Hello from Lambda!"
}
Yeniden kullanılabilirlik ipuçları
- Dosyaları
construct_önekiyle adlandırın veya birconstructs/klasörüne yerleştirin - Esneklik için
self.bucketveyaself.functiongibi çıktı alanlarını dışa açın - Her construct’ı tek bir sorumluluğa odaklı tutun
CDK Uygulamalarını Test Etme ve Sentezleme
Altyapı kodunuzu yazdıktan sonra, CDK’nin neleri dağıtacağını kontrol etmek ve ideal olarak yığınlarınızın beklendiği gibi davrandığını test etmek esastır. AWS CDK, CloudFormation şablonları sentezlemek ve dağıtımdan önce yanlış yapılandırmaları yakalamak için otomatik testler yazmanıza olanak tanıyan araçlar sağlar.
Şablonları sentezleme
cdk synth komutu, CDK kodunuzdan CloudFormation şablonu üretir.
cdk synth
Bunu çalıştırdığınızda CDK:
- Uygulamanızı (
app.pyaracılığıyla) yükler - Tüm construct ve yığınları çözümler
- Ham YAML/JSON CloudFormation şablonları çıktılar

Sentezlenen CloudFormation şablonu
Varsayılan olarak çıktı terminalinize gider, ancak gerekirse bir dosyaya da yönlendirebilirsiniz:
cdk synth > template.yaml
Şu durumlarda kullanışlıdır:
- Dağıtmadan önce gerçek şablonu incelemek istediğinizde
- Bir yığının yapısını hata ayıklarken
- CDK kullanmayan ekiplerle şablonu paylaşırken
Altyapıyı test etme
Altyapı olarak kodu test etmek alışılmadık gelebilir, ancak özellikle yığınlarınız büyüdüğünde veya koşullu mantık, döngüler ya da yeniden kullanılabilir construct’lar içerdiğinde oldukça faydalıdır.
AWS CDK, sentezlenen yığınları test etmek için assertions modülü sunar.
pytest ile basit bir test yazma
Aşağıda, yığında belirli bir kaynağın (ör. S3 kovası) yer aldığını kontrol eden örnek bir test yer alır:
# test/test_cdk_datacamp_stack.py
import aws_cdk as cdk
from aws_cdk.assertions import Template
from cdk_datacamp.cdk_datacamp_stack import CdkDatacampStack
def test_s3_bucket_created():
app = cdk.App()
stack = CdkDatacampStack(app, "TestStack")
template = Template.from_stack(stack)
# Assert that an S3 bucket exists
template.resource_count_is("AWS::S3::Bucket", 1)
Testleri çalıştırmak için pytest kurulu olduğundan emin olun:
pip install -U pytest
Ardından şunu çalıştırın:
pytest
Her şey geçerse yeşil bir onay işareti görürsünüz. Aksi halde, test çıktısı eksik olanı size söyleyecektir.
AWS CDK yığını için tüm testlerin başarıyla çalıştığını gösteren Pytest çıktısı
CDK yığınınıza doğrulama da ekleyebilirsiniz. Doğrulama testleri, dağıtım gerçekleşmeden önce girdileri doğrulayan construct veya yığın kodunuz içindeki çalışma zamanı kontrolleridir. Hatalı yapılandırmaları yakalamaya veya geliştirme yaşam döngüsünün erken safhalarında kısıtlamaları uygulamaya yardımcı olurlar.
Diyelim ki bucket_name değerini bir context değişkeni olarak geçirmek istiyoruz; ancak şunları doğrulamak istiyoruz:
- Kova adı boş değil
- S3 adlandırma kurallarını karşılıyor (örn. yalnızca küçük harf)
test/test_storage_with_lambda.py adlı bir dosya oluşturun ve aşağıdakileri ekleyin:
import pytest
from aws_cdk import App, Stack
from cdk_datacamp.storage_with_lambda import StorageWithLambda
def test_missing_bucket_name():
app = App()
stack = Stack(app, "TestStack")
with pytest.raises(ValueError, match="bucket_name is required"):
StorageWithLambda(stack, "FailingConstruct", bucket_name=None)
def test_bucket_name_uppercase():
app = App()
stack = Stack(app, "TestStack")
with pytest.raises(ValueError, match="must be lowercase"):
StorageWithLambda(stack, "FailingConstruct", bucket_name="InvalidName")
Doğrulamayı test etmek için aşağıdaki komutu çalıştırın:
test/test_storage_with_lambda.py
AWS CDK yığını için tüm testlerin başarıyla çalıştığını gösteren Pytest çıktısı
Ne zaman test kullanılmalı:
- Yeniden kullanılabilir construct’lar veya desenler oluşturuyorsanız.
- Testlerin uygulanması, ekip üyeleri arasında standart teknik gereksinimleri belirlemeye hizmet ediyorsa.
- CI/CD sırasında gerilemeleri veya istenmeyen değişiklikleri yakalamak istiyorsanız.
CDK bilginizi mülakat ortamında pekiştirmek ister misiniz? Bu en iyi AWS DevOps mülakat soruları hazırlık yapmanıza yardımcı olabilir.
AWS CDK ile Çalışırken En İyi Uygulamalar ve İpuçları
CDK yığını oluşturma ve dağıtma konusunda ustalaştıktan sonra, altyapı kodunuzu temiz, güvenli ve ölçeklenebilir tutmak için en iyi uygulamaları takip etmelisiniz. Bu bölüm, büyük projelerin nasıl yapılandırılacağını, güvenliğin doğru şekilde nasıl ele alınacağını ve CDK’nin CI/CD boru hatlarına nasıl entegre edileceğini tartışır.
Büyük projeleri düzenleme
CDK uygulamanız büyüdükçe, kodu yönetilebilir birimlere ayırmak hayati hale gelir.
Birden çok yığın kullanın
Altyapınızı ilgi alanına göre bölün. Örneğin:
- NetworkingStack: VPC’ler, alt ağlar, güvenlik grupları
- ComputeStack: EC2, Lambda
- StorageStack: S3, DynamoDB
Bu yaklaşım, altyapınızın parçalarını bağımsız olarak dağıtmanızı, test etmenizi veya silmenizi sağlar. app.py içinde şöyle dahil edilebilir:
network_stack = NetworkingStack(app, "NetworkingStack")
compute_stack = ComputeStack(app, "ComputeStack")
Kaynakları yığınlar arasında çıktı veya referanslar kullanarak da aktarabilirsiniz.
Yeniden kullanılabilir iç içe construct’lar oluşturun
StorageWithLambda ile yaptığınız gibi, ilişkili kaynakları (ör. bir Lambda ve izinleri) özel bir construct içine kapsülleyin. Bu, okunabilirliği ve yığınlar ya da uygulamalar arasında yeniden kullanılabilirliği artırır.
Ortam bazlı yapılandırma kullanın
Birden fazla ortamı (dev, staging, prod) şu yollarla destekleyin:
- Context değerleri içeren
cdk.json - CLI geçersiz kılmaları:
cdk deploy -c env=prod - Yığınlarınızdaki koşullu mantık
env = app.node.try_get_context("env")
if env == "prod":
bucket_name = "mycompany-prod-logs"
Güvenlik ve izinler
Her altyapı projesi, AWS CDK ile otomatik dağıtım süreçlerinde güvenliği önceliklendirmelidir. Aşağıdaki bölüm, asgari ayrıcalık ilkeleriyle güvenli IAM kaynak yönetimini gösterir.
Varsayılanlar yerine IAM rolleri tanımlayın
Lambda veya ECS görevleri gibi CDK construct’ları otomatik olarak IAM rolleri oluşturur. Rahat olsa da, izinler ve adlandırma üzerinde kontrolünüzü sınırlayabilir.
Bunun yerine rolleri açıkça tanımlayın:
from aws_cdk import aws_iam as iam
execution_role = iam.Role(
self,
"LambdaExecutionRole",
assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
description="Custom role for Lambda with least privilege",
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole")
]
)
Bu rol, varsayılan olarak yalnızca günlüklemeye izin verir ve başka hiçbir şeye izin vermez.
En az ayrıcalık ilkesini uygulayın
actions veya resources içinde mutlak gerekmedikçe "*" kullanmaktan kaçının.
Örnek:
lambda_fn.add_to_role_policy(
iam.PolicyStatement(
actions=["*"],
resources=["*"]
)
)
Ayrıca mevcut olduğunda kaynağa özgü yetkilendirmeleri kullanabilirsiniz:
bucket.grant_read(lambda_fn)
Bu, S3 kovasına kapsamlı erişimle gerekli politikayı otomatik olarak oluşturur.
Mümkün olduğunda yönetilen ilkeleri kullanın
AWS yönetilen ilkeleri bakımı basitleştirir ve hata olasılığını azaltır.
iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSQSReadOnlyAccess")
Bunları ECS, Batch veya Step Functions gibi servisler için özel rollere ekleyebilirsiniz.
CI/CD entegrasyonu
AWS CDK, çağdaş CI/CD boru hatlarıyla entegre olabilme yeteneğiyle büyük güç sunar. CDK; GitHub, GitLab ve CodePipeline gibi AWS-yerel hizmetler dahil sürüm kontrollü kod dağıtımıyla otomatik altyapı teslimini destekler. Sistem, insan hatalarını azaltırken geri bildirim döngülerini kısaltır ve birden çok ortama dağıtımı mümkün kılar.
GitHub Actions: CDK dağıtımlarını otomatikleştirme
GitHub Actions’ı her push veya pull request’te CDK yığınlarını sentezlemek, farkını almak, test etmek ve dağıtmak için kullanabilirsiniz.
Şu .github/workflows/deploy.yml dosyasına göz atın:
name: Deploy CDK App
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install dependencies
run: |
pip install -r requirements.txt
npm install -g aws-cdk
- name: Run unit tests
run: pytest
- name: CDK Synth
run: cdk synth -c environment=prod
- name: Deploy to AWS
run: cdk deploy --require-approval never
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
Birleştirmeden önce altyapı değişikliklerini önizlemek için PR’larda cdk diff kullanın.
CDK pipelines: CodePipeline ile yerel CDK CI/CD
AWS içinde tam yönetilen dağıtımlar için CDK, tıpkı altyapı gibi tüm CI/CD boru hattınızı kod olarak tanımlamanıza olanak tanıyan aws_cdk.pipelines adlı bir modül sağlar.
İşte basitleştirilmiş bir örnek:
from aws_cdk import pipelines, SecretValue, Stack
from constructs import Construct
from my_app_stage import MyAppStage # replace with your actual stage import
class PipelineStack(Stack):
def __init__(
self,
scope: Construct,
construct_id: str,
**kwargs
) -> None:
super().__init__(scope, construct_id, **kwargs)
# Define the source of the pipeline from a GitHub repository
source = pipelines.CodePipelineSource.git_hub(
repo_string="your-org/your-repo", # GitHub org/repo
branch="main",
authentication=SecretValue.secrets_manager("GITHUB_TOKEN")
)
# Define the CodePipeline and its synthesis step
pipeline = pipelines.CodePipeline(
self,
"MyAppPipeline",
synth=pipelines.ShellStep(
"Synth",
input=source,
commands=[
"pip install -r requirements.txt",
"npm install -g aws-cdk",
"cdk synth"
]
)
)
# Add an application stage (e.g., production deployment)
pipeline.add_stage(
MyAppStage(self, "ProdStage")
)
Yukarıdaki kodda:
SecretValue.secrets_manager("GITHUB_TOKEN"), GitHub token’ınızı Secrets Manager’dan güvenle çeker.MyAppStage,Stagesınıfını genişleten ve gerçek CDK yığınlarınızı saran bir sınıf olmalıdır.
Makine öğrenimi sistemleri dağıtıyorsanız, CDK’nin sürekli dağıtım uygulamalarıyla entegrasyonu Makine Öğrenimi için CI/CD kursumuzda ele alınmaktadır.
Sonuç
Bu eğitim, AWS Cloud Development Kit (CDK) işlemleri aracılığıyla Python’da bulut altyapısını nasıl kurup dağıtacağınızı gösterdi. Şunları öğrendiniz:
- İlk CDK yığınızı oluşturmak.
- Kaynak olarak S3 kovaları ve Lambda fonksiyonlarını tanımlamak ve doğrulamak.
- Özel construct’lar ve çoklu yığın desenleriyle bir projeyi düzenlemek.
- En az ayrıcalık ilkesiyle güvenlik en iyi uygulamalarını uygulamak.
- GitHub Actions ile CDK Pipelines’ı birleştirerek dağıtımları otomatikleştirmek.
- Altyapı mantığınızı doğrulamak için testler yazmak.
İlk CDK uygulamanızı dağıttığınıza göre, seviyenizi yükseltmenin birkaç yolu:
- Geliştirme/ön üretim/üretim için parametreli ortamlar kullanın
- CloudWatch alarmları, API Gateway veya Step Functions ekleyin
aws_s3_deployment,aws_ecs_patternsvecdk.pipelinesgibi CDK construct’larını keşfedin- Construct’larınızı yeniden kullanılabilirlik için dahili bir Python kütüphanesine dönüştürün
Öğrenmeye ve inşa etmeye devam etmek için, Python ile AWS Boto’ya Giriş kursuna göz atın!
FAQs
AWS CDK nedir ve CloudFormation veya Terraform’dan nasıl farklıdır?
AWS CDK, Python gibi programlama dilleri kullanarak bulut altyapısını tanımlamanıza olanak tanır; CloudFormation ve Terraform ise JSON/YAML veya HCL’e dayanır. CDK, construct’lar aracılığıyla daha yüksek soyutlama ve yeniden kullanılabilirlik sunar.
AWS CDK’yi kullanmak için CloudFormation bilmem gerekir mi?
Hayır, CDK CloudFormation’ın çoğu karmaşıklığını soyutlar. Ancak, alt düzey construct’ları kullanırken veya dağıtımları sorun giderirken CloudFormation’ı anlamak yardımcı olur.
AWS CDK ile birden fazla ortamı (ör. dev, prod) dağıtabilir miyim?
Evet! CDK, context değerleri ve cdk deploy -c env=prod gibi CLI bayrakları kullanarak ortama özgü yapılandırmayı destekler.
CDK altyapı kodumu nasıl test ederim?
Dağıtımdan önce yığınınızdaki kaynakları ve yapılandırmaları doğrulayan birim testleri yazmak için pytest’i CDK’nin assertions ve template modülüyle birlikte kullanabilirsiniz.
cdk deploy komutunu çalıştırdığımda arka planda neler olur?
cdk deploy, Python kodunuzu bir CloudFormation şablonuna sentezler, AWS’ye yükler ve hesabınızda tanımlanan kaynakları sağlar.
Rahul Sharma, bulut bilişim, DevOps uygulamaları ve açık kaynak teknolojiler konusunda uzmanlaşan bir AWS Elçisi, DevOps Mimarlı ve teknik blog yazarlıdır. AWS, Kubernetes ve Terraform konularındaki uzmanlığıyla, etkileyici makaleler ve eğiticiler aracılığıyla karmaşık kavramları öğrenenler ve profesyoneller için sadeleştirir. Rahul, DevOps zorluklarını çözmeye ve teknoloji topluluğuna güç katacak içgörüler paylaşmaya tutkuyla bağlıdır.


Ham JSON veya YAML şablonlarıyla bulut altyapısını yönetmek zahmetli ve hataya açık olabilir. AWS Cloud Development Kit (CDK), Python, TypeScript, Java ve C# gibi modern programlama dilleriyle bulut kaynaklarını tanımlamanıza olanak tanıyarak bunu değiştirir.
CDK ile altyapı; tekrar kullanılabilir, test edilebilir ve sürüm kontrollü koda dönüşür. Bu sayede karmaşık bulut sistemlerini hazırlarken bile bir geliştirici gibi düşünebilirsiniz.
Bu eğitimde, Python kullanarak bir AWS CDK projesini nasıl kuracağınızı öğreneceksiniz. İlk yığını yazma, temel bir AWS kaynağı ekleme ve bunu AWS hesabınıza dağıtma sürecini adım adım işleyeceğiz. Sonunda, CDK’nın nasıl çalıştığını ve geliştirici dostu bir şekilde, kodla altyapıyı yönetmek için nasıl kullanılacağını açıkça anlayacaksınız.
AWS CDK gibi araçların ardındaki uygulamaları daha iyi anlamak için, DevOps Kavramları kursumuzu inceleyin.
Önkoşullar
AWS CDK ile kod yazmaya başlamadan önce, ortamınızın doğru şekilde kurulduğundan emin olun. İhtiyacınız olanlar:
Deney için AWS hesabı
Oluşturacağımız uygulamayı dağıtmak için bir AWS hesabına erişmeniz gerekir. Sisteminize halihazırda yönetici düzeyinde bir kullanıcı kimlik bilgileri tanımlıysa, bu adımı atlayabilirsiniz.
Henüz bir AWS hesabınız yoksa, buradan oluşturun.
AWS temellerini kapsayan yapılandırılmış bir öğrenme yolu için, AWS Cloud Practitioner yolu harika bir başlangıçtır.
Yönetici kullanıcısı
Takip edebilmek için programatik erişimi ve tam yetkileri olan bir kullanıcıya ihtiyacınız olacak.
Son ekranda Access key ID ve Secret access key bilgilerinizi not edin. Bir sonraki adımda bunlara ihtiyacınız olacak.
AWS kimlik bilgilerinizi yapılandırın
Bir terminal açın ve şunu çalıştırın:
IAM konsolundaki kimlik bilgilerini girmeniz istenecektir:
Geliştirme için bir IDE seçin
AWS CDK, geliştiricilerin YAML veya JSON şablonları yerine eksiksiz bir programlama ortamında çalışmasına olanak tanır. Bu tam özellikli ortam, tercih ettiğiniz IDE’yi kullanırken kod tamamlama, gerçek zamanlı linting ve yeniden düzenleme araçlarından yararlanarak altyapı kodunu verimli biçimde yönetmenizi sağlar.
Python CDK ile en iyi geliştirme deneyimi için aşağıdakileri destekleyen bir IDE kullanmanızı öneririm:
Python ve pip’i yükleyin
AWS CDK’yi Python ile kullanmak için sisteminizde 3.8 veya üzeri Python sürümü yüklü olmalıdır. Henüz yoksa, en son sürümü resmi Python sitesinden indirebilirsiniz.
Windows kullanıyorsanız, Python’un sisteminizin
PATHortam değişkenine eklendiğinden emin olun. Kontrol etmek için bir terminal veya komut istemi açıp şunu çalıştırın:“komut bulunamadı” veya benzeri bir hata görürseniz, Python muhtemelen
PATH’te değildir. En kolay çözüm, kurulum sırasında “Add Python 3.x to PATH” kutusunu işaretlemektir.Daha sonra AWS CDK bağımlılıklarını kurmak için Python paket yükleyicisi pip’e de ihtiyacınız olacak. Çoğu modern Python dağıtımı pip ile birlikte gelir.
Yüklü değilse, resmi pip kurulum rehberini izleyin.
AWS CDK ile Başlarken
Herhangi bir kod yazmadan önce, AWS CDK’nin ne olduğunu, neden var olduğunu ve altyapı olarak kod (IaC) dünyasına nasıl oturduğunu anlamak önemlidir. Bu bölüm CDK’nin temel kavramlarını tanıtacak ve diğer popüler IaC araçlarıyla karşılaştırmasını gösterecek.
AWS CDK nedir ve neden kullanılır?
AWS Cloud Development Kit (CDK), Python, TypeScript, Java ve C# dahil aşina olduğunuz programlama dilleriyle bulut altyapısı oluşturmanıza olanak tanıyan açık kaynaklı bir çerçevedir.
CDK, manuel JSON veya YAML şablonu yazmak yerine gerçek kodla programatik olarak CloudFormation şablonları üretmenizi sağlar.
Bu şu anlama gelir:
CDK’nin merkezinde üç ana kavram bulunur:
Bir AWS CDK uygulamasının görsel hiyerarşisi
CDK vs Terraform vs CloudFormation
Aşağıdaki tablo, AWS’de altyapıyı yönetmek için mevcut araçlar arasındaki farkları açıklar.
Özellik
AWS CDK
Terraform
AWS CloudFormation
Dil Desteği
Python, TypeScript, Java, C#
HCL (bildirimsel)
YAML / JSON
Soyutlama Düzeyi
Yüksek (OOP + kütüphaneler)
Orta
Düşük
Modülerlik
Güçlü (construct’lar, sınıflar)
Güçlü (modüller)
Zayıf (iç içe yığınlar)
Durum Yönetimi
CloudFormation tarafından yönetilir
Terraform tarafından yönetilir (tfstate)
CloudFormation tarafından yönetilir
Çoklu bulut
Yalnızca AWS
Evet
Yalnızca AWS
Desteklenen diller ve önkoşullar
AWS CDK, geliştiricilerin en rahat oldukları dili seçmelerine olanak tanıyan birden fazla programlama dilini destekler:
Bu eğitimde odak Python olacak, ancak temel kavramlar tüm desteklenen dillere uygulanır.
Kurulum ve yapılandırma
Artık ortamınız hazır olduğuna göre, Python kullanarak ilk AWS CDK uygulamanızın iskeletini oluşturma zamanı. CDK
initkomutu, hızlıca başlamanıza yardımcı olmak için dosyalar, dizinler ve bir sanal ortam dahil olmak üzere tüm proje yapısını hazırlar.Bir proje dizini oluşturun
Yeni bir dizin oluşturmak ve içine geçmek için terminalinizi açıp şu komutu çalıştırın:
CDK uygulamasını başlatın
Bu, aşağıdakileri içeren temel bir örnekle önceden yapılandırılmış bir başlangıç projesi oluşturur:
cdk_datacamp_stack)cdk.jsondosyası.venviçinde)Komut tamamlandığında buna benzer bir çıktı göreceksiniz:
CDK Python proje iskeleti
Sanal Ortam Kurulumu
cdk initişlemi otomatik olarak bir sanal ortam oluşturmazsa, bunu elle yapabilirsiniz:Etkinleştirildikten sonra gerekli bağımlılıkları yükleyin:
CDK Kavramlarını Anlamak
Koda daha derin dalmadan önce, AWS CDK’nin çekirdek bileşenleri—uygulamalar, yığınlar ve construct’lar—pratikte nasıl birlikte çalışır inceleyelim. Artık her birinin neyi temsil ettiğine aşina olduğunuza göre, ölçeklenebilir ve modüler bir altyapı oluşturmak için nasıl etkileştiklerini görmek önemlidir.
Ayrıca construct seviyelerini (L1, L2, L3) ayrıntılandıracak ve bunu mümkün kılan CDK kütüphanelerini inceleyeceğiz.
Uygulamalar, yığınlar ve construct’lar
Önceki bölümlerde App, Stack ve Construct’un ne olduğunu öğrendiğinize göre, bir CDK uygulamasında nasıl birlikte çalıştıklarını anlayalım.
Bunu bir ev inşa etmek gibi düşünün:
Kodda ilişki şöyle görünür:
Burada App, bir S3 kovası gibi Construct’ları içeren bir Stack örnekler.
Construct seviyelerini anlamak: L1, L2 ve L3
AWS CDK’de construct’lar, ihtiyaç duyduğunuz kontrol veya sadelik düzeyine göre esneklik sağlayan üç soyutlama seviyesinde gelir.
Seviye 1 (L1) – CloudFormation Construct’ları
Bunlar, doğrudan AWS CloudFormation spesifikasyonundan üretilen ham yapı taşlarıdır. CloudFormation’daki her AWS kaynağının CDK’de eşdeğer bir L1 construct’ı vardır; adları her zaman “Cfn” ile başlar.
L1 construct’lar olası tüm yapılandırma seçeneklerini sunar ancak hiçbir soyutlama veya varsayılan sağlamaz. Tam kontrol gerektiğinde veya henüz üst düzey construct’lar tarafından sarılmamış yeni AWS özelliklerini kullandığınızda idealdirler.
s3.CfnBucketSeviye 2 (L2) – AWS CDK-yerel Construct’lar
L2 construct’lar, L1’in üzerinde daha üst düzey, geliştirici dostu bir soyutlama sağlar. Günlük işleri kolaylaştıran makul varsayılanlara ve yerleşik yöntemlere sahip, görüş bildirici bileşenlerdir. Günlük kullanım için tasarlanmışlardır; yinelemeli kodu azaltırken iyi bir özelleştirme düzeyi sunarlar.
s3.Bucket– Sadece bir satır kodla sürümlü bir kova oluşturabilirsiniz.Seviye 3 (L3) – Desen Construct’ları
L3 construct’lar, birden fazla AWS kaynağını yaygın mimari desenlere paketleyen soyutlamalardır. AWS tarafından sağlanabilir veya topluluk ya da siz tarafından yeniden kullanılabilir bileşenler olarak oluşturulabilirler. L3 construct’ları, karmaşıklığı kapsüllemek ve projeler ya da ekipler arasında altyapı desenlerini tekrar kullanmak için tercih edin.
aws_s3_deployment.BucketDeployment– Varlık yüklemelerini otomatikleştirmek için bir S3 kovasını ve dağıtım stratejisini birleştirir.Geliştiricilerin çoğu L2 construct’larla başlar ve gerektiğinde L1 ekler. Projeniz büyüdükçe ve tekrar eden desenleri yeniden kullanılabilir bileşenlere soyutlamak istediğinizde L3 kullanışlı hale gelir.
CDK kütüphaneleri ve modülleri
AWS CDK ile oluştururken doğrudan ham CloudFormation ile etkileşime girmezsiniz. Bunun yerine; S3, Lambda, IAM ve daha fazlası gibi AWS servisleri için construct’lar sağlayan CDK’nin modüler kütüphanelerini kullanırsınız. Tüm AWS servis modülleri,
aws-cdk-libadlı çekirdek paket altında toplanmıştır ve servislere göre alt başlıklara ayrılmıştır.Python’da yaygın kullanılan kütüphaneler
Aşağıda Python projelerinde
aws-cdk-libiçinden en sık kullanılan kütüphane (veya modül) örnekleri yer alıyor:aws_cdk.aws_s3– S3 kovaları oluşturmak içinaws_cdk.aws_lambda– Lambda fonksiyonlarını tanımlamak içinaws_cdk.aws_iam– Roller ve izinleri yönetmek içinaws_cdk.aws_dynamodb– DynamoDB tablolarıyla çalışmak içinaws_cdk.aws_ec2– VPC’ler ve güvenlik grupları gibi ağ bileşenleri içinaws_cdk.aws_sns/aws_cdk.aws_sns_subscriptions– SNS konuları ve aboneleri içinBu modüller yalnızca ihtiyaç duyulduğunda içe aktarılır; projenizi hafif ve modüler tutar.
Bir CDK modülü nasıl içe aktarılır ve kullanılır
Belirli bir AWS servisini kullanmak için modülünü içe aktarır ve construct sınıflarını çağırırsınız. Örneğin, bir S3 kovası oluşturmak için:
Bu örnek, şifreleme ve sürümleme seçenekleri gibi yerleşik varsayılanlar içeren L2 construct’ı
s3.Bucket’ı kullanır.Başka bir servisi kullanmanız gerekirse, modülünü aynı şekilde içe aktarın:
Not:
requirements.txtdosyanızda genellikle yalnızca şunlara ihtiyaç duyarsınız:Bu iki paket, tüm AWS CDK construct’larına ve çekirdek çerçeve işlevselliğine erişim sağlar.
İlk CDK Yığınınızı Oluşturma
AWS CDK’nin iç işleyişini öğrendikten sonra bu bilgiyi uygulayabilirsiniz. Aşağıdaki bölüm, Python kullanarak çalışan bir CDK yığını oluşturma konusunda size rehberlik eder. AWS hesabınıza dağıtmadan önce, kod aracılığıyla bir proje yapısı oluşturacak ve S3 kovaları ile Lambda fonksiyonları gibi gerçek AWS kaynaklarını uygulayacaksınız.
Yeni bir projenin iskeletini oluşturma
Komut satırında
--language pythonbayrağıylacdk initçalıştırdığınızda, şu yapıya benzeyen tam bir proje oluşturur:Bir AWS CDK Python projesinin klasör yapısı
App’in tanımlandığı yer
app.pydosyasıdır ve Stack ile Construct’lar için kodu yazdığınız yercdk_datacamp_stack.pydosyasıdır.İpucu: Yığın dosyasını veya sınıfını, uygulamanızın amacına uygun olacak şekilde
storage_stack.pyya damonitoring_stack.pygibi yeniden adlandırabilirsiniz.AWS kaynakları ekleme
Şimdi CDK yığınıza bazı AWS kaynakları ekleyelim. Bunları,
cdk_datacamp_stack.py dosyanızdakiStacksınıfınızın__init__()yöntemi içinde yazacaksınız.S3 kovası
Lambda fonksiyonu
Yığını dağıtma
Kaynaklarınızı ekledikten sonra, bunları AWS’ye dağıtma zamanı.
Terminalinizde sanal ortamınızı etkinleştirin ve şunu çalıştırın:
Bu, şunları yapacaktır:
Yığını ilk kez dağıtıyorsanız, değişiklikleri onaylamanız istenecektir.
Dağıtımdan sonra şunları yapabilirsiniz: