AWS CDK Giriş

·

4 min read

AWS CDK (Cloud Development Kit), Amazon Web Services (AWS) ile uygulama ve altyapı kaynaklarını oluşturmak, dağıtmak ve yönetmek için kullanılan bir açık kaynaklı framework'tür. CDK, AWS hizmetlerinin yapılandırılmasını ve AWS kaynaklarının altyapısını kodla yapmanıza olanak sağlar.

AWS CDK, geleneksel metin tabanlı şablonlar olan AWS CloudFormation ile karşılaştırıldığında, programlama dilini kullanarak bir yüksek seviye dil sunar. Bu sayede altyapı ve hizmet kaynaklarının yönetimini daha kolay hale getirir. CDK, Python, TypeScript, Java, C# gibi popüler diller için destek sunar.

CDK, AWS kaynaklarını tanımlayan bir "uygulama" modeli kullanır. Bu model, kaynakları birbirine bağlayan ilişkileri belirtmenizi sağlar. Böylece, kaynakların nasıl oluşturulacağını ve yapılandırılacağını belirlemek için yazılım mühendisleri tarafından kullanılan tanıdık bir geliştirme sürecine benzer bir süreçle altyapı oluşturabilirsiniz.

Örneğin, TypeScript kullanarak basit bir AWS Lambda fonksiyonunu CDK ile nasıl oluşturacağımıza bakalım:

import { App, Stack, Function, Runtime, Code } from 'aws-cdk-lib';

const app = new App();
const stack = new Stack(app, 'MyStack');

new Function(stack, 'MyFunction', {
  runtime: Runtime.NODEJS_12_X,
  code: Code.fromAsset('lambda'),
  handler: 'index.handler',
});

app.synth();

Yukarıdaki kod, AWS CDK'yi kullanarak basit bir Lambda fonksiyonunu oluşturur. Stack sınıfı, kaynakları gruplamak için kullanılır. Function sınıfı, bir Lambda fonksiyonu oluşturmak için kullanılır. Ardından, synth metodu ile uygulamanın sentezlenmesi ve CloudFormation şablonunun üretilmesi sağlanır.

CDK, aynı zamanda kaynakları güncellemek, yeniden dağıtmak ve AWS kaynaklarını başka bir AWS hesabına taşımak gibi işlemleri de kolaylaştırır. Ayrıca, farklı AWS hizmetlerinin birleşik kullanımını destekleyerek, örneğin, Lambda fonksiyonlarına API Gateway eklemek veya RDS veritabanına bağlanmak gibi entegrasyonları kolaylaştırır.

AWS CDK, yazılım mühendisleri için altyapıyı programlama dili ile yönetme sürecini basitleştirmektedir. Bu sayede, altyapıyı kodlama standartlarına uygun olarak geliştirebilir, hataların erken tespiti yapılabilir ve tekrar kullanılabilir bir kod tabanı oluşturulabilir.

AWS CDK, altyapı kaynaklarını kodla oluşturmanın ve yönetmenin yanı sıra, aynı zamanda bütünleşik geliştirme ortamları (IDE) ve derleme süreçleri gibi geliştirici araçlarıyla birlikte kullanılabilecek şekilde tasarlanmıştır. Böylece, geliştiricilerin kodlarını test etmeleri ve hızlı bir şekilde dağıtmaları kolaylaşır.

Bir başka avantajı ise AWS hizmetlerinin güncellenmesiyle ilgilidir. AWS CDK, hizmetlerdeki değişikliklerin takip edilmesini otomatikleştirir ve güncelleme ihtiyaçlarını bildirir. Bu sayede, altyapıda oluşabilecek hataların önüne geçilir ve güncellemelerin sorunsuz bir şekilde yapılması sağlanır.

AWS CDK, aynı zamanda altyapı kaynaklarının kod tabanında tutulmasını sağlar. Yani, kaynakların ve yapılandırmaların versiyon kontrol sistemi (VCS) ile izlenmesi mümkündür. Bu, ekip çalışması için oldukça önemli bir özelliktir çünkü birden fazla kullanıcının aynı altyapı üzerinde çalışmasını ve değişiklikleri izlemesini kolaylaştırır.

CDK aynı zamanda altyapı ve hizmetleri paylaşmanın da bir yolunu sunar. CDK projeleri, modüller şeklinde paketlenebilir ve tekrar kullanılabilir şekilde dağıtılabilir. Böylece, farklı projeler arasında altyapı bileşenlerinin paylaşılması ve yeniden kullanılması kolaylaşır. Aynı zamanda, topluluk tarafından paylaşılan CDK modüllerini de kullanabilir ve hızlı bir şekilde önceden oluşturulmuş altyapı bileşenlerini projelerinize entegre edebilirsiniz.

