Apa itu Amazon Aurora
Amazon Aurora adalah database relasional yang dikembangkan oleh AWS yang kompatibel dengan MySQL dan PostgreSQL, dan menurut AWS, Aurora hingga 5 kali lebih kuat daripada MySQL dan hingga 3 kali lebih kuat daripada PostgreSQL. Aurora juga digunakan oleh situs EC Amazon, Netflix, dan layanan terkenal lainnya.
Aurora diatur dalam cluster, yang terdiri dari dua lapisan: lapisan instance yang terdiri dari satu atau lebih server DB dan lapisan penyimpanan yang mengelola data, memisahkan instance dan penyimpanan. Arsitektur ini memberikan ketersediaan yang sangat baik karena database tidak terpengaruh jika terjadi kegagalan jaringan atau kerusakan disk.
Apa itu Aurora Serverless
Aurora Serverless adalah Amazon Aurora yang tidak memerlukan manajemen penskalaan instance DB; secara otomatis memulai, mematikan, meningkatkan, dan menurunkan skala sesuai dengan volume permintaan yang datang ke Aurora Serverless. Unit kinerja penskalaan disebut ACU (Aurora Capacity Unit), dan 1 ACU setara dengan sekitar 2GB memori.
Aurora Serverless v1 vs. v2
Aurora Serverless tersedia dalam v1 dan v2. v1 menjadi resmi pada Oktober 2018 dan v2 menjadi resmi pada April 2022. Di bawah ini adalah tabel yang membandingkan v1 dan v2.
Aurora Serverless v1 | Aurora Serverless v2 | |
---|---|---|
ACU | Min:1ACU、Max:128 ACU | Min:0.5 ACU、Max:256 ACU |
Harga | 0,10 USD/jam per 1ACU | 0,20 USD/jam per 1ACU |
Cluster | Serverless | Provisioned |
Instansi DB | Instansi Serverless | Instansi Serverless, Instansi Provisioned |
Multi-AZ | No | Yes |
Auto pause | Yes | No |
Data API | Yes | No |
RDS Proxy | No | Yes |
Penskalaan otomatis selama kueri | No | Yes |
Meskipun v1 dan v2 hanya berbeda satu versi, keduanya memiliki perubahan spesifikasi yang cukup signifikan. Secara khusus, pengelolaan cluster dan instance DB benar-benar berbeda, dan ada beberapa hal yang tidak lagi mungkin dilakukan dengan v2. v1 dan v2 harus dianggap sebagai layanan terpisah.
Berikut ini adalah dua fitur yang tidak akan tersedia di v2.
- Data API
- Aurora Serverless v1 dapat diintegrasikan dengan layanan tanpa server lainnya menggunakan Data API, yang menghilangkan kebutuhan untuk terhubung langsung ke DB karena komunikasi API dilakukan melalui HTTPS. Dengan RDBMS konvensional, komunikasi mungkin menjadi tidak tersedia ketika jumlah koneksi maksimum tercapai karena lalu lintas tinggi, tetapi dengan HTTPS, tidak ada hambatan seperti jumlah koneksi maksimum, memungkinkan dukungan skalabilitas aplikasi yang lebih fleksibel.
- Fungsi Jeda
- Aurora Serverless v1 memiliki item konfigurasi yang disebut
auto_pause
yang memungkinkan DB untuk berhenti sejenak setelah periode waktu tertentu tanpa koneksi, tanpa mengenakan biaya untuk instance DB. Namun, dibutuhkan sekitar 1 menit untuk memulai setelah jeda. Misalnya, Anda dapat menghemat uang dengan menghindari jeda otomatis pada hari kerja antara pukul 06:00 dan 21:00, dan dengan menjalankan Lambda secara berkala dengan EventBridge untuk memulai cluster Aurora dengan 0 ACU pada hari-hari lain (misalnya, akhir pekan).
- Aurora Serverless v1 memiliki item konfigurasi yang disebut
Kasus penggunaan Serverless v1
Aurora Serverless v1 cocok untuk kasus penggunaan berikut
- Aplikasi dan pengembangan database yang jarang digunakan
v1 memiliki fitur auto-shutdown yang secara otomatis mematikan server DB ketika tidak digunakan. Ini hemat biaya, karena server memiliki 0 ACU selama shutdown dan hanya membebankan biaya untuk penyimpanan.
Kasus penggunaan Serverless v2
Aurora Serverless v2 cocok untuk kasus penggunaan berikut
- Beban kerja yang tidak dapat diprediksi di lingkungan produksi
Fitur penskalaan otomatis membuatnya berguna ketika ukuran instance atau lalu lintas yang diperlukan sulit diprediksi.
Meskipun v1 juga memiliki fitur penskalaan otomatis, v1 tidak cocok untuk lingkungan produksi karena hal-hal berikut
- Tidak ada kemampuan multi-AZ, yang menimbulkan kekhawatiran tentang ketersediaan dan toleransi kesalahan
- Penskalaan otomatis tidak tersedia selama eksekusi transaksi atau penguncian tabel.
Contoh build Serverless v1 dengan Terraform
Di bawah ini adalah contoh kode Terraform untuk Aurora Serverless v1.
resource "aws_rds_cluster" "main" {
cluster_identifier = local.aurora_cluster_identifier
database_name = local.aurora_database_name
master_username = local.aurora_master_username
master_password = local.aurora_master_password
db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.main.name
db_subnet_group_name = data.aws_db_subnet_group.main.name
deletion_protection = true
skip_final_snapshot = false
engine = "aurora-mysql"
engine_version = "5.7.mysql_aurora.2.07.1"
engine_mode = "serverless"
backup_retention_period = 7
storage_encrypted = true
iam_database_authentication_enabled = false
enable_http_endpoint = true
scaling_configuration {
min_capacity = 2
max_capacity = 256
auto_pause = true
}
lifecycle {
ignore_changes = [
availability_zones,
engine_version,
master_username,
master_password,
]
}
}
resource "aws_rds_cluster_parameter_group" "main" {
name = "cluster-pg"
family = "aurora-mysql5.7"
description = "RDS cluster parameter group"
parameter {
name = "character_set_server"
value = "utf8"
}
parameter {
name = "character_set_client"
value = "utf8"
}
parameter {
apply_method = "immediate"
name = "server_audit_events"
value = "QUERY"
}
parameter {
apply_method = "immediate"
name = "server_audit_logging"
value = "1"
}
parameter {
apply_method = "immediate"
name = "time_zone"
value = "Asia/Tokyo"
}
}
resource "random_password" "main" {
length = 16
special = true
override_special = "_!%^"
}
Contoh build Serverless v2 dengan Terraform
Di bawah ini adalah contoh kode Terraform untuk Aurora Serverless v2.
resource "aws_rds_cluster" "main" {
cluster_identifier = local.aurora_cluster_identifier
engine = "aurora-postgresql"
engine_version = "13.6"
engine_mode = "provisioned"
master_username = local.aurora_master_username
master_password = local.aurora_master_password
port = 5432
database_name = local.aurora_database_name
vpc_security_group_ids = [aws_security_group.aurora.id]
db_subnet_group_name = aws_db_subnet_group.main.name
db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.main.name
iam_database_authentication_enabled = true
serverlessv2_scaling_configuration {
min_capacity = 0.5
max_capacity = 1.0
}
skip_final_snapshot = true
apply_immediately = true
}
resource "aws_rds_cluster_instance" "main" {
cluster_identifier = aws_rds_cluster.main.id
identifier = "${local.aurora_cluster_identifier}-serverless-instance"
engine = aws_rds_cluster.main.engine
engine_version = aws_rds_cluster.main.engine_version
instance_class = "db.serverless"
db_subnet_group_name = aws_db_subnet_group.main.name
db_parameter_group_name = aws_db_parameter_group.main.name
monitoring_role_arn = aws_iam_role.aurora_monitoring.arn
monitoring_interval = 60
publicly_accessible = true
}
resource "aws_db_subnet_group" "main" {
name = local.db_subnet_group_name
subnet_ids = data.aws_subnet_ids.main.ids
}
resource "aws_rds_cluster_parameter_group" "main" {
name = local.cluster_parameter_group_name
family = "aurora-postgresql13"
}
resource "aws_db_parameter_group" "main" {
name = local.db_parameter_group_name
family = "aurora-postgresql13"
parameter {
apply_method = "pending-reboot"
name = "shared_preload_libraries"
value = "pg_stat_statements,pg_hint_plan"
}
}
Referensi