如何使用HTTP API Gateway的最新部署(附代码示例)

72 阅读1分钟

要使用最新的AWS Lambda部署与HTTP API Gateway(或REST API Gateway):


import software.amazon.awscdk.services.apigatewayv2.alpha.HttpApi;
import software.amazon.awscdk.services.apigatewayv2.integrations.alpha.HttpLambdaIntegration;
//...
void integrateWithHTTPApiGateway(IFunction function) {
    var lambdaIntegration = HttpLambdaIntegration.Builder.create("HttpApiGatewayIntegration", function).build();
    var httpApiGateway = HttpApi.Builder.create(this, "HttpApiGatewayIntegration")
        .defaultIntegration(lambdaIntegration).build();
    var url = httpApiGateway.getUrl();
    CfnOutput.Builder.create(this, "HttpApiGatewayUrlOutput").value(url).build();
}

......配置了配置并发,除了版本之外,还需要创建一个别名function.addAlias("XYZ"); (这个方便的方法是在CDKv2.23.0中引入的),并使用函数实例进行整合:


        
import software.amazon.awscdk.Duration;
import software.amazon.awscdk.services.lambda.Architecture;
import software.amazon.awscdk.services.lambda.Code;
import software.amazon.awscdk.services.lambda.Function;
import software.amazon.awscdk.services.lambda.Runtime;
import software.amazon.awscdk.services.lambda.Version;
import software.constructs.Construct;

public class QuarkusLambda extends Construct {

    static String lambdaHandler = "io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest";
    static int memory = 1024; // ~0.5 vCPU
    static int provisionedConcurrency = 1;
    static int timeout = 10;
    Function function;

    public QuarkusLambda(Construct scope, String functionName) {
        super(scope, "QuarkusLambda");
        this.function = createFunction(functionName, lambdaHandler, memory, timeout);
        
        Version.Builder.create(this, "ProvisionedConcurrencyVersion")
                .lambda(function)
                .provisionedConcurrentExecutions(provisionedConcurrency)
                .build();
        function.addAlias("recent");
        integrateWithHTTPApiGateway(function);
        
    }

    Function createFunction(String functionName, String functionHandler, int memory, int timeout) {
        return Function.Builder.create(this, functionName)
                .runtime(Runtime.JAVA_11)
                .architecture(Architecture.ARM_64)
                .code(Code.fromAsset("../lambda/target/function.zip"))
                .handler(functionHandler)
                .memorySize(memory)
                .functionName(functionName)
                .timeout(Duration.seconds(timeout))
                .build();
    }

}

该代码是基于quarkus AWS Lambda模板