Lambda ile DynamoDB Akışları

Lambda Ile Dynamodb Akislari



DynamoDB Akışları, Amazon DynamoDB'de yer alan ve DynamoDB tablolarınızda yapılan gerçek zamanlı değişiklik veya veri değişikliği akışını almanızı sağlayan bir özelliktir. Önbellekleri güncelleme ve bildirim gönderme gibi DynamoDB tablolarındaki veri değişikliklerine tepki veren uygulamaları oluşturmak için bu özelliği kullanabilirsiniz.

Elbette, aşağı akış süreçlerini ve AWS Lambda işlevlerini tetiklemek için DynamoDB Akışlarını da kullanabilirsiniz. Lambda, tanım gereği, olaylara yanıt olarak kodunuzu çalıştıran ve işlem kaynaklarını sizin için otomatik olarak yöneten sunucusuz bir bilgi işlem hizmetidir.

Akış kayıtlarını işlemek ve uygun eylemleri gerçekleştirmek için Node.js, Python, Java veya C#'ta kod yazmak için Lambda'yı kullanabilirsiniz. DynamoDB Akışlarını Lambda ile entegre etmenin ana yararı, Lambda'nın, yönetime ihtiyaç duymadan desteklenen hizmetleri veya uygulama kodlarını çalıştırmanıza izin vermesidir.







AWS DynamoDB Akışlarını Lambda ile Kullanma

Bir DynamoDB Akışındaki olayları ve oluşumları tüketen bir Lambda işlevi oluşturmak mümkün olsa da, süreç, özellikle ilk denemenizde oldukça zahmetli olabilir. Aşağıdaki adımlar yardımcı olacaktır:



1. Adım: Sisteminizin Ön Koşulları Karşıladığından Emin Olun

Bu prosedür, yalnızca temel Lambda işlemlerini ve süreçlerini biliyorsanız başarılı olacaktır. Bu nedenle, Lambda anlayışınızın ortalamanın üzerinde olmasını sağlamak için bu sizin ilkiniz olmalıdır.



Göz önünde bulundurmaya değer ikinci ön koşul, sisteminizin AWS sürümünü doğrulamaktır. Aşağıdaki komutu kullanabilirsiniz:





aws –versiyon

Sağlanan komutun sonucu şöyle görünmelidir:

aws-cli/ 2 .x.x Python/ 3 .x.x Linux/ 4 .x.x-xxx-std botocore/ 2 .x.x

Verilen örnek yanıt, AWS CLI'nin yüklü sürümünü içerir ( aws-cli/2.x.x ), Python sürümü ( Python/3.x.x ) ve işletim sistemi ( Linux/4.x.x-xxx-std ). Yanıtın son kısmı, AWS CLI'nizin üzerinde çalıştığı Botocore kitaplığı sürümünü tanımlar ( botocore/2.x.x ).



Bu nedenle, böyle bir şeyle sonuçlanacaksınız:

2. Adım: Bir Yürütme Rolü Oluşturun

Sonraki adım, AWS CLI'de bir yürütme rolü oluşturmaktır. Yürütme rolü, sizin adınıza görevleri gerçekleştirmek için bir AWS hizmeti tarafından üstlenilen bir AWS Kimlik ve Erişim Yönetimi (IAM) rolüdür. Yol boyunca ihtiyaç duyacağınız AWS kaynaklarına erişmenizi sağlar.

Aşağıdaki komutu kullanarak bir rol oluşturabilirsiniz:

aws iam oluşturma rolü \

--role-name LambdaDynamoDBExecutionRole \

--assume-role-policy-document dosyası://assume-role-policy.json \

--tanım ' AWSLambdaDynamoDBExecutionRolü' \

--hizmet adı lambda.amazonaws.com

Önceki komut, rol oluşturmak için bir AWS CLI komutudur. Rol oluşturmak için Amazon Management Console'u da kullanabilirsiniz. IAM konsoluna geldiğinizde, Roller sayfasını tıklayın ve Rol oluştur buton.

