Memodifikasi instance RDS dengan Lambda.
Pada tutorial sebelumnya, kita sudah belajar cara memodifikasi instance type RDS menggunakan AWS CLI. Kekurangan pada tutorial tersebut adalah, kita harus menyediakan server sendiri untuk menjalankan AWS CLI.
Nah, berbeda pada tutorial kali ini kita akan menggunakan service AWS lambda, dimana kita tidak perlu server (serverless). Kita hanya perlu upload codingan (python) kita disana, lalu menjalankannya. Urusan server sudah dihandle sama AWS, jadi kita tidak perlu pusing-pusing mengelola server sendiri.
Spesifikasi DB RDS:
- Nama DB Identifier: my-db
- Region: singapore (ap-southeast-1)
- Instance type: db.t3.medium
- DB Engine: MySQL
- Multi AZ: No (Single AZ)
- Publicly Accessible: Yes
- Environment: Production
Secara garis besar, step yang akan kita lakukan adalah sebagai berikut:
- Membuat IAM Policy
- Membuat IAM Role dan mengaitkan Policy ke Role
- Membuat Lambda Function, mengaitkan Role ke Lambda Function
- Mengupload Codingan Python ke Lambda
- Menjalankan Lambda Secara Manual
- Menjalankan Lambda Secara Otomatis Menggunakan AWS EventBridge
Membuat IAM Policy
Agar lambda nantinya bisa memodifikasi instance type RDS, diperlukan policy / hak akses. Buat Policy terlebih dahulu dengan cara berikut:
- Masuk ke Dashboard IAM (Identity & Access Management)
- Pada Access Management > Policies > Create Policy
- Pilih tab JSON, lalu masukkan JSON policy dibawah ini:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowModifyRDSInstance",
"Effect": "Allow",
"Action": [
"rds:Describe*",
"rds:ModifyDBInstance"
],
"Resource": "arn:aws:rds:ap-southeast-1:193xxx:db:my-db"
}
]
}
Penjelasan:
– Sid, kita beri statement ID dengan nama AllowModifyRDSInstance (kalian bisa ganti dengan nama lain)
– Effect, Allow artinya policy ini diijinkan (allow) untuk menjalankan perintah rds:Describe dan rds:ModifyInstance pada element Action
– Action, rds:Describe untuk melihat informasi nama DB identifier, instance type, region, DB engine, dll. rds:ModifyDBInstance untuk memodifikasi instance RDS mulai dari instance type, storage, backup, dll
– Resource, resource RDS yang dapat dimodifikasi terbatas sesuai apa yang kita define disini. Ganti ap-southeast-1 dengan region code AWS kalian, 193xx dengan akun ID AWS, dan my-db dengan nama database identifier kalian
- Klik Next
- Berinama policy dengan nama test-modify-rds-instance, lalu klik Create policy
Policy ini nantinya akan dikaitkan ke role. Jadi kita harus buat rolenya terlebih dahulu.
Membuat IAM Role dan mengaitkan Policy ke Role
- Buka dashboard IAM
- Pada Access Management > Roles > Create Role
- Pada Trusted entity type pilih AWS service
- Pada Use Case pilih Lambda
- Klik Next
- Pada halaman Add permission, cari policy yang sudah kita buat tadi (test-modify-rds-instance), centang policy nya, Klik Next
- Berinama Role name dengan nama modify-rds-instance, klik Create Role
- Role berhasil terbuat dan policy sudah dikaitkan ke role.
Membuat Lambda Function, mengaitkan Role ke Lambda Function
Selanjutnya kita perlu buat lambda function dan mengaitkan ke role yang sudah kita buat sebelumnya.
- Masuk ke dashboard AWS Lambda, klik Create a function
- Pilih Author from scratch
- Masukkan function name dengan nama: modify-rds-instance
- Runtime: Python 3.8
- Change default execution role > Use an existing role > pilih role yang sudah kita buat (modify-rds-instance)
- Klik Create function
- Function berhasil dibuat. Kalau kita lihat disana sudah ada codingan defaultnya (…Hello from Lambda!). Codingan ini nanti kita akan ganti.
Mengupload Codingan Python ke Lambda
- Ganti codingan default tersebut pada tab lambda_function dengan berikut ini:
import sys
import botocore
import boto3
import json
from botocore.exceptions import ClientError
def lambda_handler(event, context):
rds = boto3.client('rds')
print ('Trying to modify instance DB RDS. Please wait..')
response = rds.modify_db_instance(DBInstanceIdentifier='my-db', DBInstanceClass='db.t3.small', ApplyImmediately=True)
print (f'Success :: {response} ')
return {
'statusCode': 200,
'body': json.dumps('RDS instance: my-db has successfully downgraded')
}
– Set DBInstanceIdentifiernya ke my-db (silahkan ganti identifiernya sesuai nama DB identifier kalian)
– Akan diubah instance type DB nya ke db.t3.small
– ApplyImmediately=True, terapkan saat ini juga
- Setelah itu klik Deploy
- Note: setiap kali ada perubahan coding, maka harus dideploy ulang
Menjalankan Lambda Secara Manual
Setelah berhasil deploy codingan ke lambda, maka selanjutnya test codingannya secara manual apakah berhasil atau ada error coding.
- klik Tombol Test
- Karena baru pertama kali menjalankan Test, maka harus buat event terlebih dahulu
- Berinama eventnya: event-modify-rds-instance, klik Save
- Klik kembali tombol Test, maka codingan akan terseksekusi
- Jika berhasil, maka outputnya akan seperti ini pada tab Execution result:
- Dan jika kita lihat di dashboard RDS, maka status instancenya akan modifying
- Setelah selesai modifying, maka akan instance akan berubah menjadi
db.t3.small
Menjalankan Lambda Secara Otomatis Menggunakan AWS EventBridge
Jika ingin menjalankan function lambda secara otomatis (periodik), kita bisa manfaatkan service Amazon EventBridge.
- Buka dashboard Amazon EventBridge
- Pilih EventBridge Schedule, lalu klik Create Schedule
- Berinama eventnya: scheduler-modify-rds-instance
- Pada Occurrence, pilih Recurring schedule > pilih timezonenya (UTC+07.00) Asia/Jakarta
- Schedule typenya pilih Cron-based schedule. Disini kita jalankan cronnya setiap jam 16:15 setiap harinya, maka masukkan value cron: 15 16 * * ? *
- Pilih Flexible time window > Off. Setelah itu klik Next
- Pada template targets, pilih AWS Lambda lalu pilih lambda function: modify-rds-instance. Klik Next
- Lalu tentukan Maximum age of event 1 hour(s) dan Retry attempts 2 times agar jika terjadi gagal kita batasi saja retry-nya agar tidak kelamaan. Klik Next
- Pada halaman selanjutnya, klik Create schedule. Scheduler berhasil terbuat dengan nama: scheduler-modify-rds-instance
- Tunggu sampai jam 16:15, maka jika kita lihat di dashboard RDS akan modifying instancenya
- Beberapa saat kemudian instancenya akan berubah menjadi
db.t3.small
Demikian tutorial Memodifikasi instance RDS dengan Lambda. Semoga bermanfaat!