【问题标题】:How do I create a user and database only after an AWS RDS instance is provisioned?如何仅在预置 AWS RDS 实例后创建用户和数据库?
【发布时间】:2020-01-03 02:29:03
【问题描述】:

关于如何在创建数据库或用户之前等待 AWS RDS 数据库主机配置好有什么建议吗?为此,我尝试使用 depends_on 参数,以便它等待首先配置 RDS 数据库。提供者似乎无法等待资源。

运行时出现以下错误:

提供者参数名称“depends_on”保留供 Terraform 在未来版本中使用。

--- Terraform 计划片段----

# Provision AWS PostgreSQL Dev Database
resource "aws_db_instance" "dev_db" {
    identifier = "dev"
    allocated_storage    = 100
    storage_type         = "gp2"
    engine               = "postgres"
    engine_version       = "10.9"
    port                 = 1433
    instance_class       = "db.t3.medium"
    name                 = "dev"
    username             = "dev"
    password             = "mydevpassword"
    parameter_group_name = "postgress10"
    tags = {
        Name = "dev"
    }
    skip_final_snapshot = true
}
# Setup PostgreSQL Provider After RDS Database is Provisioned
provider "postgresql" {
    host            = "${aws_db_instance.dev_db.address}"
    port            = 1433
    username        = "dev"
    password        = "mydevpassword"
    depends_on      = [aws_db_instance.dev_db]
}
# Create App User
resource "postgresql_role" "application_role" {
    name                = "dev_appuser"
    login               = true
    password            = "myappuserpassword"
    encrypted_password  = true
    depends_on          = [aws_db_instance.dev_db]
}
# Create Database 
resource "postgresql_database" "dev_db" {
    name              = "mydatabase1"
    owner             = "dev"
    template          = "template0"
    lc_collate        = "C"
    connection_limit  = -1
    allow_connections = true
    depends_on        = [aws_db_instance.dev_db]
}

【问题讨论】:

  • depends_on 应该是一个列表,例如:depends_on = [aws_db_instance.dev_db]
  • 谢谢!现在我遇到了一个问题,告诉提供者连接要等到配置数据库。似乎depends_on 不是为提供者设计的,或者在Terraform 中尚不可用。我收到此错误“提供程序参数名称“depends_on”已保留供 Terraform 在未来版本中使用。” Terraform v0.12.7 + provider.aws v2.25.0 + provider.postgresql v1.1.0
  • Terraform 隐式处理大多数依赖项。如果你完全省略depends_on,你还有问题吗?
  • 我试过了。 Posgress 提供者似乎试图在数据库准备好之前建立连接。 "Error: Error initializing PostgreSQL client: error detection capabilities: error PostgreSQL version: dial tcp 172.31.68.174:1433: connectex: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接主机没有响应。”
  • 我明白了。您似乎遇到了这个问题:github.com/terraform-providers/terraform-provider-postgresql/…

标签: terraform


【解决方案1】:

我在 GitHub Issue 的 postgres 提供程序存储库中询问了这个问题,维护人员能够为此提供解决方法 - 如果您在提供程序配置中指定 expected_version,它不会尝试连接,直到资源实际上使用了连接。

这意味着资源的依赖行为可用于阻止连接,直到 Terraform 完成 RDS 资源的设置。这似乎适用于plan 情况和apply 情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-25
    • 2019-03-03
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2021-10-11
    • 2013-02-18
    • 1970-01-01
    相关资源
    最近更新 更多