【问题标题】:AWS Systems Manager Parameter Store: Using StringList as Key Value Pairs in Java (Lambda)AWS Systems Manager Parameter Store:在 Java (Lambda) 中使用 StringList 作为键值对
【发布时间】:2019-04-02 07:21:35
【问题描述】:

我正在使用 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-Server用户名密码默认发件人邮件 等等开。

是否可以将此信息保存为类型字符串列表,如键/值对(映射)? 这样的事情是可能的:

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

提前致谢。

【问题讨论】:

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


    【解决方案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...,然后将每个列表项按= 拆分并进行相应分配。

    【讨论】:

    • 好的,我明白了。但是将数据保存为 org.json.JSONObject 不是更好吗?这样,当我的数据包含“,”时,我不会有问题......
    • 好吧-正如我所提到的,您可以根据需要将其反序列化到字符串/从字符串中反序列化。使用逗号分隔列表的唯一优点是 SSM Web 控制台理解 StringList 是一个东西,因此在 AWS SSM 控制台中编辑更容易,而不是使用 json &c ,它只会显示为 json 字符串。跨度>
    • n.b.特别是对于逗号值问题,CSV 是一种正确的格式,并且有 java 序列化程序可以处理使用引号 &c 来根据规范转义内部逗号。
    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 2020-07-01
    • 2023-01-26
    • 2020-08-22
    • 2020-11-23
    • 2022-10-09
    • 1970-01-01
    • 2020-04-22
    相关资源
    最近更新 更多