Traffine I/O

Bahasa Indonesia

2022-10-02

Aurora Serverless v1 dan v2

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

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

https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html
https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/rds_cluster

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!