Traffine I/O

Bahasa Indonesia

2022-10-02

RDS Data API

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:

  1. Lingkungan Eksekusi
    Saat Anda melakukan panggilan ke RDS Data API, AWS Lambda membuat lingkungan eksekusi.

  2. Pernyataan SQL
    Anda menyediakan pernyataan SQL ke RDS Data API.

  3. Koneksi
    AWS Lambda membangun koneksi ke database RDS Anda.

  4. Eksekusi SQL
    AWS Lambda menjalankan pernyataan SQL terhadap database RDS Anda.

  5. 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:

  1. Instalasi
    Untuk menggunakan RDS Data API dengan Boto3, Anda perlu menginstal library Boto3 dengan menjalankan perintah pip install boto3 di command prompt atau terminal Anda.

  2. 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.

  3. Koneksi Database
    Anda perlu melakukan koneksi ke database RDS Anda. Untuk melakukannya, Anda dapat menggunakan metode connect_to_database dari klien rdsdataservice di Boto3. Berikut adalah contohnya:

python
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.

  1. 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
python
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
python
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
python
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
python
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:

  1. Terhubung ke Database
    Pertama, hubungkan ke database RDS Anda menggunakan metode connect_to_database dari klien rdsdataservice di Boto3. Berikut contohnya:
python
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.

  1. Mengeksekusi Pernyataan SQL
    Setelah transaksi dimulai, Anda dapat mengeksekusi pernyataan SQL menggunakan metode execute_statement dari klien rdsdataservice di Boto3. Berikut contohnya:
python
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.

  1. Commit or Rollback the Transaction
    Once the SQL statements have been executed within the transaction, you can commit the transaction using the commit_transaction method, or rollback the transaction using the rollback_transaction method. Here's an example:
python
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:

python
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:

  1. Tentukan pernyataan SQL Anda dengan tempat untuk nilai parameter. Gunakan format :nama_parameter untuk tempat, misalnya, SELECT * FROM users WHERE age > :minimum_age.

  2. 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
  }
}
  1. Lewati kamus parameter ke RDS Data API sebagai bagian dari permintaan ExecuteStatement. Misalnya, menggunakan Boto3:
python
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.

python
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

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rds-data.html

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!