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

Я использую 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();
    ...

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

1 Ответ

0 голосов
/ 29 октября 2018

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

...