Aşağıdakileri girmek için ilerleyin:

  • Güvenilir Varlık: Lambda
  • Rol Adı: lambda-dynamodb-rol
  • İzinler: AWSLambdaDynamoDBExecutionRole

Python'u önce AWS SDK for Python'u yükleyerek de kullanabilirsiniz:

pip yükleme boto3

3. Adım: Masanızda DynamoDB Akışlarını Etkinleştirin

Tablonuzda DynamoDB Akışlarını etkinleştirmeniz gerekir. Bu çizim için Boto3, Python için AWS SDK'yı kullanıyoruz. Aşağıdaki komut yardımcı olacaktır:

boto3'ü içe aktar

# DynamoDB hizmetine bağlanın
dinamodb = boto3.client( 'dinamomod' )

# 'my-table' tablosunda DynamoDB akışlarını etkinleştirin
yanıt = dynamodb.update_table(
TabloAdı= 'benim masam' ,
Akış Belirtimi={
'Akış Etkinleştirildi' : Doğru,
'StreamViewType' : 'YENİ_AND_OLD_RESİMLER'
}
)

# Akışın başarıyla etkinleştirildiğinden emin olmak için yanıtı kontrol edin
eğer cevap[ 'Akış Spesifikasyonu' ][ 'Akış Etkinleştirildi' ]:
Yazdır( 'DynamoDB akışı başarıyla etkinleştirildi' )
Başka:
Yazdır( 'DynamoDB akışı etkinleştirilirken hata oluştu' )

Bu kod, 'mytable' tablosunda herhangi bir değişiklik meydana gelir gelmez öğelerin hem yeni hem de eski görüntülerini aktaran DynamoDB akışını etkinleştirir. Yalnızca StreamViewType 'NEW_IMAGE' konumuna gelir gelmez yeni görüntülerin akışını seçebilirsiniz.

Özellikle bu kodun çalıştırılması tablolarınızda akışların ancak bir süre sonra aktif hale gelmesine neden olabilir. Bunun yerine, işlem biraz zaman alabilir. Akışın durumunu kontrol etmek için define_table yöntemini kullanabilirsiniz.

4. Adım: Lambda İşlevini Oluşturun

Sonraki adım, DynamoDB akışını tetikleyen bir Lambda işlevi oluşturmaktır. Aşağıdaki adımlar yardımcı olacaktır:

  • AWS Lambda konsolunu açın ve 'İşlev oluştur' sekmesine tıklayın. 'İşlev oluştur' sayfasında, 'Sıfırdan yazar'ı seçin ve işleviniz için bir ad girin. Bu noktada çalışma sürenizi de girmeniz gerekir. Bu çizim için Python'u seçtik.
  • Lambda işleviniz için gerekli izinlere sahip bir IAM rolü oluşturmak için 'Bir yürütme rolü seçin veya oluşturun' altında 'Temel Lambda izinleriyle yeni bir rol oluştur'u seçin.
  • Lambda işlevinizi oluşturmak için 'İşlev oluştur' düğmesine tıklayın.
  • İşlevinizin 'Yapılandırma' sayfasında, 'Tasarımcı' bölümüne gidin ve 'Tetikleyici ekle' sekmesine tıklayın.
  • Görünen 'Tetikleyici yapılandırması' kutusunda, 'Tetikleyici' açılır menüsünden 'DynamoDB'yi seçin.
  • İşlevi tetiklemek için kullanmak istediğiniz DynamoDB tablosunu seçin. İşiniz bittiğinde, işlevin tablodaki tüm güncellemelerde mi yoksa yalnızca belirli güncellemelerde mi (belirli sütunlardaki güncellemeler gibi) tetiklenmesini istediğinizi seçin.
  • Tetiği oluşturmak için “Ekle” düğmesine tıklayın.
  • 'İşlev kodu' düzenleyicisinde, işleviniz için Python kodunu yazın. İşlevi tetikleyen verilere erişmek için işlevinize iletilen olay nesnesini kullanabilirsiniz.
  • İşlevin kaydedilmesi için “Kaydet” düğmesine tıklayın.

