使用 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
文件:
- GitHub 问题:https://github.com/hashicorp/terraform-provider-aws/issues/24349
aws_rds_cluster
的 Terraform 文档
aws_rds_cluster_instance
的 Terraform 文档
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_mode
是 provisioned
,而不是 serverless
。
engine_mode = "provisioned"
我正在尝试使用 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
文件:
- GitHub 问题:https://github.com/hashicorp/terraform-provider-aws/issues/24349
aws_rds_cluster
的 Terraform 文档
aws_rds_cluster_instance
的 Terraform 文档
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_mode
是 provisioned
,而不是 serverless
。
engine_mode = "provisioned"