Terraform两个PostgreSQL数据库设置

时间:2019-06-19 05:09:14

标签: amazon-web-services microservices terraform

我对Teraform脚本非常陌生。 我们的系统在AWS上运行,并且我们有一个由多个微服务访问的数据库服务器实例。

每个需要保留一些数据的微服务都需要指向同一数据库服务器上的不同数据库(架构)。我们希望每个服务都具有自己的架构,以使服务完全相互分离。但是,创建一个单独的数据库实例来实现这一点可能会有点过多,因为某些服务几乎无法持久存在,因此很浪费,

我在所有微服务都通用的 services.tf 脚本中创建了PostgreSQL资源:

resource "aws_db_instance" "my-system" {
  identifier_prefix       = "${var.resource_name_prefix}-tlm-"
  engine                  = "postgres"
  allocated_storage       = "${var.database_storage_size}"
  storage_type            = "${var.database_storage_type}"
  storage_encrypted       = true
  skip_final_snapshot     = true
  instance_class          = "${var.database_instance_type}"
  availability_zone       = "${data.aws_availability_zones.all.names[0]}"
  db_subnet_group_name    = "${aws_db_subnet_group.default.name}"
  vpc_security_group_ids  = "${var.security_group_ids}"
  backup_retention_period = "${var.database_retention_period}"
  backup_window           = "15:00-18:00"     // UTC
  maintenance_window      = "sat:19:00-sat:20:00" // UTC

  tags = "${var.tags}"
}

现在我希望为service-1和service-2创建corespondent数据库名称。我认为以下内容不正确,我只是添加它以使您对我要实现的目标有所了解。

因此 service-1.tf 将包含:

resource "aws_db_instance" "my-system" {
  name                    = "service_1"
}

service-2.tf 将包含:

resource "aws_db_instance" "my-system" {
  name                    = "service_2"
}

我的问题是,应该在service-1.tf和service-2.tf中放入什么以使之成为可能。

预先感谢您的输入。

2 个答案:

答案 0 :(得分:1)

Terraform只能在RDS实例级别进行管理。配置架构等是DBA的任务。

一种自动执行DBA任务的方法是,使用 local-exec 提供程序创建一个 null_resource ,以使用postgres客户端来完成工作。

答案 1 :(得分:0)

您只能使用count来管理一个tf文件

resource "aws_db_instance" "my-system" {
  count                   = "2"
  name                    = "service_${count.index}"
  identifier_prefix       = "${var.resource_name_prefix}-tlm-"
  engine                  = "postgres"
  allocated_storage       = "${var.database_storage_size}"
  storage_type            = "${var.database_storage_type}"
  storage_encrypted       = true
  skip_final_snapshot     = true
  instance_class          = "${var.database_instance_type}"
  availability_zone       = "${data.aws_availability_zones.all.names[0]}"
  db_subnet_group_name    = "${aws_db_subnet_group.default.name}"
  vpc_security_group_ids  = "${var.security_group_ids}"
  backup_retention_period = "${var.database_retention_period}"
  backup_window           = "15:00-18:00"     // UTC
  maintenance_window      = "sat:19:00-sat:20:00" // UTC

  tags = "${var.tags}"
}