Bir Lambda işlevi oluştururken olanların hepsi bu kadar! İşleviniz artık, belirtilen DynamoDB tablosunda güncellemeler olduğunda tetikleniyor.

İşte DynamoDB akışının tetikleyebileceği basit bir Python işlevi örneği:

def lambda_handler(olay, bağlam):

etkinlik kaydı için[ 'Kayıtlar' ]:

yazdır(kaydet[ 'dinamomod' ][ 'Yeni görüntü' ])

Bu işlev, olay nesnesindeki kayıtları yineler ve işlevi tetikleyen DynamoDB tablosundaki öğenin yeni görüntüsünü yazdırır.

Adım 5: Lambda İşlevini Test Edin

Bir DynamoDB akışının tetikleyebileceği bir Lambda işlevini test etmek için boto3 DynamoDB API'sine ve çağırmak yöntemi Lambda işlevi tetiklemek için istemci.

İşte bunun nasıl yapılacağına dair bir örnek:

boto3'ü içe aktar

# DynamoDB hizmetine bağlanın
dinamodb = boto3.client( 'dinamomod' )

# Lambda hizmetine bağlanın
lambda_client = boto3.client( 'lamda' )

# 'my-table' tablosuna bir öğe ekleyin
yanıt = dynamodb.put_item(
TabloAdı= 'benim masam' ,
öğe={
'İD' :{ 'N' : '123' },
'isim' :{ 'S' : 'Joel Austin},
'
yaş ':{' N ':' 3. 4 '}
}
)

# Öğenin başarıyla eklendiğinden emin olmak için yanıtı kontrol edin
yanıt['
YanıtMeta verileri '][' HTTPDurumKodu '] == 200:
print('Öğe başarıyla eklendi')
Başka:
print('Öğe eklenirken hata')

# Abone olan Lambda işlevini tetikleyin '
benim masam ' masa
yanıt = lambda_client.invoke(
İşlevAdı='
işlevim ',
ÇağırmaTürü='
Etkinlik ',
LogType='
Kuyruk ',
Yük='
{ 'Kayıtlar' :[{ 'dinamomod' :{ 'Yeni görüntü' :{ 'İD' :{ 'N' : '123' }, 'isim' :{ 'S' : 'Joel Austin' }, 'yaş' :{ 'N' : '3. 4' }}}}]} '
)

# İşlevin başarıyla tetiklendiğinden emin olmak için yanıtı kontrol edin
yanıt['
Durum kodu '] == 202:
print('Lambda fonksiyonu başarıyla tetiklendi')
Başka:
print('Lambda fonksiyonu tetiklenirken hata')

Bu kod önce bir öğe ekler benim masam tablo ve ardından tetikler işlevim kullanarak işleve örnek bir olay yükü göndererek Lambda işlevi çağırmak yöntem. Olay yükü, az önce eklenen öğenin yeni görüntüsünü içeren bir DynamoDB akış olayını simüle eder.

Ardından, olay verilerini başarıyla tetikleyip işlemediğini görmek için Lambda işlevinin günlüklerini kontrol edebilirsiniz.

Çözüm

Bir DynamoDB akışının bir Lambda işlevini tetikleyebileceğini aynı akış kaydı için birden çok kez çağırabileceğinize dikkat etmek çok önemlidir. Bunun başlıca nedeni, akış kayıtlarının sonunda tutarlı olması ve Lambda işleviyle aynı kaydı birden çok kez işlemenin mümkün olmasıdır. Bu durumu doğru bir şekilde ele almak için Lambda işlevinizi tasarlamanız çok önemlidir.