最佳实践:如何使用Terraform通过CI创建自定义MySQL(RDS)用户?

5

我目前已经在VPC的私有子网中创建了RDS实例。现在,我想要创建一个带有一些权限和授权的用户。为此,我正在使用TF中的mysql_usermysql_grants资源类型。由于我的实例位于私有子网中,无法将TF代码作为CI管道的一部分执行以创建Mysql用户和授权。

据我所知,我有两个选择:

  1. 不对用户和授权进行terraform。而是通过堡垒主机登录到RDS实例,并手动创建用户。

  2. 在公共子网(具有公共子网的db子网)中创建RDS实例。然后使用TF创建用户和授权。修改完db实例后再将其移至私有子网中。

我更倾向于选择第二种方法,因为所有内容都是代码可重复的。但我想知道是否有更好的方法来实现这一点。

1个回答

2
我们曾经遇到过类似的情况。第二种情况听起来很不错,直到你意识到你正在描述Terraform中的状态,这样的事情很难轻易地表达出来。此外,如果您以后需要添加更多用户,则暂时使数据库对外界可访问并不理想。

我们的解决方案是使用Liquibase(我们已经在使用数据库迁移时使用了该工具,但任何类似的工具都可以)来创建用户和授权。

我们在Kubernetes上运行,因此我可以通过Terraform创建一个Kubernetes Job来触发Liquibase并执行用户创建,但是您的情况可能也有类似的解决方案。Terraform支持remote-exec provisioner来触发远程主机上的作业,这可以用于在跳板主机上触发作业。


感谢您的回答。我没有使用K8s,而是主要使用Fargate。但是,我可以在私有子网中拥有一个Fargate任务或Lambda函数,并创建模式和用户。谢谢。 - Vino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接