3

我使用 Api Gateway 和 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 服务器用户名密码以及默认发件人邮件等。

是否可以将此信息保存为类型 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();
    ...

提前致谢。

4

1 回答 1

5

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

幸运的是,字符串非常灵活,诀窍是将数据编组到字符串表示形式/从字符串表示形式中提取数据。

可能最明显的是使用 SSMStringList类型并要求字符串列表是有序的,例如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...,然后将每个列表项拆分=并相应地分配。

于 2018-10-29T11:45:58.557 回答