首页 > 解决方案 > 如何在 AWS CDK 部署期间运行非 CDK 代码

问题描述

我的 aws-app 有多个 AWS CDK 堆栈,其中这些堆栈也是 RDS。

我的目标是在实际部署我的软件之前执行在新配置的数据库中创建新数据库和表的代码。

问题是创建数据库和表的代码是在合成阶段执行的。

标签: amazon-web-servicesamazon-rdsaws-cdk

解决方案


CDK 的工作原理是创建 cloudformation 模板,然后调用 cloudformation create-stack 或 update-stack api 让 cloudformation 服务根据堆栈模板创建、修改或删除资源。

您需要创建一个自定义资源,最简单的是一个可以连接到数据库并创建表的 aws lambda 函数。然后,您可以在堆栈定义中使用该自定义资源连接到您的 rds 服务器并运行所需的命令来创建数据库和用户、生成密码(并存储在 Secrets manager 中),并授予对正确数据库的权限。 https://docs.aws.amazon.com/cdk/api/latest/docs/custom-resources-readme.html描述了 CDK 如何帮助您创建自定义资源,然后在以后的 cdk 堆栈中调用它。

创建自定义资源来管理各种应用程序的数据库用户是有意义的。与用户一起,您希望创建他们应该有权访问的数据库和模式。

如果您之前没有创建过 aws lambda,那将是一次很棒的体验。IT 确实迫使您远离面向服务器的思维方式,这可以显着降低与 Web 服务创建和交付相关的成本和工作量。

您可能更喜欢使用数据库模式管理实用程序(如 liquibase 或应用程序框架的 ORM)来处理数据库管理,以创建和管理数据库表。由于此配置与应用程序代码紧密耦合,因此将其纳入基础架构自动化很麻烦,并且基础架构进程和应用程序进程之间可能存在摩擦,因为必须在它们之间传递详细的数据库模式信息。


推荐阅读