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

mjd*_*mjd 4 java amazon-web-services aws-lambda aws-ssm

我使用 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();
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:在其他 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();
    ...
Run Code Online (Sandbox Code Playgroud)

提前致谢。

tho*_*ace 6

从根本上来说,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];
Run Code Online (Sandbox Code Playgroud)

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