Membangun Aplikasi Web Dasar
TUTORIAL
Modul 4: Membuat Tabel Data
Di modul ini, Anda akan membuat suatu tabel Amazon DynamoDB dan mengaktifkan fungsi Lambda untuk menyimpan data di sana
Gambaran Umum
Di modul ini, kita akan membuat tabel untuk menyimpan data menggunakan Amazon DynamoDB. DynamoDB adalah layanan database nilai-kunci, jadi kita tidak perlu membuat skema data. Kinerjanya konsisten pada skala apa pun dan tidak ada server yang harus dikelola saat menggunakannya.
Selain itu, kita akan menggunakan layanan AWS Identity and Access Management (IAM) untuk secara aman memberikan izin yang diperlukan berbagai layanan untuk saling berinteraksi. Secara khusus, kita akan izinkan fungsi Lambda yang dibuat di Modul Dua untuk menulis ke tabel DynamoDB baru menggunakan kebijakan IAM. Untuk melakukannya, kita akan menggunakan AWS SDK (Python, JavaScript, atau Java) dari fungsi Lambda kita.
Hal-hal yang akan Anda capai
- Membuat tabel DynamoDB menggunakan Konsol Manajemen AWS
- Membuat peran dan mengelola izin dengan IAM
- Menulis ke tabel DynamoDB menggunakan AWS SDK (Python, JavaScript, atau Java)
Konsep utama
Mempertahankan Data – Menyimpan data sehingga kita bisa mengaksesnya kelak secara independen dari eksekusi program.
Basis data nonrelasional – Basis data nonrelasional tidak menggunakan skema tabular baris dan kolom. Sebagai gantinya, basis data ini menggunakan model penyimpanan yang dioptimalkan untuk kebutuhan spesifik tipe data yang disimpan.
Basis data nilai-kunci – Tipe basis data nonrelasional yang menyimpan data sebagai kumpulan pasangan nilai-kunci di mana kunci berfungsi sebagai pengidentifikasi unik.
Kunci Primer – Nilai yang akan mengidentifikasi setiap penggal data dalam tabel DynamoDB. Nilai ini juga akan berfungsi untuk mempartisi tabel agar dapat diskalakan.
Skema – Susunan data yang berfungsi sebagai cetak biru untuk cara pembangunan basis data.
AWS SDK – AWS SDK (kit pengembangan perangkat lunak) menyediakan seperangkat alat, perpustakaan, dokumentasi, contoh kode, proses, dan panduan yang bisa digunakan pengembang untuk membuat aplikasi perangkat lunak pada platform tertentu.
Kebijakan IAM – Dokumen yang menentukan sumber daya AWS yang dapat diakses oleh suatu entitas, misalnya layanan, pengguna, atau grup.
Waktu penyelesaian minimum
10 menit
Layanan yang digunakan
Terakhir diperbarui
Implementasi
-
Membuat tabel DynamoDB
- Masuk ke konsol Amazon DynamoDB.
- Pastikan Anda membuat tabel di Wilayah yang sama tempat Anda membuat aplikasi web di modul sebelumnya. Anda dapat melihat ini di bagian paling atas halaman, di sebelah nama akun Anda.
- Pilih tombol Buat tabel berwarna oranye.
- Pada Nama tabel, masukkan HelloWorldDatabase.
- Di kolom Kunci partisi, masukkan ID. Kunci partisi adalah bagian dari kunci primer tabel.
- Biarkan sisa nilai default tidak berubah dan pilih tombol Buat tabel berwarna oranye.
- Dalam daftar tabel, pilih nama tabel, HelloWorldDatabase.
- Di bagian Informasi umum, tampilkan Info tambahan dengan memilih panah turun.
9. Salin Amazon Resource Name (ARN). Anda akan membutuhkannya nanti dalam modul ini.
-
Membuat dan menambah kebijakan IAM di fungsi Lambda
- Sekarang setelah tabel ada, mari kita edit fungsi Lambda agar dapat menuliskan data ke dalamnya. Di jendela peramban baru, buka konsol AWS Lambda.
- Pilih fungsi yang dibuat di Modul Dua (jika Anda telah menggunakan contoh dari kami, fungsi itu akan disebut HelloWorldFunction). Jika Anda tidak melihatnya, periksa menu tarik-turun Wilayah di kanan atas di sebelah nama Anda untuk memastikan Anda berada di Wilayah yang sama tempat Anda membuat fungsi.
- Kita akan menambahkan izin ke fungsi agar dapat menggunakan layanan DynamoDB, dan kita akan menggunakan AWS Identity and Access Management (IAM) untuk melakukannya.
- Pilih tab Konfigurasi dan pilih Izin dari menu sisi kanan.
- Di kotak Peran eksekusi, pada Nama peran, pilih tautan. Tab peramban baru akan terbuka.
- Di kotak Kebijakan izin, buka menu tarik-turun Tambah izin dan pilih Buat kebijakan inline.
- Pilih tab JSON.
- Tempelkan kebijakan berikut ini di area teks, untuk mengganti ARN tabel di kolom Sumber Daya di baris 15:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem" ], "Resource": "YOUR-TABLE-ARN" } ] }
9. Dengan kebijakan ini, fungsi Lambda akan dapat membaca, mengedit, atau menghapus item, tetapi hanya bisa melakukan fungsi tersebut di tabel yang kita buat.
10. Klik tombol Tinjau Kebijakan berwarna biru.
11. Di sebelah Nama, masukkan HelloWorldDynamoPolicy.
12. Klik tombol Buat Kebijakan berwarna biru.
13. Anda sekarang dapat menutup tab peramban ini dan kembali ke tab untuk fungsi Lambda.
-
Modifikasi fungsi Lambda untuk menulis ke tabel DynamoDB
-
Python
-
JavaScript
-
Java
-
Python
-
- Pilih tab Kode dan pilih fungsi Anda dari panel navigasi di sisi kiri editor kode.
- Ganti kode untuk fungsi Anda dengan yang berikut:
# import the json utility package since we will be working with a JSON object import json # import the AWS SDK (for Python the package name is boto3) import boto3 # import time import time # import two packages to help us with dates and date formatting # create a DynamoDB object using the AWS SDK dynamodb = boto3.resource('dynamodb') # use the DynamoDB object to select our table table = dynamodb.Table('HelloWorldDatabase') # define the handler function that the Lambda service will use as an entry point def lambda_handler(event, context): # Get the current GMT time gmt_time = time.gmtime() # store the current time in a human readable format in a variable # Format the GMT time string now = time.strftime('%a, %d %b %Y %H:%M:%S +0000', gmt_time) # extract values from the event object we got from the Lambda service and store in a variable name = event['firstName'] +' '+ event['lastName'] # write name and time to the DynamoDB table using the object we instantiated and save response in a variable response = table.put_item( Item={ 'ID': name, 'LatestGreetingTime':now }) # return a properly formatted JSON object return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda, ' + name) }
3. Pilih tombol Deploy di bagian atas editor kode
- Pilih tab Kode dan pilih fungsi Anda dari panel navigasi di sisi kiri editor kode.
-
JavaScript
-
- Pilih tab Kode dan pilih fungsi Anda dari panel navigasi di sisi kiri editor kode.
- Ganti kode untuk fungsi Anda dengan yang berikut:
// Include the AWS SDK module const AWS = require('aws-sdk'); // Instantiate a DynamoDB document client with the SDK let dynamodb = new AWS.DynamoDB.DocumentClient(); // Use built-in module to get current date & time let date = new Date(); // Store date and time in human-readable format in a variable let now = date.toISOString(); // Define handler function, the entry point to our code for the Lambda service // We receive the object that triggers the function as a parameter exports.handler = async (event) => { // Extract values from event and format as strings let name = JSON.stringify(`Hello from Lambda, ${event.firstName} ${event.lastName}`); // Create JSON object with parameters for DynamoDB and store in a variable let params = { TableName:'HelloWorldDatabase', Item: { 'ID': name, 'LatestGreetingTime': now } }; // Using await, make sure object writes to DynamoDB table before continuing execution await dynamodb.put(params).promise(); // Create a JSON object with our response and store it in a constant const response = { statusCode: 200, body: name }; // Return the response constant return response; };
3. Pilih tombol Deploy di bagian atas editor kode.
- Pilih tab Kode dan pilih fungsi Anda dari panel navigasi di sisi kiri editor kode.
-
Java
-
- Pilih tab Konfigurasi.
- Buka Kode fungsi dan unggah file JAR berikut ini. (Untuk keperluan tutorial ini, kita akan melewatkan pembuatan paket deployment.)
- Perbarui Penangan menjadi com.example.app.SavePersonHandler::handleRequest.
-
-
Uji perubahannya
- Pilih tombol Uji berwarna oranye.
- Anda akan melihat pesan Hasil eksekusi: berhasil berlatar belakang hijau.
- Di tab peramban baru, buka Konsol DynamoDB.
- Di panel navigasi sebelah kiri, pilih Tabel > Jelajahi item.
- Pilih HelloWorldDatabase, yang kita buat tadi di modul ini.
- Pilih tab Item di sebelah kanan.
- Item yang cocok dengan peristiwa pengujian Anda muncul di Item yang dikembalikan. Jika Anda telah menggunakan contoh kita, ID item akan menjadi Hello from Lambda, Ada Lovelace, atau Ada Lovelace.
- Setiap kali fungsi Lambda dijalankan, tabel DynamoDB Anda akan diperbarui. Jika menggunakan nama yang sama, hanya cap waktu yang akan berubah.
Arsitektur aplikasi
Dengan selesainya Modul Empat, mari kita lihat arsitektur yang kini kita miliki:
Kita menambahkan dua layanan dalam modul ini: DynamoDB (untuk penyimpanan) dan IAM (untuk mengelola izin dengan aman). Keduanya terhubung ke fungsi Lambda, sehingga dapat menulis ke basis data kita. Langkah terakhir adalah menambahkan kode ke klien untuk memanggil Gateway API.