AWS Systems Manager Parameter Store:在 Java (Lambda) 中使用 StringList 作为键值对

AWS Systems Manager Parameter Store: Using StringList as Key Value Pairs in Java (Lambda)

我正在使用 Api 网关和 AWS Lambda 以及 AWS RDS 构建一个 API。 我的 Lambda 函数代码是 Java。 目前我正在使用 AWS Systems Manager Parameter Store 成功连接到我的数据库。 因此,我创建了一个名为 "connection" 的参数,它的类型为 String 并包含我的完整连接 url。 在 Lambda 函数中,我可以通过这种方式成功访问此参数:

GetParameterRequest parameterRequest = new GetParameterRequest().withName("connection").withWithDecryption(false);
        AWSSimpleSystemsManagement ssmclient = AWSSimpleSystemsManagementClientBuilder.defaultClient();
        GetParameterResult parameterResult = ssmclient.getParameter(parameterRequest);
        String url = parameterResult.getParameter().getValue();

现在我的问题是: 在其他 lambda 函数中,我想发送邮件。因此我想保存 SMTP-Serverusernamepassword默认发件人邮件等等。

是否可以将此信息保存为类型 StringList,如 Key/Value 对(地图)? 这样的事情是可能的:

    //Get StringList
    GetParameterRequest parameterRequest = new GetParameterRequest().withName("mailInfo").withWithDecryption(false);
    AWSSimpleSystemsManagement ssmclient = AWSSimpleSystemsManagementClientBuilder.defaultClient();
        GetParameterResult parameterResult = ssmclient.getParameter(parameterRequest);
    //Get values from the list
    String smtp_server = parameterResult.getParameter("smtp").getValue();
    String to_mail = parameterResult.getParameter("defaultToMail").getValue();
    ...

提前致谢。

基本上 SSM 参数总是字符串 (docs)。无论它们是 只是 一个字符串,还是一个加密的字符串,或者 "list" 这实际上是您同意使用逗号作为项目分隔符的字符串。

幸运的是字符串非常灵活,诀窍是将数据编组 to/from 字符串表示。

可能最明显的是使用 SSM StringList 类型并要求字符串列表是有序的,例如 mailInfo = smpt,username,password,defaultToMail。此时您可以进行自己的编组:

GetParameterRequest parameterRequest = new GetParameterRequest().withName("mailInfo").withWithDecryption(false);
AWSSimpleSystemsManagement ssmclient = AWSSimpleSystemsManagementClientBuilder.defaultClient();
GetParameterResult parameterResult = ssmclient.getParameter(parameterRequest);
String mailInfo = parameterResult.getParameter().getValue();

String[] params = mailInfo.split(",");
String stmp = params[0];
String username = params[1];
String password = params[2];
String defaultToMail = params[3];

编组 StringList 可能优于其他选项(例如序列化 class 并保存结果),因为它是用户可在界面中编辑的。但是,您可能希望扩展格式以明确说明顺序,例如smtp=smtp_value,username=username_value... 然后按 = 拆分每个列表项并相应分配。