Streaming DynamoDB dengan Lambda

Streaming Dynamodb Dengan Lambda



DynamoDB Streams adalah fitur di Amazon DynamoDB yang memungkinkan Anda mendapatkan aliran perubahan atau perubahan data secara real-time yang dibuat ke tabel DynamoDB Anda. Anda dapat menggunakan fitur ini untuk membangun aplikasi yang bereaksi terhadap perubahan data dalam tabel DynamoDB seperti memperbarui cache dan mengirimkan pemberitahuan.

Tentu saja, Anda juga dapat menggunakan DynamoDB Streams untuk memicu proses downstream dan fungsi AWS Lambda. Menurut definisi, Lambda adalah layanan komputasi tanpa server yang menjalankan kode Anda sebagai respons terhadap peristiwa dan secara otomatis mengelola sumber daya komputasi untuk Anda.

Anda dapat menggunakan Lambda untuk menulis kode di Node.js, Python, Java, atau C# untuk memproses rekaman aliran dan mengambil tindakan yang sesuai. Manfaat utama mengintegrasikan DynamoDB Streams dengan Lambda adalah bahwa Lambda memungkinkan Anda menjalankan layanan yang didukung atau kode aplikasi tanpa memerlukan administrasi.







Cara Menggunakan AWS DynamoDB Streams dengan Lambda

Meskipun dimungkinkan untuk membuat fungsi Lambda yang menggunakan kejadian dan kejadian dari Stream DynamoDB, prosesnya bisa jadi cukup menantang, terutama pada upaya pertama Anda. Langkah-langkah berikut akan membantu:



Langkah 1: Pastikan Sistem Anda Memenuhi Prasyarat

Prosedur ini hanya akan berhasil jika Anda mengetahui operasi dan proses dasar Lambda. Jadi, ini harus menjadi yang pertama untuk memastikan bahwa pemahaman Anda tentang Lambda di atas rata-rata.



Prasyarat kedua yang patut dipertimbangkan adalah mengonfirmasi versi AWS sistem Anda. Anda dapat menggunakan perintah berikut:





aws –versi

Hasil untuk perintah yang diberikan akan terlihat seperti ini:

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

Respons sampel yang diberikan berisi versi AWS CLI yang terinstal ( aws-cli/2.x.x ), versi Python ( Python/3.x.x ), dan sistem operasi ( Linux/4.x.x-xxx-std ). Bagian terakhir dari respons menentukan versi pustaka Botocore tempat AWS CLI Anda dijalankan ( botocore/2.x.x ).



Karena itu, Anda akan berakhir dengan sesuatu seperti ini:

Langkah 2: Buat Peran Eksekusi

Langkah selanjutnya adalah membuat peran eksekusi di AWS CLI. Peran eksekusi adalah peran AWS Identity and Access Management (IAM) yang diasumsikan oleh layanan AWS untuk melakukan tugas atas nama Anda. Ini memberi Anda akses ke sumber daya AWS yang akan Anda perlukan di sepanjang jalan.

Anda dapat membuat peran menggunakan perintah berikut:

aws iam buat-peran \

--nama-peran LambdaDynamoDBExecutionPeran\

--assume-role-policy-document file://assume-role-policy.json \

--keterangan 'Peran AWSLambdaDynamoDBExecution' \

--nama-layanan lambda.amazonaws.com

Perintah sebelumnya adalah perintah AWS CLI untuk membuat role. Anda juga dapat menggunakan Amazon Management Console untuk membuat peran. Setelah Anda berada di konsol IAM, buka Peran halaman dan klik Buat peran tombol.

Lanjutkan untuk memasukkan yang berikut ini:

  • Entitas Tepercaya: Lambda
  • Nama Peran: lambda-dynamodb-role
  • Izin: Peran AWSLambdaDynamoDBExecution

Anda juga dapat menggunakan Python dengan menginstal AWS SDK for Python terlebih dahulu:

pip instal boto3

Langkah 3: Aktifkan Aliran DynamoDB di Meja Anda

Anda perlu mengaktifkan DynamoDB Streams di meja Anda. Untuk ilustrasi ini, kami menggunakan Boto3, AWS SDK for Python. Perintah berikut akan membantu:

impor boto3

# Sambungkan ke layanan DynamoDB
dynamodb = boto3.client( 'dinamodb' )

# Aktifkan aliran DynamoDB di tabel 'meja saya'
respon = dynamodb.update_table(
NamaTabel= 'mejaku' ,
StreamSpesifikasi={
'StreamAktifkan' : BENAR,
'StreamViewType' : 'BARU_AND_OLD_IMAGES'
}
)

# Periksa respons untuk memastikan aliran berhasil diaktifkan
jika tanggapan[ 'StreamSpesifikasi' ][ 'StreamAktifkan' ]:
mencetak( 'Aliran DynamoDB berhasil diaktifkan' )
kalau tidak:
mencetak( 'Kesalahan saat mengaktifkan aliran DynamoDB' )

Kode ini mengaktifkan aliran DynamoDB pada tabel 'mytable' yang mengalirkan gambar item baru dan lama segera setelah terjadi perubahan. Anda dapat memilih untuk hanya mengalirkan gambar baru segera setelah StreamViewType ke “NEW_IMAGE”.

Khususnya, menjalankan kode ini hanya dapat mengaktifkan aliran di tabel Anda setelah beberapa saat. Sebaliknya, prosesnya mungkin memakan waktu. Anda dapat menggunakan metode description_table untuk memeriksa status aliran.

