Question:
I’m attempting to deploy a serverless MySQL 8.0 service using AWS Aurora V2 using Terraform.
Terraform details (not on latest version, but should be compatible with latest AWS provider version):
1 2 3 4 5 6 7 8 |
Terraform v0.15.4 on linux_amd64 + provider registry.terraform.io/hashicorp/aws v4.12.0 + provider registry.terraform.io/hashicorp/consul v2.15.1 + provider registry.terraform.io/hashicorp/random v3.1.3 + provider registry.terraform.io/hashicorp/template v2.2.0 + provider registry.terraform.io/hashicorp/vault v3.5.0 |
Here’s the relevant main.tf
file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
resource "aws_rds_cluster" "database" { cluster_identifier = var.cluster_identifier db_subnet_group_name = aws_db_subnet_group.db_subnet_group.name vpc_security_group_ids = var.vpc_security_group_ids engine_mode = "serverless" enable_http_endpoint = var.enable_http_endpoint master_username = var.master_username master_password = random_password.rng.result database_name = var.name backup_retention_period = var.backup_retention_period skip_final_snapshot = var.skip_final_snapshot deletion_protection = var.deletion_protection engine = "aurora-mysql" engine_version = "8.0.mysql_aurora.3.02.0" serverlessv2_scaling_configuration { max_capacity = var.max_capacity min_capacity = var.min_capacity } lifecycle { ignore_changes = [ engine_version, availability_zones, master_username, master_password, ] } tags = { Environment = var.env Name = var.name } } resource "aws_rds_cluster_instance" "cluster_instances" { identifier = "${var.cluster_identifier}-serverless" cluster_identifier = aws_rds_cluster.database.id instance_class = "db.serverless" engine = aws_rds_cluster.database.engine engine_version = aws_rds_cluster.database.engine_version } resource "aws_db_subnet_group" "db_subnet_group" { name = "${var.cluster_identifier}-subnet-group" subnet_ids = var.subnet_ids tags = { Environment = var.env } } resource "random_password" "rng" { length = 16 special = false keepers = { cluster_identifier = var.cluster_identifier } } |
The above file was originally a serverless MySQL 5.7 service using Aurora V1. I modified this existing main.tf
file using these resources:
- GitHub issue: https://github.com/hashicorp/terraform-provider-aws/issues/24349
- Terraform docs for
aws_rds_cluster
- Terraform docs for
aws_rds_cluster_instance
The terraform plan
goes fine. When running terraform apply
this error is present:
1 2 3 4 5 6 7 8 9 10 11 |
module.aurora.aws_rds_cluster.database: Creating... ╷ │ Error: error creating RDS cluster: InvalidParameterValue: The engine mode serverless you requested is currently unavailable. │ status code: 400, request id: 060f8bce-4bc4-4462-9735-78495ecaf308 │ │ with module.aurora.aws_rds_cluster.database, │ on modules/aws/rds/main.tf line 1, in resource "aws_rds_cluster" "database": │ 1: resource "aws_rds_cluster" "database" { │ ╵ |
I can’t infer much from this error, I’m guessing something isn’t supporting this since the AWS provider v4.12.0
was released yesterday. I assume it could also be the version of Terraform itself, but again, I believe Terraform v0.15.4 is compatible with the v4.12.0 of the AWS provider.
My main goal is to switch the service from MySQL 5.7 serverless to MySQL 8.0 serverless.
Answer:
The engine_mode
for Aurora Serverless 2 is provisioned
, not serverless
.
1 2 |
engine_mode = "provisioned" |