Skip to content

Commit f8cebbb

Browse files
timyatessdelamorenovate[bot]graemerocher
authored
Migrate Lambda to use servlet core (#1650)
- It updates to the latest milestones - It deletes CDK module (it will be moved to starter). - It moves away from [AWS Serverless Java Container](https://github.com/awslabs/aws-serverless-java-container). It use servlet core. - It supports both payload versions v1 and v2. - Handlers use standard [AWS Lambda Java Events](https://github.com/aws/aws-lambda-java-libs/tree/main/aws-lambda-java-events) POJOs. - TCK passes almost complety. - There is some work still to do in the the proxy-test. Several tests don't pass. --------- Co-authored-by: Sergio del Amo <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Graeme Rocher <[email protected]>
1 parent c824ea0 commit f8cebbb

File tree

158 files changed

+4182
-6854
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

158 files changed

+4182
-6854
lines changed

aws-apigateway/src/main/java/io/micronaut/aws/apigateway/HttpRequestStageResolver.java

+13-6
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515
*/
1616
package io.micronaut.aws.apigateway;
1717

18-
import com.amazonaws.serverless.proxy.RequestReader;
19-
import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext;
18+
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
19+
import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent;
2020
import io.micronaut.context.annotation.Requires;
2121
import io.micronaut.core.annotation.NonNull;
2222
import io.micronaut.http.HttpRequest;
23+
import io.micronaut.servlet.http.ServletHttpRequest;
2324
import jakarta.inject.Singleton;
2425

2526
import java.util.Optional;
@@ -29,14 +30,20 @@
2930
* @author Sergio del Amo
3031
* @since 3.10.0
3132
*/
32-
@Requires(classes = {AwsProxyRequestContext.class, RequestReader.class, HttpRequest.class})
33+
@Requires(classes = {ServletHttpRequest.class, HttpRequest.class})
3334
@Singleton
3435
public class HttpRequestStageResolver implements StageResolver<HttpRequest<?>> {
3536
@Override
3637
@NonNull
3738
public Optional<String> resolve(@NonNull HttpRequest<?> request) {
38-
return Optional.of(request)
39-
.flatMap(req -> req.getAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY, AwsProxyRequestContext.class))
40-
.map(AwsProxyRequestContext::getStage);
39+
if (request instanceof ServletHttpRequest servletHttpRequest) {
40+
Object nativeRequest = servletHttpRequest.getNativeRequest();
41+
if (nativeRequest instanceof APIGatewayV2HTTPEvent aPIGatewayV2HTTPEvent) {
42+
return Optional.of(aPIGatewayV2HTTPEvent.getRequestContext().getStage());
43+
} else if (nativeRequest instanceof APIGatewayProxyRequestEvent apiGatewayProxyRequestEvent) {
44+
return Optional.of(apiGatewayProxyRequestEvent.getRequestContext().getStage());
45+
}
46+
}
47+
return Optional.empty();
4148
}
4249
}

aws-apigateway/src/test/groovy/io/micronaut/aws/apigateway/HttpRequestStageResolverSpec.groovy

+25-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,39 @@
11
package io.micronaut.aws.apigateway
22

3-
import com.amazonaws.serverless.proxy.RequestReader
4-
import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext
5-
import io.micronaut.http.HttpRequest
3+
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent
4+
import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent
5+
import io.micronaut.servlet.http.ServletHttpRequest
66
import spock.lang.Specification
77

88
class HttpRequestStageResolverSpec extends Specification {
99

1010
void "resolve stage from HttpRequest"() {
1111
given:
1212
HttpRequestStageResolver resolver = new HttpRequestStageResolver()
13-
def context = Stub(AwsProxyRequestContext) {
13+
def requestContextStub = Stub(APIGatewayV2HTTPEvent.RequestContext) {
1414
getStage() >> 'foo'
1515
}
16-
def request = Stub(HttpRequest) {
17-
getAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY, AwsProxyRequestContext.class) >> Optional.of(context)
16+
def proxyRequestStub = Stub(APIGatewayV2HTTPEvent) {
17+
getRequestContext() >> requestContextStub
18+
}
19+
def request = Stub(ServletHttpRequest) {
20+
getNativeRequest() >> proxyRequestStub
21+
}
22+
expect:
23+
'foo' == resolver.resolve(request).get()
24+
}
25+
26+
void "resolve stage from HttpRequest"() {
27+
given:
28+
HttpRequestStageResolver resolver = new HttpRequestStageResolver()
29+
def requestContextStub = Stub(APIGatewayProxyRequestEvent.ProxyRequestContext) {
30+
getStage() >> 'foo'
31+
}
32+
def proxyRequestStub = Stub(APIGatewayProxyRequestEvent) {
33+
getRequestContext() >> requestContextStub
34+
}
35+
def request = Stub(ServletHttpRequest) {
36+
getNativeRequest() >> proxyRequestStub
1837
}
1938
expect:
2039
'foo' == resolver.resolve(request).get()

aws-bom/build.gradle.kts

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
plugins {
22
id("io.micronaut.build.internal.bom")
33
}
4+
5+
micronautBom {
6+
suppressions {
7+
acceptedVersionRegressions.add("aws-serverless-core") // removed for 4.0.0
8+
acceptedLibraryRegressions.add("aws-serverless-core") // removed for 4.0.0
9+
acceptedLibraryRegressions.add("micronaut-aws-cdk") // moved to starter for 4.0.0
10+
}
11+
}

aws-cdk/build.gradle.kts

-12
This file was deleted.

aws-cdk/src/main/java/io/micronaut/aws/cdk/function/MicronautFunction.java

-64
This file was deleted.

aws-cdk/src/main/java/io/micronaut/aws/cdk/function/MicronautFunctionFile.java

-188
This file was deleted.

aws-cdk/src/main/java/io/micronaut/aws/cdk/function/package-info.java

-21
This file was deleted.

0 commit comments

Comments
 (0)