Хранилище параметров 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))
Они специально разработаны для группировки наборов данных.