AWS Systems Manager参数存储:在Java(Lambda)中使用StringList作为键值对

时间:2018-10-29 11:06:37

标签: java amazon-web-services aws-lambda aws-ssm

我使用Api Gateway,AWS Lambda和AWS RDS构建API。 我的Lambda功能代码是Java。 当前,我正在成功使用AWS Systems Manager参数存储连接到我的数据库。 因此,我创建了一个名为“ 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服务器用户名密码默认发件人邮件,等等上。

是否可以将该信息另存为StringList类型(如键/值对(映射))? 这样的事情是可能的:

    //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();
    ...

谢谢。

1 个答案:

答案 0 :(得分:1)

从根本上说,SSM参数始终是字符串(docs)。无论是 字符串,还是加密的字符串,或者是“列表”,它实际上是一个您同意使用逗号作为项目分隔符的字符串。

幸运的是,字符串非常灵活,其窍门是将数据与字符串表示形式进行封送处理。

最明显的可能是使用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编组可能是更可取的,因为它在界面中是用户可编辑的。但是,您可能希望扩展格式,使其在排序方面更为明确,例如smtp=smtp_value,username=username_value...,然后将每个列表项除以=并进行相应分配。