我有一个创建 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 插入您的管道。
我有一个创建 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 插入您的管道。