Creación de funciones de Lambda con versiones ejecutables personalizadas en AWS SAM
Puedes usar el comando sam build para crear los tiempos de ejecución personalizados necesarios para la función de Lambda. Para declarar que la función de Lambda utilizarás un tiempo de ejecución personalizado, especifique Runtime: provided para la función.
Para crear un tiempo de ejecución personalizado, declare el atributo de recurso Metadata con una entrada BuildMethod: makefile. Proporcione el archivo Make personalizado, en el que se declara el destino de compilación del formulario build- que contienes los comandos de compilación para su tiempo de ejecución. El archivo Make se encarga de compilar el tiempo de ejecución personalizado, si es necesario, y de copiar los artefactos de compilación en la ubicación adecuada para los pasos posteriores del flujo de trabajo. La ubicación del archivo Make viene especificada por la propiedad function-logical-idCodeUri del recurso de la función y debes llamarse Makefile.
Ejemplos
Ejemplo 1: tiempo de ejecución personalizado para una función escrita en Rust
nota
Recomendamos crear funciones de Lambda con Cargo Lambda. Para obtener más información, consulta Creación de funciones de Lambda de Rust con Cargo Lambda en AWS SAM.
La siguiente plantilla de AWS SAM declara una función que usa un tiempo de ejecución personalizado para una función de Lambda escrita en Rust e indica a sam build que ejecuta los comandos para el destino de compilación build-HelloRustFunction.
Resources: HelloRustFunction: Type: AWS::Serverless::Function Properties: FunctionName: HelloRust Handler: bootstrap.is.real.handler Runtime: provided MemorySize: 512 CodeUri: . Metadata: BuildMethod: makefile
El archivo Make siguiente contiene el destino de compilación y los comandos que se ejecutarán. Tenga en cuenta que la propiedad CodeUri está establecida en ., por lo que el archivo Make debes estar ubicado en el directorio raíz del proyecto (es decir, el mismo directorio que el archivo de plantilla de la aplicación de AWS SAM). El nombre del archivo debes ser Makefile.
build-HelloRustFunction: cargo build --release --target x86_64-unknown-linux-musl cp ./target/x86_64-unknown-linux-musl/release/bootstrap $(ARTIFACTS_DIR)
Para obtener más información sobre cómo configurar el entorno de desarrollo para ejecutar el comando cargo build en el anterior makefile, consulta la publicación de blog Tiempo de ejecución de Rust para AWS Lambda
Ejemplo 2: generador de archivos Make para Python3.12 (una alternativa al generador incluido)
Es posible que quieras utilizar una biblioteca o un módulo que no esté incluido en un paquete de creación. En este ejemplo, se muestra una plantilla de AWS SAM para una versión ejecutable de Python3.12 con un generador de archivos Make.
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.12 Metadata: BuildMethod: makefile
El archivo Make siguiente contiene el destino de compilación y los comandos que se ejecutarán. Ten en cuenta que la propiedad CodeUri está establecida en hello_world, por lo que el archivo Make debe estar ubicado en la raíz del subdirectorio hello_world y el nombre del archivo debe ser Makefile.
build-HelloWorldFunction: cp *.py $(ARTIFACTS_DIR) cp requirements.txt $(ARTIFACTS_DIR) python -m pip install -r requirements.txt -t $(ARTIFACTS_DIR) rm -rf $(ARTIFACTS_DIR)/bin