Lambda'yı AWS hizmetleriyle entegre etme

AWS Lambda ile Sunucusuz Uygulamalar

Claudio Canales

Senior DevOps Engineer

Entegrasyon döngüsü

  • Olay gelir.
  • Handler mantığı.
  • SDK çağrısı.

Olay -> handler -> SDK döngüsü

AWS Lambda ile Sunucusuz Uygulamalar

Tetikleyiciler ve SDK çağrıları

Tetikleyici

  • Lambda'nın ne zaman çalışacağını belirler.

SDK çağrısı (handler içinde)

  • DynamoDB ve S3 gibi hizmetleri okur ve yazar.

Tetikleyici vs SDK çağrısı

AWS Lambda ile Sunucusuz Uygulamalar

Somut bir örnek

  • Bir dosya S3'e iner.
  • Lambda çalışır.
  • DynamoDB'ye küçük bir kayıt saklayın.

S3 yükleme -> Lambda -> DynamoDB

AWS Lambda ile Sunucusuz Uygulamalar

Olay yükü: ihtiyacınızı bulun

{
  "Records": [{
    "s3": {
      "bucket": {"name": "…"},
      "object": {"key": "…"}
    }
  }]
}

S3 olay yükü vurguları

AWS Lambda ile Sunucusuz Uygulamalar

AWS SDK nereye oturur?

  • Kodunuz SDK'yı (boto3) çağırır.
  • SDK, AWS API'lerini çağırır.
  • IAM kapı bekçisidir.

Handler -> SDK -> AWS API

AWS Lambda ile Sunucusuz Uygulamalar

Yürütme rolü = kimlik bilgileri

  • Yürütme rolünden geçici kimlik bilgileri.
  • Koda erişim anahtarı koymayın.
  • Rol bir API'yi çağıramazsa, SDK çağrısı başarısız olur.

Yürütme rolü kimlik bilgileri sağlar

AWS Lambda ile Sunucusuz Uygulamalar

En az ayrıcalık: işlemler + kaynakları sınırla

  • Etki alanını küçültür.
  • Yalnızca gerekli işlem ve kaynakları verin.
  • Zorunlu olmadıkça joker karakterlerden kaçının.

En az ayrıcalık: işlemler ve kaynaklar

AWS Lambda ile Sunucusuz Uygulamalar

DynamoDB: doğru işlemi seçin

  • PutItem yazar.
  • GetItem anahtarla okur.
  • Query ilişkili öğeleri bulur.
  • Geniş taramalar yerine hedefli işlemleri seçin.

DynamoDB işlemleri

AWS Lambda ile Sunucusuz Uygulamalar

S3: kova + anahtarla çalışın

  • Nesneler kova + anahtarda bulunur.
  • GetObject içeriği alır.
  • PutObject türetilmiş yeni bir dosya yazar.

S3 kova ve anahtar

AWS Lambda ile Sunucusuz Uygulamalar

Yapılandırmayı ortam değişkenlerinde tutun

  • Kaynak adlarını sabitlemek kırılgandır.
  • Ortam değişkenlerini kullanın.
  • Aynı kodu dev ve prod'a dağıtın.

Ortam değişkeni yapılandırması

AWS Lambda ile Sunucusuz Uygulamalar

SDK kodu: küçük ve test edilebilir tutun

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • Girdileri doğrulayın, SDK'yı çağırın, döndürün.
  • Saf mantığı birim testine tabi tutun.

SDK çağrılı küçük handler

AWS Lambda ile Sunucusuz Uygulamalar

SDK hatalarını bilinçli yönetin

  • Başta izin hataları yaygındır.
  • Bir çağrı başarısızsa nedeni açık olsun.
  • İyi loglar hata ayıklamayı güvenli kılar.

Başarı ve hata yolları

AWS Lambda ile Sunucusuz Uygulamalar

IAM hatalıysa, kod düzgün görünür

AccessDeniedException
required action denied
  • Önce IAM'i düzeltin, sonra handler mantığını.

Erişim reddedildi

AWS Lambda ile Sunucusuz Uygulamalar

İdempotensi: güvenli tekrarlar ve kopyalar

  • Aynı olayı iki kez görebilirsiniz.
  • İdempotensi anahtarları çift işlemi önler.
  • Koşullu yazmalar tekrarları güvenli kılar.

İdempotensi anahtarı deseni

AWS Lambda ile Sunucusuz Uygulamalar

Birleştirme (uçtan uca)

  • S3 olayı kova ve anahtarı getirir.
  • Handler bunları ayrıştırır.
  • PutItem meta veriyi DynamoDB'ye yazar.
  • CloudWatch Logs ne olduğunu gösterir.

Uçtan uca entegrasyon özeti

AWS Lambda ile Sunucusuz Uygulamalar

Önemli çıkarımlar

  • Tetikleyicileri SDK çağrılarından ayırın.
  • İzinleri yürütme rolüyle sıkı tutun.
  • Yapılandırmayı ortam değişkenleriyle taşınabilir yapın.

Entegrasyon çıkarımları

AWS Lambda ile Sunucusuz Uygulamalar

Hadi pratik yapalım!

AWS Lambda ile Sunucusuz Uygulamalar

Preparing Video For Download...