Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Dalam tutorial ini, Anda menggunakan fungsi Lambda untuk menulis data ke basis data Amazon Relational Database Service (Amazon RDS) melalui Proksi RDS. Fungsi Lambda Anda membaca catatan dari antrean Amazon Simple Queue Service (Amazon SQS) dan menulis item baru ke tabel di basis data Anda setiap kali ada pesan yang ditambahkan. Dalam contoh ini, Anda menggunakan AWS Management Console untuk menambahkan pesan secara manual ke antrean. Diagram berikut menunjukkan AWS sumber daya yang Anda gunakan untuk menyelesaikan tutorial.

Dengan Amazon RDS, Anda dapat menjalankan basis data relasional terkelola di cloud menggunakan produk basis data umum seperti Microsoft SQL Server, MariaDB, MySQL, Oracle Database, dan PostgreSQL. Dengan mengakses basis data menggunakan Lambda, Anda dapat membaca dan menulis data sebagai respons terhadap peristiwa, seperti pelanggan baru yang mendaftar ke situs web Anda. Fungsi, instans basis data, dan proksi secara otomatis diskalakan untuk memenuhi periode saat permintaan sedang tinggi.
Untuk menyelesaikan tutorial ini, lakukan tugas berikut:
-
Luncurkan RDS untuk instance database MySQL dan proxy di VPC default Anda Akun AWS.
-
Buat dan uji fungsi Lambda yang membuat tabel baru di basis data Anda dan menulis data ke dalamnya.
-
Buat antrean Amazon SQS dan konfigurasikan untuk menginvokasi fungsi Lambda Anda setiap kali ada pesan baru yang ditambahkan.
-
Uji penyiapan lengkap dengan menambahkan pesan ke antrian Anda menggunakan AWS Management Console dan memantau hasilnya menggunakan CloudWatch Log.
Dengan menyelesaikan langkah-langkah ini, Anda belajar:
Cara menggunakan Amazon RDS untuk membuat instans basis data dan proksi, serta menghubungkan fungsi Lambda ke proksi.
Cara menggunakan Lambda untuk melakukan operasi pembuatan dan pembacaan pada basis data Amazon RDS.
Cara menggunakan Amazon SQS untuk menginvokasi fungsi Lambda.
Anda dapat menyelesaikan tutorial ini menggunakan AWS Management Console atau AWS Command Line Interface (AWS CLI).
Prasyarat
Sebelum memulai, selesaikan langkah-langkah di bagian berikut:
Buat instans DB Amazon RDS

Instans DB Amazon RDS adalah lingkungan basis data terisolasi yang berjalan di AWS Cloud. Instans dapat berisi satu atau beberapa basis data yang dibuat pengguna. Kecuali Anda menentukan sebaliknya, Amazon RDS membuat instance database baru di VPC default yang disertakan dalam file Anda. Akun AWS Untuk informasi selengkapnya tentang Amazon VPC, lihat Panduan Pengguna Amazon Virtual Private Cloud.
Dalam tutorial ini, Anda membuat instance baru di VPC default Anda Akun AWS dan membuat database bernama ExampleDB
dalam contoh itu. Anda dapat membuat instans dan database DB Anda menggunakan salah satu AWS Management Console atau AWS CLI.
Untuk membuat instans basis data
-
Buka konsol Amazon RDS dan pilih Buat basis data.
-
Pilih Pembuatan standar, lalu di Opsi mesin, pilih MySQL.
-
Di Templat, pilih Tingkat gratis.
-
Di Pengaturan, untuk Pengidentifikasi instans DB, masukkan
MySQLForLambda
. -
Tetapkan nama pengguna dan kata sandi Anda dengan melakukan hal berikut:
-
Di Pengaturan kredensial, atur Nama pengguna utama sebagai
admin
. -
Untuk Kata sandi utama, masukkan dan konfirmasikan kata sandi untuk mengakses basis data Anda.
-
-
Tentukan nama basis data dengan melakukan hal berikut:
-
Pilih semua sesuai opsi default-nya, kemudian gulir ke bawah ke bagian Konfigurasi tambahan.
-
Perluas bagian ini dan masukkan
ExampleDB
sebagai Nama basis data awal.
-
-
Pilih semua sesuai opsi default-nya dan pilih Buat basis data.
Buat fungsi Lambda dan proksi

