Предоставить лямбда-контекст для ресурса Джерси - PullRequest
2 голосов
/ 19 июня 2019

Я использую aws-serverless-java-container , чтобы обернуть сервис Джерси в AWS Lambda.Я решил использовать псевдоним функции, чтобы иметь этапы «test» и «prod», которые в конечном итоге указывают на разные версии лямбда-функции.

Мне нужно выбрать некоторые свойства в файле .properties на основе этого псевдонима,в основном потому, что мне нужно поговорить с «тестовой» или «продвинутой» БД или использовать другую конечную точку для вызова внешнего веб-сервиса.

Для этой цели мне нужно вызвать метод getInvokedFunctionArn объекта контекста .К сожалению, ресурс Джерси по умолчанию не знает о таком контексте.

Ниже примера ресурса:

@Path("/pet")
public class PetResource {

    @POST
    @Path("/")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.WILDCARD)
    public Response createPet() {
        // how to call getInvokedFunctionArn from Lambda context object?
        return Response.status(200).entity("{'result': 'success'}").build();
    }
}

Как я могу разрешить ресурсу Джерси иметь вызываемый ARN?Могу ли я ввести его?

Лямбда-обработчик определяется как:

public class PetLambdaHandler implements RequestStreamHandler {

    private static final ResourceConfig jerseyApplication = new ResourceConfig().register(PetResource.class)
            .register(JacksonFeature.class);

    private static final JerseyLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler = JerseyLambdaContainerHandler
            .getAwsProxyHandler(jerseyApplication);

    @Override
    public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
        handler.proxyStream(inputStream, outputStream, context);
    }
}

1 Ответ

0 голосов
/ 23 июня 2019

Вы можете добавить контекст в ресурсы джерси, используя Профиль Spring

Определить для профилей тестирования и расширения различные методы / объекты

Если у вас нет Spring, выможете проверить интеграция джерси

модуль jersey-spring4, который будет служить мостом интеграции для Спринг и Джерси.

См. полный пример в github aws-serverless-java-container библиотека, запускающая приложение Spring с профилями в AWS Lambda

Существует два способа активации профилей Spring (как определено с помощью аннотации @Profile).Мы рекомендуем использовать статический инициализатор, который получает список профилей.Инфраструктура Serverless Java Container заботится о настройке профиля и немедленной инициализации приложения.

public class StreamLambdaHandler implements RequestStreamHandler {
    private static SpringLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler;
    static {
        try {
            AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
            applicationContext.register(PetStoreSpringAppConfig.class);
            handler = SpringLambdaContainerHandler.getAwsProxyHandler(applicationContext, "profile-1", "profile-2");
...