1. Construa a imagem Docker (por exemplo, imagem de compilação nativa).
  2. Execute o contêiner em segundo plano.
  3. Copie o arquivo zip final do contêiner para o sistema de arquivos local do agente de build.
Bash


# Run the container in detached mode, giving it a name for reference
docker run -d --rm --name native-compile-container native-compile-image

# Copy the compiled zip file from the running container to the build agent's workspace
docker cp native-compile-container:/workspace/target/spring-serverless-function.zip./target/

Esse processo deixa você com um único arquivo spring-serverless-function.zip implantável, que pode então ser carregado em um repositório de artefatos.

Implantar com o AWS CDK

Com o artefato de implantação pronto, posso definir a função Lambda usando uma ferramenta de infraestrutura como código, como o AWS Cloud Development Kit (CDK). O código CDK aponta para o arquivo zip criado pelo pipeline e configura a função Lambda.

TypeScript


// Example CDK code for defining the Lambda function
import * as path from 'path';
import * as lambda from 'aws-cdk-lib/aws-lambda';

// Assuming 'this' is a CDK Stack context
const functionAssetDirectory = '/runtime/target/spring-serverless-function.zip';
const runtimeDir = path.join(__dirname, '..', functionAssetDirectory);

new lambda.Function(this, 'MyNativeLambda', {
  runtime: lambda.Runtime.PROVIDED_AL2023,
  code: lambda.Code.fromAsset(runtimeDir),
  handler: 'org.springframework.cloud.function.adapter.aws.FunctionInvoker::handleRequest',
  memorySize: 256,
  timeout: Duration.seconds(30),
  //... other configurations
});

Aqui, lambda.Runtime.PROVIDED_AL2023 especifica que estamos usando um tempo de execução personalizado. A propriedade code aponta para nosso arquivo zip. Crucialmente, o manipulador ainda está definido como FunctionInvoker genérico do Spring.