Anda dapat menggunakan konsol RDS untuk membuat fungsi Lambda dan proksi di VPC yang sama dengan basis data.
catatan
Anda hanya dapat membuat sumber daya terkait ini jika basis data Anda telah selesai dibuat dan berstatus Tersedia.
Untuk membuat fungsi dan proksi terkait
-
Dari halaman Basis Data, periksa apakah basis data Anda sudah berstatus Tersedia. Jika sudah, lanjutkan ke langkah berikutnya. Jika belum, tunggu hingga basis data tersedia.
-
Pilih basis data dan pilih Siapkan koneksi Lambda dari Tindakan.
-
Di halaman Siapkan koneksi Lambda, pilih Buat fungsi baru.
Atur Nama fungsi Lambda baru ke
LambdaFunctionWithRDS
. -
Di bagian Proksi RDS, pilih opsi Hubungkan menggunakan Proksi RDS. Selanjutnya pilih Buat proksi baru.
-
Untuk Kredensial basis data, pilih Nama pengguna dan kata sandi basis data.
-
Untuk Nama pengguna, pilih
admin
. -
Untuk Kata sandi, masukkan kata sandi untuk instans basis data Anda.
-
-
Pilih Siapkan untuk menyelesaikan pembuatan proksi dan fungsi Lambda.
Wizard menyelesaikan penyiapan dan menyediakan tautan ke konsol Lambda untuk meninjau fungsi baru Anda. Catat titik akhir proksi sebelum beralih ke konsol Lambda.
Buat peran eksekusi fungsi

Sebelum membuat fungsi Lambda, Anda membuat peran eksekusi untuk memberikan izin yang diperlukan ke fungsi Anda. Untuk tutorial ini, Lambda memerlukan izin untuk mengelola koneksi jaringan ke VPC yang berisi instans basis data Anda dan untuk melakukan polling pesan dari antrean Amazon SQS.
Untuk memberikan izin yang diperlukan oleh fungsi Lambda, tutorial ini menggunakan kebijakan terkelola IAM. Ini adalah kebijakan yang memberikan izin untuk banyak kasus penggunaan umum dan tersedia di Akun AWS Anda. Untuk informasi selengkapnya tentang penggunaan kebijakan terkelola, lihat Praktik terbaik kebijakan.
Untuk membuat peran eksekusi Lambda
-
Buka halaman Peran
di konsol IAM dan pilih Buat peran. -
Untuk Jenis entitas tepercaya, pilih Layanan AWS , dan untuk Kasus penggunaan, pilih Lambda.
-
Pilih Berikutnya.
-
Tambahkan kebijakan terkelola IAM dengan melakukan hal berikut:
-
Menggunakan kotak pencarian kebijakan, cari
AWSLambdaSQSQueueExecutionRole
. -
Di dalam daftar hasil, centang kotak di samping peran, lalu pilih Hapus filter.
-
Menggunakan kotak pencarian kebijakan, cari
AWSLambdaVPCAccessExecutionRole
. -
Di dalam daftar hasil, centang kotak di samping peran, lalu pilih Berikutnya.
-
-
Untuk Nama peran, masukkan
lambda-vpc-sqs-role
, lalu pilih Buat peran.
Nantinya dalam tutorial ini, Anda memerlukan Amazon Resource Name (ARN) untuk peran eksekusi yang baru saja Anda buat.
Untuk menemukan ARN peran eksekusi
-
Buka halaman Peran
di konsol IAM dan pilih peran ( lambda-vpc-sqs-role
) Anda. -
Salin ARN yang ditampilkan di bagian Ringkasan.
Buat paket deployment Lambda

