Menggunakan EC2 Instance Untuk Terhubung ke Amazon RDS

Amazon RDS atau relational database merupakan data yang disusun dalam tabel berdasarkan kolom dan baris. Jadi makna dari relational database adalah adanya hubungan antara baris dan kolom. Amazon RDS memiliki 7 engine, yaitu Aurora (MySQL Compatible), Aurora (PostgreSQL Compatible), MySQL, MariaDB, PostgreSQL, Oracle, dan Microsoft SQL Server. Karena layer dari Amazon RDS adalah instance maka keamanannya menggunakan Security Group. Dari Security Group tersebutlah memungkinkan terhubungnya EC2 instance ke Amazon RDS. Biasanya RDS berada di private subnet yang kemudian terhubung dengan EC2 instance yang berada di public subnet. Perhatikan cara membuat Amazon RDS:

  1. Pastikan telah memiliki akun AWS
  2. Sudah login di akun
  3. Buat security group untuk Amazon RDS dengan ketentuan:
    • Inbound
      • Type: MYSQL/Aurora
      • Source: sg- (cari security group dari EC2 instance yang akan digunakan terhubung ke Amazon RDS)
  4. Pada management console ketik RDS dan pilih
  5. Pada panel sebelah kiri pilih Subnet groups
  6. Klik tombol Create DB subnet group
    • Subnet group details
      • Name : nama dari subnet group untuk RDS
      • Description : deskripsi singkat untuk menjelaskan subnet
      • VPC : harus sama dengan VPC dari EC2 instance yang akan terhubung
    • Add subnets
      • Availability Zones : pilih 2 availability zone untuk fault tolerance
      • Subnets : pilih subnet yang ada di 2 AZ yang telah dipilih
  7. Klik tombol Create
  8. Sekarang akan dibuat database maka pada panel sebelah kiri pilih Databases
  9. Klik tombol Create database
  10. Pada halam Create database:
    • Choose a database creation method
      • Standard create : semua konfigurasi diset sendiri
      • Easy create : rekomendasi konfigurasi dari praktek terbaik digunakan

      • sumber: aws.amazon.com

    • Engine options
      • Engine type
        • Aurora (MySQL Compatible) : kecepatan lebih tinggi dari MySQL
        • Aurora (PostgreSQL Compatible) : kecepatan lebih tinggi dari PostgreSQL
        • MySQL
        • MariaDB
        • PostgreSQL
        • Oracle
        • Microsoft SQL Server
      • DB instance size 
      • DB cluster identifier
      • Master username
      • Auto generate a password

      • sumber: aws.amazon.com

    • Templates
      • Production
      • Dev/Test

      • sumber: aws.amazon.com

    • Settings
      • DB cluster identifier
      • Credential Settings
        • Master username
        • Manage master credentials in AWS Secrets Manager
        • Auto generate a password
        • Master password
        • Confirm master password

      • sumber: aws.amazon.com

    • Instance configuration
      • DB instance class
        • Memory optimized classes (includes r classes)
        • Burstable classes (includes t classes)

      • sumber: aws.amazon.com

    • Availability & durability
      • Multi-AZ deployment

      • sumber: aws.amazon.com

    • Connectivity
      • Compute resource
      • Network type
      • Virtual private cloud
      • DB subnet group
      • Public access
      • VPC security group (firewall)
      • Existing VPC security groups
      • RDS proxy

      • sumber: aws.amazon.com

    • Database authentication

      • sumber: aws.amazon.com

    • Monitoring
      • Turn on Performance Insights
      • Retention period for Performance Insight
      • AWS KMS key
      • Account
      • KMS key ID
      • Additional configuration
        • Enable Enhanced monitoring
        • Granularity
        • Monitoring Role

      • sumber: aws.amazon.com

    • Additional configuration
      • Database options
        • Initial database name
        • DB cluster parameter group
        • DB parameter group
        • Option group
        • Failover priority
      • Backup
        • Backup retention period
      • Encryption
        • Enable encryption
        • AWS KMS key
        • Account
        • KMS key ID
      • Backtrack
      • Log exports
      • Maintenance
        • Enable auto minor version upgrade
        • Maintenance window
      • Deletion protection

      • sumber: aws.amazon.com

  11. Klik tombol Create database
  12. Tunggu berubah status dari Creating menjadi Availability
  13. Melakukan koneksi dari EC2 instance
    • Pastikan EC2 sudah terbuat
    • Pastikan EC2 instance dengan Security Group yang sesuai dengan Source pada Security Group database yang dibuat
    • Konek dengan EC2 melalui SSH
    • Setelah masuk sistem EC2 instance gunakan command:
      • Engine MySQL/MariaDB
        • mysql -h <endpointRDS> -u <username> -p
      • Engine PostgreSQL
        • psql --host=<endpointRDS> --port=5432 --username=<username> --password --dbname=<namadatabase>
  14. Selesai
