如何在 AWS CDK 部署期间 运行 非 CDK 代码

How to run non CDK code during an AWS CDK deployment

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

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

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

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

您需要创建一个 自定义资源 ,最简单的是一个可以连接到数据库并创建 table 的 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 来处理数据库 table 管理,以创建和管理数据库 table秒。由于此配置与应用程序代码紧密耦合,将其纳入基础架构自动化非常麻烦,并且基础架构进程和应用程序进程之间可能存在摩擦,因为必须在它们之间传递详细的数据库架构信息。