Contoh kode Python berikut menggunakan paket PyMySQLCustomer
. Tabel menggunakan skema berikut, dengan kunci primer CustID
:
Customer(CustID, Name)
Fungsi ini juga menggunakan PyMy SQL untuk menambahkan catatan ke tabel ini. Fungsi ini menambahkan catatan menggunakan ID pelanggan dan nama yang ditentukan dalam pesan yang akan Anda tambahkan ke antrean Amazon SQS.
Kode ini membuat koneksi ke basis data Anda di luar fungsi handler. Membuat koneksi dalam kode inisialisasi memungkinkan koneksi untuk digunakan kembali oleh invokasi fungsi berikutnya dan meningkatkan performa. Dalam aplikasi produksi, Anda juga dapat menggunakan konkurensi yang tersedia untuk menginisialisasi sejumlah permintaan koneksi basis data. Koneksi ini langsung tersedia setelah fungsi Anda dipanggil.
import sys
import logging
import pymysql
import json
import os
# rds settings
user_name = os.environ['USER_NAME']
password = os.environ['PASSWORD']
rds_proxy_host = os.environ['RDS_PROXY_HOST']
db_name = os.environ['DB_NAME']
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# create the database connection outside of the handler to allow connections to be
# re-used by subsequent function invocations.
try:
conn = pymysql.connect(host=rds_proxy_host, user=user_name, passwd=password, db=db_name, connect_timeout=5)
except pymysql.MySQLError as e:
logger.error("ERROR: Unexpected error: Could not connect to MySQL instance.")
logger.error(e)
sys.exit(1)
logger.info("SUCCESS: Connection to RDS for MySQL instance succeeded")
def lambda_handler(event, context):
"""
This function creates a new RDS database table and writes records to it
"""
message = event['Records'][0]['body']
data = json.loads(message)
CustID = data['CustID']
Name = data['Name']
item_count = 0
sql_string = f"insert into Customer (CustID, Name) values(%s, %s)"
with conn.cursor() as cur:
cur.execute("create table if not exists Customer ( CustID int NOT NULL, Name varchar(255) NOT NULL, PRIMARY KEY (CustID))")
cur.execute(sql_string, (CustID, Name))
conn.commit()
cur.execute("select * from Customer")
logger.info("The following items have been added to the database:")
for row in cur:
item_count += 1
logger.info(row)
conn.commit()
return "Added %d items to RDS for MySQL table" %(item_count)
catatan
Dalam contoh ini, kredensial akses basis data Anda disimpan sebagai variabel lingkungan. Dalam aplikasi produksi, sebaiknya gunakan AWS Secrets Manager sebagai opsi yang lebih aman. Perlu diketahui bahwa jika fungsi Lambda Anda berada di dalam VPC, untuk terhubung ke Secrets Manager, Anda perlu membuat titik akhir VPC. Untuk mempelajari selengkapnya, lihat Cara terhubung ke layanan Secrets Manager dalam Virtual Private Cloud
Untuk menyertakan ketergantungan PyMy SQL dengan kode fungsi Anda, buat paket.zip deployment. Perintah berikut dapat digunakan untuk Linux, macOS, atau Unix:
Untuk membuat paket deployment .zip
-
Simpan kode contoh sebagai file bernama
lambda_function.py
. -
Di direktori yang sama di mana Anda membuat
lambda_function.py
file Anda, buat direktori baru bernamapackage
dan instal perpustakaan PyMy SQL.mkdir package
pip install --target package pymysql
-
Buat file zip yang berisi kode aplikasi Anda dan perpustakaan PyMy SQL. Di Linux atau macOS, jalankan perintah CLI berikut. Di Windows, gunakan alat zip pilihan Anda untuk membuat file
lambda_function.zip
. File kode sumberlambda_function.py
dan folder yang berisi dependensi Anda harus diinstal di root file .zip.cd package
zip -r ../lambda_function.zip .
cd ..
zip lambda_function.zip lambda_function.py
Anda juga dapat membuat paket deployment menggunakan lingkungan virtual Python. Lihat Melakukan deployment fungsi Lambda Python dengan arsip file .zip.
Perbarui fungsi Lambda
Menggunakan paket .zip yang baru saja Anda buat, perbarui fungsi Lambda Anda menggunakan konsol Lambda. Agar fungsi dapat mengakses basis data, variabel lingkungan juga perlu dikonfigurasikan dengan kredensial akses.
Untuk memperbarui fungsi Lambda
-
Buka halaman Fungsi
di konsol Lambda dan pilih fungsi LambdaFunctionWithRDS
. -
Di tab Runtime settings, pilih Edit untuk mengubah Runtime fungsi ke Python 3.10.
-
Ubah Handler ke
lambda_function.lambda_handler
. -
Di tab Kode, pilih Unggah dari kemudian File .zip.
-
Pilih file
lambda_function.zip
yang Anda buat di tahap sebelumnya dan pilih Simpan.
Sekarang konfigurasikan fungsi dengan peran eksekusi yang Anda buat sebelumnya. Dengan demikian, fungsi dapat memperoleh izin yang diperlukan untuk mengakses instans basis data Anda dan melakukan polling antrean Amazon SQS.
Untuk mengonfigurasi peran eksekusi fungsi
-
Di halaman Fungsi
pada konsol Lambda, pilih tab Konfigurasi, lalu pilih Izin. -
Di Peran eksekusi, pilih Edit.
-
Di Peran yang ada, pilih peran eksekusi Anda (
lambda-vpc-sqs-role
). -
Pilih Simpan.
Untuk mengonfigurasi variabel lingkungan fungsi Anda
-
Di halaman Fungsi
pada konsol Lambda, pilih tab Konfigurasi, lalu pilih Variabel lingkungan. -
Pilih Edit.
-
Untuk menambahkan kredensial akses basis data, lakukan hal berikut:
-
Pilih Tambahkan variabel lingkungan, lalu untuk Kunci masukkan
USER_NAME
dan untuk Nilai masukkanadmin
. -
Pilih Tambahkan variabel lingkungan, lalu untuk Kunci masukkan
DB_NAME
dan untuk Nilai masukkanExampleDB
. -
Pilih Tambahkan variabel lingkungan, lalu untuk Kunci masukkan
PASSWORD
dan untuk Nilai masukkan kata sandi yang Anda pilih saat membuat basis data. -
Pilih Tambahkan variabel lingkungan, lalu untuk Kunci masukkan
RDS_PROXY_HOST
dan untuk Nilai masukkan titik akhir Proksi RDS yang Anda catat sebelumnya. -
Pilih Simpan.
-
Uji fungsi Lambda Anda di konsol

