amazon-web-services - 如何在 AWS CDK 部署期间运行非 CDK 代码
问题描述
我的 aws-app 有多个 AWS CDK 堆栈,其中这些堆栈也是 RDS。
我的目标是在实际部署我的软件之前执行在新配置的数据库中创建新数据库和表的代码。
问题是创建数据库和表的代码是在合成阶段执行的。
解决方案
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)来处理数据库表管理,以创建和管理数据库表。由于此配置与应用程序代码紧密耦合,因此将其纳入基础架构自动化很麻烦,并且基础架构进程和应用程序进程之间可能存在摩擦,因为必须在它们之间传递详细的数据库模式信息。
推荐阅读
- delphi - 使用 RAD Studio 自动化 IHTMLElement OnKeyUp 事件
- linux - 在linux中调用oom-killer时如何检查内存去了哪里
- excel - 使用函数获取变量的值(将变量从函数传递到子程序)
- javascript - 删除 :active 和 :focus 上的轮廓,但不删除 :focus 上的轮廓
- java - 在 Kotlin 中继续运行块
- python - 让“autobid”命令停止“auction”命令中的计时器?
- php - Google 登录 DomainException:OpenSSL 无法验证数据
- php - PHP会话销毁无法正常工作
- sql - SQL Server 日期时间未正确显示
- python - Python Turtle 窗口只弹出一秒钟