0

Memodifikasi instance type RDS menggunakan AWS Lambda (Python)

Memodifikasi instance RDS dengan Lambda.

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

python script to modifying instance DB RDS with AWS Lambda.

  • 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:
Memodifikasi instance RDS dengan Lambda. successfully downgraded RDS instance by using aws lambda python
  • Dan jika kita lihat di dashboard RDS, maka status instancenya akan modifying
modifying instance DB RDS using aws lambda
  • 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
Memodifikasi instance RDS dengan Lambda
  • 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
Memodifikasi instance RDS dengan Lambda
  • Tunggu sampai jam 16:15, maka jika kita lihat di dashboard RDS akan modifying instancenya
Memodifikasi instance RDS dengan Lambda
  • Beberapa saat kemudian instancenya akan berubah menjadi db.t3.small




Demikian tutorial Memodifikasi instance RDS dengan Lambda. Semoga bermanfaat!

Ambar Hasbiyatmoko

Hello, I'm web developer. Passionate about programming, web server, and networking.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.