Обновление учетных данных базы данных Micronaut из обработчика лямбда
Есть ли способ обновить учетные данные базы данных после инициализации контейнера (из функции обработчика)? Мне нужно прочитать пароль базы данных из диспетчера секретов AWS и обновить источник данных. Но когда я делаю это из конструктора StreamLambdaHandler, время инициализации превышает лимит (~10 с).
public class StreamLambdaHandler implements RequestStreamHandler {
private static Logger log = LoggerFactory.getLogger(Application.class);
private static MicronautLambdaContainerHandler handler; // <1>
DBCredentialService dbCredentialService;
ApplicationContextBuilder builder;
public StreamLambdaHandler() {
try {
log.info("********ContainerInitialization**************");
this.dbCredentialService = new DBCredentialService();
// Get database credential properties from secrets manager
Map<String, Object> props = this.dbCredentialService.getDbCredential();
// Update the datasource properties
// E.g. "datasources.default.password", "sample_password"
builder = ApplicationContext.build().properties(props);
handler = new MicronautLambdaContainerHandler(builder);
} catch (Exception e) {
log.info("ContainerInitializationException " + e.getMessage());
// if we fail here. We re-throw the exception to force another cold start
e.printStackTrace();
throw new RuntimeException("Could not initialize Micronaut", e);
}
}
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context)
throws IOException {
this.log.info("Starting handler.proxyStream");
handler.proxyStream(inputStream, outputStream, context); // <2>
}
}