Langkah 4: Buat Fungsi Lambda

Langkah selanjutnya adalah membuat fungsi Lambda yang memicu aliran DynamoDB. Langkah-langkah berikut akan membantu:

  • Buka konsol AWS Lambda dan klik tab 'Buat fungsi'. Di halaman 'Buat fungsi', pilih 'Penulis dari awal' dan masukkan nama untuk fungsi Anda. Anda juga perlu memasukkan runtime Anda pada saat ini. Kami memilih Python untuk ilustrasi ini.
  • Di bagian “Pilih atau buat peran eksekusi”, pilih “Buat peran baru dengan izin Lambda dasar” untuk membuat peran IAM dengan izin yang diperlukan untuk fungsi Lambda Anda.
  • Klik tombol 'Buat fungsi' untuk membuat fungsi Lambda Anda.
  • Pada halaman 'Konfigurasi' untuk fungsi Anda, gulir ke bawah ke bagian 'Desainer' dan klik tab 'Tambahkan pemicu'.
  • Di kotak “Konfigurasi pemicu” yang muncul, pilih “DynamoDB” dari menu tarik-turun “Pemicu”.
  • Pilih tabel DynamoDB yang ingin Anda gunakan untuk memicu fungsi. Setelah selesai, pilih apakah Anda ingin fungsi dipicu pada semua pembaruan pada tabel atau hanya pada pembaruan tertentu (seperti pembaruan pada kolom tertentu).
  • Klik tombol 'Tambah' untuk membuat pemicu.
  • Di editor 'Kode fungsi', tulis kode Python untuk fungsi Anda. Anda bisa menggunakan objek kejadian yang diteruskan ke fungsi Anda untuk mengakses data yang memicu fungsi tersebut.
  • Klik tombol 'Simpan' untuk menyimpan fungsi.

Itu saja yang terjadi saat membuat fungsi Lambda! Fungsi Anda sekarang terpicu setiap kali ada pembaruan pada tabel DynamoDB yang ditentukan.

Berikut adalah contoh fungsi Python sederhana yang dapat dipicu oleh aliran DynamoDB:

def lambda_handler(acara, konteks):

untuk catatan dalam acara[ 'Rekaman' ]:

cetak(rekam[ 'dinamodb' ][ 'Gambar baru' ])

Fungsi ini mengulang melalui rekaman di objek kejadian dan mencetak gambar baru item di tabel DynamoDB yang memicu fungsi tersebut.

Langkah 5: Uji Fungsi Lambda

Untuk menguji fungsi Lambda yang dapat dipicu oleh aliran DynamoDB, Anda dapat menggunakan boto3 library untuk mengakses DynamoDB API dan memohon metode dari Lambda klien untuk memicu fungsi.

Berikut ini contoh cara melakukannya:

impor boto3

# Sambungkan ke layanan DynamoDB
dynamodb = boto3.client( 'dinamodb' )

# Sambungkan ke layanan Lambda
lambda_client = boto3.client( 'lambda' )

# Masukkan item ke tabel 'meja saya'
respon = dynamodb.put_item(
NamaTabel= 'mejaku' ,
Barang={
'Indo' :{ 'N' : '123' },
'nama' :{ 'S' : 'Joel Austin},
'
usia ':{' N ':' 3. 4 '}
}
)

# Periksa respons untuk memastikan item berhasil dimasukkan
jika tanggapan['
ResponseMetadata '][' Kode Status HTTP '] == 200:
print('Item berhasil dimasukkan')
kalau tidak:
print('Kesalahan memasukkan item')

# Memicu fungsi Lambda yang berlangganan '
meja saya ' meja
respon = lambda_client.invoke(
NamaFungsi='
myfunction ',
InvocationType='
Peristiwa ',
LogType='
Ekor ',
Muatan='
{ 'Rekaman' :[{ 'dinamodb' :{ 'Gambar baru' :{ 'Indo' :{ 'N' : '123' }, 'nama' :{ 'S' : 'Joel Austin' }, 'usia' :{ 'N' : '3.4' }}}}]} '
)

# Periksa respons untuk memastikan fungsi berhasil dipicu
jika tanggapan['
Kode status '] == 202:
print('Fungsi Lambda berhasil dipicu')
kalau tidak:
print('Kesalahan memicu fungsi Lambda')

Kode ini pertama-tama menyisipkan item ke dalam mytable tabel dan kemudian memicu myfunction Fungsi Lambda dengan mengirimkan contoh payload kejadian ke fungsi menggunakan memohon metode. Payload kejadian mensimulasikan kejadian aliran DynamoDB yang menyertakan gambar baru dari item yang baru saja dimasukkan.

Anda kemudian dapat memeriksa log fungsi Lambda untuk melihat apakah fungsi tersebut berhasil memicu dan memproses data peristiwa.

Kesimpulan

Sangat penting untuk diperhatikan bahwa Anda dapat memanggil beberapa kali untuk rekaman aliran yang sama dengan aliran DynamoDB yang dapat memicu fungsi Lambda. Alasan utama di balik ini adalah bahwa rekaman aliran pada akhirnya konsisten, dan dimungkinkan untuk memproses rekaman yang sama berkali-kali dengan fungsi Lambda. Sangat penting untuk merancang fungsi Lambda Anda untuk menangani kasus ini dengan benar.