我在我的 nodejs 项目中使用了无服务器框架。在项目中我有服务的 yaml 定义。我想创建 RDS 数据库并传递密码和管理员名称。我正在使用 AWS System Manager (Paramter Store) 来保存这些凭证。在部署期间,我从参数存储下载此凭据,以通过我在 nodejs 中编写的脚本创建 rds
rds 实例的定义:
Resources:
DatabaseCluster:
Type: AWS::RDS::DBCluster
Properties:
DatabaseName: ${file(resources/rdsName.js)}
Engine: aurora
MasterUsername: ${file(resources/rdsUsername.js)}
MasterUserPassword: ${file(resources/rdsPassword.js)}
Port: "3306"
从参数存储中检索数据库密码的示例脚本:
const aws = require('aws-sdk');
const getrdsPassword = async stage => {
const ssm = new aws.SSM();
const params = {
Name: `RDSPassword-${stage}`,
WithDecryption: true,
};
const password = await ssm.getParameter(params).promise();
return password.Parameter.Value;
};
module.exports = serverless => {
const {
service: {
provider: { stage },
},
} = serverless;
return getrdsPassword('dev')
};
问题是,当第一次部署时,即创建整个堆栈时,我需要在参数存储中创建密码参数和数据库用户名。我想在我们进行部署时自动化,如果未创建特定参数,则会创建它们并将其保存在参数存储中。(我希望以后能够检索到这些数据以将程序插入数据库并查看数据,调试)
我认为我会编写一个脚本,并serverless-scriptable-plugin
在部署之前的帮助下运行一个脚本,检查参数控制器中是否存在部署所需的数据,如果不存在,它将创建它。但是浏览https://gist.github.com/HyperBrain/50d38027a8f57778d5b0f135d80ea406#file-lifecycle-cheat-sheet-md我想插入事件before: package: cleanup:
并在那里检查它,但不幸的是在部署无服务器框架时运行脚本之前给了我一个错误:
Parameter Not Found ------------------------------------
ParameterNotFound: null
我在其中使用脚本的 serverless.yml 文件的一部分:
custom:
stage: ${opt:stage, self:provider.stage}
service: ${opt:service, self:service}
scriptHooks:
before:package:cleanup:
- scripts/bootstrappingParameterStore.js
问题是是否有一个更早的事件我可以使用这个插件插入并开始检查参数 stora 并在它找不到我需要的数据时使用它?
或者,是否有任何其他更简单的方法来自动化第一次部署、使用密码创建 RDS 并稍后在某个地方手动获取这些数据?