- Construa a imagem Docker (por exemplo, imagem de compilação nativa).
- Execute o contêiner em segundo plano.
- 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.
