如何仅在预置 AWS RDS 实例后创建用户和数据库?
Posted
技术标签:
【中文标题】如何仅在预置 AWS RDS 实例后创建用户和数据库?【英文标题】:How do I create a user and database only after an AWS RDS instance is provisioned? 【发布时间】: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/…
【参考方案1】:
我在 GitHub Issue 的 postgres 提供程序存储库中询问了这个问题,维护人员能够为此提供解决方法 - 如果您在提供程序配置中指定 expected_version
,它不会尝试连接,直到资源实际上使用了连接。
这意味着资源的依赖行为可用于阻止连接,直到 Terraform 完成 RDS 资源的设置。这似乎适用于plan
情况和apply
情况。
【讨论】:
以上是关于如何仅在预置 AWS RDS 实例后创建用户和数据库?的主要内容,如果未能解决你的问题,请参考以下文章
AWS CloudFormation - 在 RDS 实例就绪后创建表?
如何在 aws Secrets Manager 服务中管理 aws RDS(由 cloudformation 创建)的主用户凭证?