Anda dapat menggunakan konsol Lambda untuk menguji fungsi. Anda membuat peristiwa pengujian yang meniru data yang akan diterima fungsi saat diinvokasi menggunakan Amazon SQS pada tahap akhir tutorial ini. Peristiwa pengujian berisi objek JSON yang menentukan ID pelanggan dan nama pelanggan yang akan ditambahkan ke tabel Customer
buatan fungsi Anda.
Untuk menguji fungsi Lambda
-
Buka halaman Fungsi
di konsol Lambda dan pilih fungsi Anda. -
Pilih bagian Uji.
-
Pilih Buat peristiwa baru dan masukkan
myTestEvent
sebagai nama peristiwa. -
Salin kode berikut ke JSON peristiwa dan pilih Simpan.
{ "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\n \"CustID\": 1021,\n \"Name\": \"Martha Rivera\"\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue", "awsRegion": "us-west-2" } ] }
-
Pilih Uji.
Di tab Hasil eksekusi, Anda akan melihat hasil yang mirip dengan yang ditampilkan di Log Fungsi:
[INFO] 2023-02-14T19:31:35.149Z bdd06682-00c7-4d6f-9abb-89f4bbb4a27f The following items have been added to the database: [INFO] 2023-02-14T19:31:35.149Z bdd06682-00c7-4d6f-9abb-89f4bbb4a27f (1021, 'Martha Rivera')
Buat antrean Amazon SQS

Anda telah berhasil menguji integrasi fungsi Lambda dan instans basis data Amazon RDS. Sekarang Anda membuat antrean Amazon SQS yang akan Anda gunakan untuk menginvokasi fungsi Lambda di tahap akhir tutorial ini.
Untuk membuat antrean Amazon SQS (konsol)
-
Buka halaman Antrean
di konsol Amazon SQS dan pilih Buat antrean. -
Di bagian Jenis pilih Standar masukkan
LambdaRDSQueue
untuk nama antrean. -
Pilih semua sesuai opsi default-nya dan pilih Buat antrean.
Buat pemetaan sumber peristiwa untuk menginvokasi fungsi Lambda Anda

