使用 Terraform 在 AWS Aurora V2 中部署 MySQL 8.0

Use Terraform to deploy MySQL 8.0 in AWS Aurora V2

我正在尝试使用 Terraform 使用 AWS Aurora V2 部署无服务器 MySQL 8.0 服务。

Terraform 详细信息(不是最新版本,但应与最新的 AWS 提供商版本兼容):

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

这是相关的 main.tf 文件:

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
  }
}

以上文件原本是使用Aurora V1的无服务器MySQL 5.7服务。我使用这些资源修改了现有的 main.tf 文件:

terraform plan 一切顺利。当 运行 terraform apply 时出现此错误:

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" {
│ 
╵

我无法从这个错误中推断出太多,我猜自从 AWS 提供商 v4.12.0 昨天发布以来,某些东西不支持这个。我认为它也可能是 Terraform 本身的版本,但同样,我相信 Terraform v0.15.4 与 AWS 提供商的 v4.12.0 兼容。

我的主要目标是将服务从 MySQL 5.7 无服务器切换到 MySQL 8.0 无服务器。

Aurora Serverless 2 的 engine_modeprovisioned,而不是 serverless

    engine_mode               = "provisioned"