我有三种不同的应用程序环境:生产,演示和开发。在每个中,我都有一个运行MySQL的RDS实例。我有五个表可以容纳所有环境中需要相同的数据。我正试图找到一种方法来处理这个问题。
出于安全考虑,最好不允许demo和dev访问生产数据库,因此将数据放在那里似乎是一个坏主意。
所有环境都需要读/写功能。对此有一个很好的解决方案吗?
非常感谢。
答案 0 :(得分:1)
出于安全考虑,最好不允许demo和dev访问生产数据库,因此将数据放在那里似乎是一个坏主意。
同意。不要让您的演示/开发环境访问生产环境中的数据。
我不了解您的业务逻辑,但我无法想到开发/演示数据需要同步的情况"使用生产数据,除非开发/演示环境也依赖于其他生产资产"。如果是这种情况,我建议将这些数据复制到您的其他环境中。
通常,数据库中的数据取决于其中包含的环境。
为了最好的安全性和关注点分离,请尽可能地隔离您的环境。这包括(但不限于):
如果需要同步数据,请创建一个脚本/程序以完全执行该同步(db +所有必需的资产)。但这样做是正常开发管道的一部分,所以它通过dev + testing + qa等。
答案 1 :(得分:0)
因此,关于RDS和数据库级别访问的问题是,您仍然可以像管理本地一样管理用户凭据。从AWS的角度来看,允许访问所需要做的就是更新Mysql RDS实例的安全组以允许流量,然后为您的应用程序提供为其配置的凭据。 我同意为您的开发或演示环境提供生产级访问权限是不好的做法。
就数据相同而言,您可以自动生成Production数据库的夜间快照,并根据该数据重新创建新实例。如果您的基础架构处于Cloudformation或Terraform,您可以提供在快照中创建的新端点,并启动新的DEV或DEMO环境。
Amazon RDS创建数据库实例的存储卷快照,备份整个数据库实例,而不仅仅是单个数据库。您可以通过从此数据库快照还原来创建数据库实例。还原数据库实例时,提供要还原的数据库快照的名称,然后提供从还原创建的新数据库实例的名称。您无法从数据库快照还原到现有数据库实例;恢复时会创建一个新的数据库实例。
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html
答案 2 :(得分:0)
我建议在数据捕获时使用扇出系统以及快照。
采取快照(即现在),从中启动测试/开发数据库,然后使用SQS-> SNS-> SQS扇出架构将数据的任何新更改推送到您的其他数据库?