Pemetaan sumber peristiwa adalah sumber daya Lambda yang membaca item dari aliran atau antrean dan menginvokasi fungsi Lambda. Saat mengonfigurasi pemetaan sumber peristiwa, Anda dapat menentukan ukuran batch sehingga catatan dari aliran atau antrean Anda dikumpulkan ke dalam satu payload. Dalam contoh ini, Anda mengatur ukuran batch ke 1 sehingga fungsi Lambda akan diinvokasi setiap kali Anda mengirim sebuah pesan ke antrean. Anda dapat mengonfigurasi pemetaan sumber peristiwa menggunakan konsol AWS CLI atau Lambda.
Untuk membuat pemetaan sumber peristiwa (konsol)
-
Buka halaman Fungsi
di konsol Lambda dan pilih fungsi Anda ( LambdaFunctionWithRDS
). -
Di bagian Ikhtisar fungsi, pilih Tambahkan pemicu.
-
Untuk sumbernya, pilih Amazon SQS, lalu pilih nama antrean (
LambdaRDSQueue
). -
Untuk Ukuran batch, masukkan
1
. -
Biarkan semua opsi lain diatur ke nilai default dan pilih Tambahkan.
Kini semua penyiapan Anda sudah siap diuji dengan menambahkan pesan ke antrean Amazon SQS Anda.
Uji dan pantau pengaturan Anda

Untuk menguji seluruh pengaturan Anda, tambahkan pesan ke antrean Amazon SQS menggunakan konsol. Anda kemudian menggunakan CloudWatch Log untuk mengonfirmasi bahwa fungsi Lambda Anda menulis catatan ke database Anda seperti yang diharapkan.
Untuk menguji dan memantau pengaturan Anda
-
Buka halaman Antrean
di konsol Amazon SQS dan pilih antrean ( LambdaRDSQueue
). -
Pilih Kirim dan terima pesan dan tempelkan JSON berikut ke Konten pesan di bagian Kirim pesan.
{
"CustID": 1054,
"Name": "Richard Roe"
}
-
Pilih Kirim pesan.
Mengirim pesan ke antrean akan membuat Lambda menginvokasi fungsi Anda melalui pemetaan sumber peristiwa. Untuk mengonfirmasi bahwa Lambda telah memanggil fungsi Anda seperti yang diharapkan, gunakan CloudWatch Log untuk memverifikasi bahwa fungsi tersebut telah menulis nama pelanggan dan ID ke tabel database Anda.
-
Buka halaman Grup log
CloudWatch konsol dan pilih grup log untuk fungsi Anda ( /aws/lambda/LambdaFunctionWithRDS
). -
Di bagian Log stream, pilih log stream terbaru.
Tabel Anda harus berisi dua catatan pelanggan, satu dari setiap invokasi fungsi Anda. Di log stream, Anda akan melihat pesan yang mirip dengan pesan berikut:
[INFO] 2023-02-14T19:06:43.873Z 45368126-3eee-47f7-88ca-3086ae6d3a77 The following items have been added to the database: [INFO] 2023-02-14T19:06:43.873Z 45368126-3eee-47f7-88ca-3086ae6d3a77 (1021, 'Martha Rivera') [INFO] 2023-02-14T19:06:43.873Z 45368126-3eee-47f7-88ca-3086ae6d3a77 (1054, 'Richard Roe')
Bersihkan sumber daya Anda
Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus AWS sumber daya yang tidak lagi Anda gunakan, Anda mencegah tagihan yang tidak perlu ke AWS akun Anda.
Untuk menghapus fungsi Lambda
-
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi yang Anda buat.
-
Pilih Tindakan, Hapus.
-
Pilih Hapus.
Untuk menghapus peran eksekusi
-
Buka halaman Peran
dari konsol IAM. -
Pilih peran eksekusi yang Anda buat.
-
Pilih Hapus peran.
-
Pilih Ya, Hapus.
Untuk menghapus instans DB MySQL
-
Buka halaman Basis Data
di konsol Amazon RDS. -
Pilih basis data yang Anda buat.
-
Pilih Tindakan, Hapus.
-
Hapus kotak centang Buat snapshot terakhir.
-
Masukkan
delete me
di kotak teks. -
Pilih Hapus.
Untuk menghapus antrean Amazon SQS
-
Pilih antrean yang Anda buat.
-
Pilih Hapus.
-
Masukkan
delete
di kotak teks. -
Pilih Hapus.