我有一个创建 AWS RDS 的 Terraform,aurora mysql,有没有办法在数据库上创建一个 table

I have a Terraform that creates a AWS RDS, aurora mysql, is there a way to create a table on the DB

我有一个创建 AWS RDS、aurora mysql 集群的 Terraform 脚本

module "cluster" {
  source  = "terraform-aws-modules/rds-aurora/aws"

  name           = var.cluster_name
  master_username = var.master_username
  master_password = var.master_password
  create_random_password = false
  database_name = var.database_name
  engine         = var.engine
  engine_version = var.engine_version
  instance_class = var.instance_class_r5
  instances = {
    one = {}
    2 = {
      instance_class = var.instance_class_r5_2
    }
  }

  vpc_id  = var.vpc_id
  subnets = ["subnet-XXXX", "subnet-XXXX", "subnet-XXXX"]

  allowed_security_groups = ["sg-XXXXXXXXXXXXXX"]
  allowed_cidr_blocks     = ["10.20.0.0/20", "144.121.18.66/32"]

  storage_encrypted   = true
  apply_immediately   = true
  monitoring_interval = 10

  db_parameter_group_name         = aws_db_parameter_group.credential.id
  db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.credential.id
  publicly_accessible = true

}

resource "aws_db_parameter_group" "credential" {
  name        = "${var.cluster_name}-aurora-db-57-parameter-group"
  family      = "aurora-mysql5.7"
  description = "${var.cluster_name}-aurora-db-57-parameter-group"
  tags        = var.tags_required
}

resource "aws_rds_cluster_parameter_group" "credential" {
  name        = "${var.cluster_name}-aurora-57-cluster-parameter-group"
  family      = "aurora-mysql5.7"
  description = "${var.cluster_name}-aurora-57-cluster-parameter-group"
  tags        = var.tags_required
} 

这将创建一个数据库 我正在使用 springboot,通常使用数据库,实体将创建 table

@Entity
@Table(name="credential")
public class CredentialEntity {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long credentialId;

在我的yml文件中我设置了

spring:
    hibernate:
      ddl-auto: update

但它不会创建 table。那么有没有一种方法可以创建 table 作为 terraform 脚本的一部分。

我不建议这样做,但如果您希望 Terraform 部署数据库结构,您可以尝试:

resource "null_resource" "db_setup" {
  depends_on = [module.db, aws_security_group.rds_main, aws_default_security_group.default]
  provisioner "local-exec" {
    command = "mysql --host=${module.cluster.cluster_endpoint} --port=${module.cluster.cluster_port} --user=${module.cluster.cluster_master_username} --password=${module.cluster.cluster_master_password} --database=${module.cluster.cluster_database_name} < ${file(${path.module}/init/db_structure.sql)}"
  }
}

(此代码段基于 this answer,其中您有更多示例)

请注意:Terraform 管理基础设施。当 AWS 提供商完成其工作时,您可以让 MySQL 提供商来获取和部署管理内容,例如用户、角色、授权等。但是数据库中的表属于应用程序。还有其他更适合管理数据库对象的工具。看看您是否可以将 Flyway or Liquibase 插入您的管道。