Sonuç olarak, AWS CDK, yazılım mühendislerine altyapıyı kodlama standartlarına uygun olarak geliştirme ve yönetme imkanı sunan güçlü bir araçtır. Kod tabanlı altyapı yönetimi ile hızlı, güvenilir ve ölçeklenebilir uygulamalar geliştirme sürecini kolaylaştırır. Ayrıca, programlama dili ve geliştirici araçları ile entegrasyonu sayesinde geliştiricilerin daha verimli bir şekilde çalışmasını sağlar. AWS CDK, bulut tabanlı projelerinizde altyapı yönetimi konusunda size büyük faydalar sağlayabilir.

Son olarak Java ve Go dilleriyle AWS CDK kullanarak basit bir altyapı oluşturma örneği verelim:

Java için AWS CDK örneği:

import software.amazon.awscdk.core.App;
import software.amazon.awscdk.core.Stack;
import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.services.s3.Bucket;
import software.amazon.awscdk.services.s3.BucketProps;
import software.amazon.awscdk.core.CfnOutput;

public class MyStack extends Stack {
  public MyStack(final Construct scope, final String id) {
    super(scope, id);

    BucketProps bucketProps = BucketProps.builder()
      .versioned(true)
      .build();

    Bucket myBucket = new Bucket(this, "MyBucket", bucketProps);

    new CfnOutput(this, "BucketName", CfnOutputProps.builder()
        .value(myBucket.getBucketName())
        .build());
  }

  public static void main(final String[] args) {
    App app = new App();

    new MyStack(app, "MyStack");

    app.synth();
  }
}

Bu örnek, MyStack sınıfıyla Construct sınıfını genişletiyor. BucketProps sınıfıyla bir S3 bucket oluşturuluyor ve sonra bu kova MyBucket adıyla Bucket sınıfına atanıyor. Son olarak, CfnOutput sınıfıyla oluşturulan bucket adı çıktısı olarak gösteriliyor.

Go için AWS CDK örneği:

package main

import (
    "github.com/aws/aws-cdk-go/awscdk"
    "github.com/aws/aws-cdk-go/awscdk/awscloudformation"
    "github.com/aws/aws-cdk-go/awscdk/awsiam"
    "github.com/aws/aws-cdk-go/awscdk/awslambda"
    "github.com/aws/aws-cdk-go/awscdk/awss3"
    "github.com/aws/aws-cdk-go/awscdk/awss3notifications"
    "github.com/aws/aws-cdk-go/awscdk/awsevents"
    "github.com/aws/aws-cdk-go/awscdk/awseventtargets"
    "github.com/aws/aws-cdk-go/awscdk/awsiam"
    "github.com/aws/constructs-go/constructs/v3"
    "github.com/aws/jsii-runtime-go"
)

func main() {
    app := awscdk.NewApp(nil)

    stack := awscdk.NewStack(app, jsii.String("MyStack"), &awscdk.StackProps{})

    // S3 Bucket
    bucket := awss3.NewBucket(stack, jsii.String("MyBucket"), &awss3.BucketProps{
        Versioned: jsii.Bool(true),
    })

    // Lambda function
    fn := awscloudformation.NewCfnFunction(stack, jsii.String("MyFunction"), &awscloudformation.CfnFunctionProps{
        Code:     awscloudformation.NewCode_FromAsset(jsii.String("lambda")),
        Runtime:  jsii.String("nodejs12.x"),
        Handler:  jsii.String("index.handler"),
    })

    // Event Rule
    eventRule := awsevents.NewRule(stack, jsii.String("MyRule"), &awsevents.RuleProps{
        EventPattern: awsevents.EventPattern_MatchSource(&map[string]interface{}{
            "source": []string{"aws.s3"},
        }),
    })

    // Add Lambda as target for Event Rule
    eventRule.AddTarget(&awseventtargets.LambdaFunction{
        Function:   fn,
        DeadLetterQueueEnabled: jsii.Bool(true),
    })

    // Grant bucket permissions to Lambda function
    bucket.GrantRead(fn.Role())

    app.Synth(nil)
}

Bu örnekte, main fonksiyonunda awscdk paketi tanımlanır ve ayrıca gerekli olan diğer paketler de dahil edilir. awscdk.NewStack ile bir yığın oluşturulur ve ardından awss3.NewBucket ile S3 bucket oluşturulur. Ayrıca, awscloudformation.NewCfnFunction ile bir AWS Lambda fonksiyonu, awsevents.NewRule ile bir Olay Kuralı ve awseventtargets.LambdaFunction ile Olay Kuralına Lambda hedefi eklenir. Son olarak, bucket.GrantRead ile bucket izinleri Lambda fonksiyonuna verilir.

Bu örnekler, AWS CDK'yı Java ve Go dilleriyle kullanarak altyapı kaynaklarını kodla oluşturmanıza ve yönetmenize yardımcı olacak temel örneklerdir. Yaptığınız altyapı ve kaynak değişikliklerini CDK ile takip edebilir, sürdürülebilir ve yeniden kullanılabilir bir kod tabanı inşa edebilirsiniz.