Apa itu RDS Data API
Amazon Web Services (AWS) menawarkan beragam layanan database, salah satunya adalah Amazon Relational Database Service (RDS). RDS Data API adalah fitur yang kuat dari RDS yang menyediakan API serverless, yang sepenuhnya dikelola untuk mengakses database RDS Anda.
Dengan RDS Data API, Anda dapat mengakses dan memodifikasi data di database RDS Anda dengan aman tanpa perlu mengelola koneksi database atau kredensial.
RDS Data API menggunakan fungsi AWS Lambda untuk mengeksekusi pernyataan SQL terhadap database RDS Anda, yang menyederhanakan kode aplikasi Anda dan membuatnya lebih mudah untuk dipelihara. Selain itu, RDS Data API menawarkan peningkatan keamanan, skalabilitas, dan efektivitas biaya.
Ini adalah pilihan yang bagus untuk aplikasi serverless, mikro layanan, dan aplikasi seluler dan web. Secara keseluruhan, RDS Data API adalah alat berharga untuk menyederhanakan akses database dan meningkatkan efisiensi aplikasi Anda.
Manfaat RDS Data API
RDS Data API adalah fitur yang kuat dari Amazon RDS yang menawarkan sejumlah manfaat untuk akses database. Berikut adalah beberapa manfaat utama dari RDS Data API:
-
Sederhana Akses Database
Dengan RDS Data API, Anda tidak perlu mengelola koneksi database atau kredensial. Ini menyederhanakan kode aplikasi Anda dan membuatnya lebih mudah untuk dipelihara. -
Keamanan Ditingkatkan
RDS Data API menggunakan AWS Identity and Access Management (IAM) untuk mengendalikan akses ke database RDS Anda. Anda dapat dengan mudah membuat peran IAM dan kebijakan untuk memberikan akses ke resource dan tindakan tertentu. -
Skalabilitas
RDS Data API sepenuhnya dikelola dan serverless, yang berarti dapat menyesuaikan otomatis untuk menangani jumlah lalu lintas apa pun. -
Efektivitas Biaya
Dengan RDS Data API, Anda hanya membayar untuk permintaan yang Anda buat, sehingga membuatnya solusi yang hemat biaya untuk akses database. -
Menyederhanakan Pengembangan Aplikasi Serverless
RDS Data API adalah pilihan yang bagus untuk aplikasi serverless, karena menghilangkan kebutuhan untuk mengelola koneksi dan kredensial database. -
Meningkatkan Mikro Layanan
RDS Data API dapat digunakan untuk membangun mikro layanan yang mengakses database RDS Anda, membuatnya lebih mudah untuk membangun dan memelihara aplikasi yang dapat diskalakan. -
Meningkatkan Aplikasi Seluler dan Web
RDS Data API dapat digunakan untuk mengakses dan memodifikasi data dengan aman di database RDS Anda dari aplikasi seluler dan web.
Bagaimana RDS Data API Bekerja
Berikut cara kerja RDS Data API:
-
Lingkungan Eksekusi
Saat Anda melakukan panggilan ke RDS Data API, AWS Lambda membuat lingkungan eksekusi. -
Pernyataan SQL
Anda menyediakan pernyataan SQL ke RDS Data API. -
Koneksi
AWS Lambda membangun koneksi ke database RDS Anda. -
Eksekusi SQL
AWS Lambda menjalankan pernyataan SQL terhadap database RDS Anda. -
Hasil
Setelah eksekusi selesai, hasilnya dikembalikan ke aplikasi Anda.
Proses ini menghilangkan kebutuhan untuk mengelola koneksi atau kredensial database, sehingga memudahkan dan lebih efisien untuk mengakses database RDS Anda. RDS Data API menggunakan AWS IAM untuk mengontrol akses ke database RDS Anda, memberikan keamanan yang lebih baik. Selain itu, RDS Data API sepenuhnya dikelola dan serverless, memungkinkannya untuk secara otomatis mengatur skalabilitas untuk menangani jumlah lalu lintas apa pun. Dengan RDS Data API, Anda dapat dengan mudah mengakses dan memodifikasi data di database RDS Anda dari fungsi AWS Lambda, AWS AppSync GraphQL API, atau setiap klien HTTP yang dapat memanggil API REST.
Kasus Penggunaan untuk RDS Data API
Berikut adalah beberapa kasus penggunaan yang paling umum untuk RDS Data API:
-
Aplikasi Serverless
RDS Data API adalah pilihan yang bagus untuk aplikasi serverless, karena menghilangkan kebutuhan untuk mengelola koneksi dan kredensial database. Hal ini memudahkan kode aplikasi Anda dan memudahkan untuk dipelihara. -
Microservices
RDS Data API dapat digunakan untuk membangun microservices yang mengakses database RDS Anda. Ini memungkinkan Anda untuk membangun dan memelihara aplikasi yang dapat skalabilitas dan dapat menangani lalu lintas yang besar. -
Aplikasi Mobile dan Web
RDS Data API dapat digunakan untuk mengakses dan memodifikasi data dengan aman di database RDS Anda dari aplikasi mobile dan web. Hal ini memudahkan untuk membangun aplikasi yang efisien dan responsif yang dapat menangani operasi data yang kompleks. -
Analisis dan Pelaporan Data
RDS Data API dapat digunakan untuk mengakses database RDS Anda untuk analisis dan pelaporan data. Ini memungkinkan Anda untuk menghasilkan wawasan dan membuat keputusan yang didasarkan pada data Anda. -
Pemrosesan Data Real-Time
RDS Data API dapat digunakan untuk memproses data real-time dari database RDS Anda. Ini dapat berguna untuk aplikasi yang memerlukan pemrosesan dan analisis data real-time.
Cara Menggunakan RDS Data API
Berikut adalah cara menggunakan RDS Data API dengan Boto3, SDK AWS untuk Python:
-
Instalasi
Untuk menggunakan RDS Data API dengan Boto3, Anda perlu menginstal library Boto3 dengan menjalankan perintahpip install boto3
di command prompt atau terminal Anda. -
Izin IAM
Anda perlu memastikan bahwa peran IAM Anda memiliki izin yang diperlukan untuk mengakses database RDS Anda. Anda dapat membuat kebijakan IAM dengan izin yang dibutuhkan dan melampirkannya ke peran IAM Anda. -
Koneksi Database
Anda perlu melakukan koneksi ke database RDS Anda. Untuk melakukannya, Anda dapat menggunakan metodeconnect_to_database
dari klienrdsdataservice
di Boto3. Berikut adalah contohnya:
import boto3
rds_data = boto3.client('rds-data')
response = rds_data.execute_statement(
database='my_database',
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
sql='SELECT * FROM my_table'
)
print(response)
Contoh kode ini melakukan koneksi ke database yang disebut my_database
, menjalankan pernyataan SELECT
pada tabel yang disebut my_table
, dan mencetak respons.
- Operasi CRUD
Anda dapat menggunakan RDS Data API dengan Boto3 untuk melakukan operasi CRUD (Create, Read, Update, Delete) pada database RDS Anda. Berikut adalah contoh penggunaan RDS Data API dengan Boto3 untuk melakukan operasi-operasi tersebut:
- SELECT
response = rds_data.execute_statement(
database='my_database',
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
sql='SELECT * FROM my_table'
)
print(response)
- INSERT
response = rds_data.execute_statement(
database='my_database',
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
sql='INSERT INTO my_table (column1, column2) VALUES (:value1, :value2)',
parameters=[
{'name': 'value1', 'value': {'stringValue': 'abc'}},
{'name': 'value2', 'value': {'stringValue': 'def'}}
]
)
print(response)
- UPDATE
response = rds_data.execute_statement(
database='my_database',
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
sql='UPDATE my_table SET column1 = :value1 WHERE column2 = :value2',
parameters=[
{'name': 'value1', 'value': {'stringValue': 'xyz'}},
{'name': 'value2', 'value': {'stringValue': 'def'}}
]
)
print(response)
- DELETE
response = rds_data.execute_statement(
database='my_database',
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
sql='DELETE FROM my_table WHERE column1 = :value1',
parameters=[
{'name': 'value1', 'value': {'stringValue': 'abc'}}
]
)
print(response)
Dalam contoh-contoh ini, metode execute_statement
digunakan untuk mengeksekusi pernyataan SQL terhadap database RDS. Parameter database
menentukan nama database, parameter resourceArn
menentukan Amazon Resource Name (ARN) dari database RDS, dan parameter secretArn
menentukan ARN dari rahasia Secrets Manager yang berisi kredensial database. Parameter sql
menentukan pernyataan SQL yang akan dieksekusi, dan parameter parameters
menentukan nilai parameter yang akan digunakan dalam pernyataan SQL.
Transaksi
RDS Data API dengan Boto3 dapat digunakan untuk mengeksekusi transaksi terhadap database Amazon RDS Anda. Transaksi adalah fitur yang kuat yang memungkinkan Anda untuk mengelompokkan beberapa pernyataan SQL menjadi satu unit kerja yang dapat dieksekusi secara atomik. Berikut cara menggunakan RDS Data API dengan Boto3 untuk mengeksekusi transaksi:
- Terhubung ke Database
Pertama, hubungkan ke database RDS Anda menggunakan metodeconnect_to_database
dari klienrdsdataservice
di Boto3. Berikut contohnya:
import boto3
rds_data = boto3.client('rds-data')
response = rds_data.begin_transaction(
database='my_database',
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret'
)
transaction_id = response['transactionId']
print('Transaction ID:', transaction_id)
Kode ini membentuk koneksi ke database yang disebut my_database
dan memulai sebuah transaksi. Metode begin_transaction
mengembalikan respons yang mencakup ID transaksi, yang digunakan untuk mengeksekusi pernyataan SQL dalam transaksi.
- Mengeksekusi Pernyataan SQL
Setelah transaksi dimulai, Anda dapat mengeksekusi pernyataan SQL menggunakan metodeexecute_statement
dari klienrdsdataservice
di Boto3. Berikut contohnya:
response = rds_data.execute_statement(
database='my_database',
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
sql='INSERT INTO my_table (column1, column2) VALUES (:value1, :value2)',
parameters=[
{'name': 'value1', 'value': {'stringValue': 'abc'}},
{'name': 'value2', 'value': {'stringValue': 'def'}}
],
transactionId=transaction_id
)
print(response)
In this example, the execute_statement
method is used to execute an INSERT statement within the transaction. The transactionId
parameter specifies the ID of the transaction that the SQL statement is executed within.
- Commit or Rollback the Transaction
Once the SQL statements have been executed within the transaction, you can commit the transaction using thecommit_transaction
method, or rollback the transaction using therollback_transaction
method. Here's an example:
response = rds_data.commit_transaction(
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
transactionId=transaction_id
)
print(response)
Dalam contoh ini, metode commit_transaction
digunakan untuk melakukan commit transaksi.
Blok try-except
Menggunakan RDS Data API dengan Boto3 dalam blok try-except adalah praktik yang baik untuk memastikan bahwa kode Anda menangani kesalahan dengan baik. Berikut adalah contoh cara menggunakan RDS Data API dengan Boto3 dalam blok try-except untuk menjalankan transaksi:
import boto3
rds_data = boto3.client('rds-data')
try:
response = rds_data.begin_transaction(
database='my_database',
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret'
)
transaction_id = response['transactionId']
response = rds_data.execute_statement(
database='my_database',
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
sql='INSERT INTO my_table (column1, column2) VALUES (:value1, :value2)',
parameters=[
{'name': 'value1', 'value': {'stringValue': 'abc'}},
{'name': 'value2', 'value': {'stringValue': 'def'}}
],
transactionId=transaction_id
)
response = rds_data.commit_transaction(
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
transactionId=transaction_id
)
print(response)
except Exception as e:
print(e)
response = rds_data.rollback_transaction(
resourceArn='arn:aws:rds:us-east-1:123456789012:db:my_database',
secretArn='arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secret',
transactionId=transaction_id
)
print(response)
Dalam contoh ini, kode mencoba untuk mengeksekusi transaksi yang memasukkan data ke dalam tabel bernama my_table
. Jika terjadi pengecualian selama eksekusi, kode akan membatalkan transaksi menggunakan metode rollback_transaction
.
Parameter pada RDS Data API
Parameter pada RDS Data API digunakan untuk melewati nilai input ke dalam pernyataan SQL, memudahkan dalam mengeksekusi kueri dan menghindari kerentanan injeksi SQL. API Data membutuhkan parameter masukan dalam format tertentu, yang bervariasi tergantung pada jenis data. Parameter dapat digunakan untuk berbagai jenis data, seperti string, integer, float, boolean, nilai null, array, dan bahkan objek JSON.
Ketika menggunakan RDS Data API, Anda perlu menyediakan parameter dalam format tertentu. Berikut adalah panduan langkah demi langkah tentang cara menggunakan parameter pada RDS Data API:
-
Tentukan pernyataan SQL Anda dengan tempat untuk nilai parameter. Gunakan format
:nama_parameter
untuk tempat, misalnya,SELECT * FROM users WHERE age > :minimum_age
. -
Buat kamus yang berisi nilai parameter. Kunci harus sesuai dengan nama parameter dalam pernyataan SQL Anda, dan nilai harus dalam format yang dibutuhkan untuk jenis data. Misalnya:
{
"minimum_age": {
"longValue": 18
}
}
- Lewati kamus parameter ke RDS Data API sebagai bagian dari permintaan
ExecuteStatement
. Misalnya, menggunakan Boto3:
import boto3
client = boto3.client('rds-data')
response = client.execute_statement(
secretArn='<your_secret_arn>',
database='<your_database>',
resourceArn='<your_resource_arn>',
sql='SELECT * FROM users WHERE age > :minimum_age',
parameters={
"minimum_age": {
"longValue": 18
}
}
)
Dict ke Parameters
Berikut adalah kelas yang mengonversi daftar kamus Python menjadi nilai yang bisa dilewatkan ke parameter AWS Data API. Kelas ini menghasilkan parameter yang diformat dengan benar untuk setiap kamus dalam daftar.
from typing import Any, Dict, List, Union
class DataAPIParameters:
def __init__(self, dict_list: List[Dict[str, Any]]):
"""
Initialize the DataAPIParameters class.
"""
self.dict_list = dict_list
def convert(
self, dict_list: list[dict[str, Any]]
) -> list[list[dict[str, Union[str, dict[str, Any]]]]]:
"""
Convert a list of dictionaries to the format required by AWS Data API parameters.
"""
return [self.convert_dict_to_param(d) for d in dict_list]
def convert_dict_to_param(
self, d: dict[str, Any]
) -> list[dict[str, Union[str, dict[str, Any]]]]:
"""
Convert a single dictionary to the format required by AWS Data API parameters.
"""
return [
{"name": k, "value": self.convert_value_to_param(v)} for k, v in d.items()
]
def convert_dict_to_param(
self, d: dict[str, Any]
) -> list[dict[str, Union[str, dict[str, Any]]]]:
"""
Convert a single dictionary to the format required by AWS Data API parameters.
"""
return [
{"name": k, "value": self.convert_value_to_param(v)} for k, v in d.items()
]
def convert_value_to_param(self, value: Any) -> Dict[str, Any]:
"""
Convert a value to the format required by AWS Data API parameters.
"""
if isinstance(value, str):
return {'stringValue': value}
elif isinstance(value, int):
return {'longValue': value}
elif isinstance(value, float):
return {'doubleValue': value}
elif isinstance(value, bool):
return {'booleanValue': value}
elif value is None:
return {'isNull': True}
elif isinstance(value, list) or isinstance(value, tuple):
return {'arrayValue': {'values': [self.convert_value_to_param(v) for v in value]}}
elif isinstance(value, dict):
return {'stringValue': json.dumps(value)}
else:
raise TypeError(f'Unsupported data type: {type(value)}')
Kode ini mengambil daftar kamus yang disediakan sebagai input dan mengonversinya menjadi format yang cocok untuk parameters
dari AWS Data API. Konversi yang tepat dilakukan berdasarkan tipe data masing-masing.
Referensi