Хранилище параметров AWS Systems Manager: использование StringList в качестве пар значений ключей в Java (лямбда)

Я использую Api Gateway и AWS Lambda и AWS RDS для создания API. Мой код лямбда-функции - это Java. В настоящее время я успешно использую хранилище параметров AWS Systems Manager для подключения к моей базе данных. Поэтому я создал параметр с именем "соединение", который имеет тип String и содержит мой полный URL-адрес соединения. В лямбда-функциях я могу успешно получить доступ к этому параметру следующим образом:

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

Теперь мой вопрос: в других лямбда-функциях я хочу отправлять письма. Для этого я хочу сохранить 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();
    ...

Заранее спасибо.

2 ответа

Решение

По сути, параметры SSM всегда являются строками (документами). Являются ли они просто строкой, или зашифрованной строкой, или "списком", который действительно является строкой, в которой вы согласились использовать запятую в качестве разделителя для элементов.

К счастью, строки невероятно гибки, и задача состоит в том, чтобы упорядочить ваши данные в / из строкового представления.

Вероятно, наиболее очевидным является использование 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... а затем разделить каждый элемент списка по = и назначить соответственно.

Оформить заказ GetParametersByPath в Java SDK
[doco:] (https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ssm/SsmClient.html#getParametersByPath(software.amazon.awssdk.services.ssm.model.GetParametersByPathRequest))

Они специально разработаны для группировки наборов данных.

Другие вопросы по тегам