Membuat database di atas EC2 instance masih memerlukan seorang middleware untuk menangani seperti sitem operasi dan patching. Berbeda dengan Amazon RDS yang managed yaitu seluruh kegiatan perawatan database dilakukan oleh Amazon sehingga customer tinggal menggunakannya. Salah satu fitur unggulan dari RDS adalah read replica yaitu secara asinkronus menduplikat data untuk dibaca oleh user sehingga tidak mengganggu user yang sedang menulis ke RDS. Misalnya aplikasi mahasiswa ada yang ingin input KRS dan ada yang hanya ingin baca hasil KRS-nya. Jika mahasiswa yang membaca KRS-nya langsung dari RDS maka akan memperlambat mahasiswa yang sedang input KRS, oleh sebab itu mahasiswa yang hendak membaca cukup mengaksesnya melalui read replica. Namun, RDS juga memiliki kekurangan ketika menangani read-write lebih dari 150.000, sehingga disarankan menggunakan no-SQL untuk menangani traffic tersebut. Dengan demikian sangat penting untuk menggunakan alat yang tepat untuk pekerjaan yang tepat atau the right tool for the right job.

Migrasi

Pada level awal penggunaan komputasi awan akan menggunakan EC2 instance untuk membuat database sendiri, misalnya dengan menginstal MySQL di atas EC2 instance. Hal itu memungkinkan namun cukup riskan ketika terjadi masalah pada instance yang secara otomatis akan berpengaruh juga pada database yang diinstall di atas instance. Cukup mudah untuk memindahkan MySQL dari EC2 instance ke Amazon RDS dengan engine MySQL, caranya:

  • Masuk ke EC2 instance untu meng-capture data saat ini dengan mysqldump, gunakan command:
    • mysqldump --databases <nama database> -u root -p > myDBDump.sql
  • Masukkan password database yang ada di EC2
  • Pastikan database telah ter-capture dengan adanya file bernama myDBDump.sql
  • Pastikan EC2 instance memiliki celah terhubung ke Amazon RDS yaitu melalui security group inbound di Amazon RDS-nya
  • Sebisa mungkin hindari source all IP address di inbound security group Amazon RDS, sebagai saran gunakan ID security group dari EC2 instance sehingga hanya dapat diakses oleh setiap instance yang memiliki ID security group tersebut
  • Sekarang lakukan import file myDBDump.sql yang telah dicapture sebelumnya ke Amazon RDS dengan command:
    • mysql -u admin -p --host <rds-endpoint> < myDBDump.sql
  • Masukkan password database yang ada di Amazon RDS
  • Jika tidak ada error maka proses import telah berhasil
  • Untuk memeriksa apakah sudah berhasil terimport masuk ke RDS database dengan command:
    • mysql -u admin -p --host <rds-endpoint>
  • Masukkan password database yang ada di Amazon RDS, lalu gunakan command:
    • show databases;
  • Untuk melakukan penghubungan antara web di EC2 instance dan database di Amazon RDS lakukan:
    • Konfigurasi pada AWS System Manager di bagian Parameter Store seperti username, password database, url database, dan nama database
    • Lakukan penghentian database yang berjalan di EC2 instance
      • Misalnya untuk mariaDB: sudo service mariadb stop
    • Lalu coba akses web
  • Jika terjadi kegagalan perhatikan kembali langkah-langkah di atas

Hal berbeda tentunya jika melakukan migrasi dari engine database yang berbeda. Sebelum database dimigrasikan, database asal harus di konversikan dengan Amazon Schema Conversion Tool baru kemudian dimigrasikan seperti langkah di atas tadi.




ref:
aws.amazon.com

Komentar