Creación de aplicaciones - AWS Serverless Application Model

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Creación de aplicaciones

Para crear una aplicación sin servidor, utilice elsam buildcomando. Este comando también recopila los artefactos de compilación de las dependencias de la aplicación y los coloca en el formato y la ubicación adecuados para los próximos pasos, tales como pruebas, empaquetado e implementación localmente.

Especifica las dependencias de la aplicación en un archivo de manifiesto, comorequirements.txt(Python) opackage.json(Node.js) o mediante elLayerspropiedad de un recurso de función. LaLayerscontiene una lista deAWS Lambdacaparecursos de los que depende la función Lambda.

El formato de los artefactos de compilación de la aplicación depende de cada funciónPackageTypepropiedad. Las opciones de esta propiedad son:

  • Zip: un archivado mediante archivos .zip, que contiene el código de la aplicación y sus dependencias. Si empaqueta el código como un archivo de archivo .zip, debe especificar un tiempo de ejecución de Lambda para su función.

  • Image: una imagen contenedor, que incluye el sistema operativo base, el tiempo de ejecución y las extensiones, además del código de la aplicación y sus dependencias.

Para obtener más información sobre los tipos de paquetes de Lambda, consultePaquetes de implementación de Lambdaen laAWS LambdaGuía para desarrolladores.

Creación de un archivado mediante archivos .zip

Para crear la aplicación sin servidor como un archivo de archivo .zip, declarePackageType: Zippara tu función sin servidor.

AWS SAMcrea su aplicación para elarquitecturaque especifique. Si no especifica una arquitectura,AWS SAMutilizax86_64de forma predeterminada.

Si la función de Lambda depende de paquetes que tengan programas compilados de forma nativa, utilice la--use-containerIndicador. Este indicador compila localmente tus funciones en un contenedor Docker que se comporta como un entorno Lambda, por lo que están en el formato correcto cuando las implementas en elAWSCloud.

Cuando utiliza la--use-containeropción, de forma predeterminadaAWS SAMextrae la imagen del contenedor de deAmazon ECR Public. Si desea extraer una imagen de contenedor de otro repositorio, por ejemploDockerHub, puede utilizar la--build-imagey proporcionar el URI de una imagen de contenedor alternativa. A continuación se presentan dos ejemplos de comandos para crear aplicaciones utilizando imágenes de contenedor delDockerHubrepository:

# Build a Node.js 12 application using a container image pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs12.x # Build a function resource using the Python 3.8 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.8

Para obtener una lista de URI que puede utilizar con--build-image, consulterepositorios de imágenesque contieneDockerHubURI para varios tiempos de ejecución admitidos.

Para obtener ejemplos adicionales de creación de una aplicación de archivado de archivos.zip, consulte la sección Ejemplos más adelante en este tema.

Creación de una imagen de contenedor

Para crear la aplicación sin servidor como imagen de contenedor, declaraPackageType: Imagepara tu función sin servidor. También debe declarar elMetadataatributo de recurso con las siguientes entradas:

Dockerfile

El nombre del archivo Dockerfile asociado a la función de Lambda.

DockerContext

La ubicación del archivo Dockerfile.

DockerTag

(Opcional) Etiqueta que se va a aplicar a la imagen compilada.

DockerBuildArgs

Argumentos de compilación para la compilación.

A continuación se muestra un ejemplo de:Metadatasección de atributos de recursos:

Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1

Para descargar una aplicación de ejemplo configurada con elImagetipo de paquete, consultePaso 1: Descargue un ejemploAWS SAMaplicaciónenTutorial: Implementación de una aplicación Hello World. En el mensaje preguntando qué tipo de paquete desea instalar, elijaImage.

nota

Si especifica una imagen base de varias arquitecturas en el Dockerfile,AWS SAMcrea la imagen de contenedor para la arquitectura de su máquina host. Para crear para una arquitectura diferente, especifique una imagen base que utilice la arquitectura de destino específica.

Archivo de variables de entorno contenedor

Para proporcionar un archivo JSON que contenga variables de entorno para el contenedor de compilación, utilice la--container-env-var-fileargumento con elsam buildcomando. Puede proporcionar una única variable de entorno que se aplique a todos los recursos sin servidor o a distintas variables de entorno para cada recurso.

Formato

El formato para pasar variables de entorno a un contenedor de compilación depende de cuántas variables de entorno proporcione para los recursos.

Para proporcionar una única variable de entorno para todos los recursos, especifique unParametersobjeto similar al siguiente:

{ "Parameters": { "GITHUB_TOKEN": "TOKEN_GLOBAL" } }

Para proporcionar distintas variables de entorno para cada recurso, especifique los objetos para cada recurso como se indica a continuación:

{ "MyFunction1": { "GITHUB_TOKEN": "TOKEN1" }, "MyFunction2": { "GITHUB_TOKEN": "TOKEN2" } }

Guarde las variables de entorno como un archivo, por ejemplo, con nombreenv.json. El siguiente comando utiliza este archivo para pasar las variables de entorno al contenedor de compilación:

sam build --use-container --container-env-var-file env.json

Prioridad

  • Las variables de entorno que proporciona para recursos específicos tienen prioridad sobre la variable de entorno única para todos los recursos.

  • Las variables de entorno que proporciona en la línea de comandos tienen prioridad sobre las variables de entorno de un archivo.

Ejemplos

Ejemplo 1: archivo de archivo .zip

Los siguientes ejemplos desam buildcomandos crean un archivado mediante archivos .zip:

# Build all functions and layers, and their dependencies sam build # Run the build process inside a Docker container that functions like a Lambda environment sam build --use-container # Build a Node.js 12 application using a container image pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs12.x # Build a function resource using the Python 3.8 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.8 # Build and run your functions locally sam build && sam local invoke # For more options sam build --help

Ejemplo 2: imagen de contenedor

Los siguientes ejemplos deAWS SAMcompilaciones de plantillas como imagen de contenedor:

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image ImageConfig: Command: ["app.lambda_handler"] Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1

A continuación se muestra un ejemplo de Dockerfile:

FROM public.ecr.aws/lambda/python:3.8 COPY app.py requirements.txt ./ RUN python3.8 -m pip install -r requirements.txt # Overwrite the command by providing a different command directly in the template. CMD ["app.lambda_handler"]

Ejemplo 3: npm ci

Para aplicaciones Node.js, puede utilizarnpm cien lugar denpm installpara instalar las dependencias. Para utilizarnpm ci, especifiqueUseNpmCi: TrueUNDERBuildPropertiesen la función de LambdaMetadataatributo de recurso. Para utilizarnpm ci, la solicitud debe tener unapackage-lock.jsononpm-shrinkwrap.jsonarchivo presente en elCodeUripara la función de Lambda.

El siguiente ejemplo utilizanpm cipara instalar dependencias cuando ejecutasam build:

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.handler Runtime: nodejs14.x Architectures: - x86_64 Events: HelloWorld: Type: Api Properties: Path: /hello Method: get Metadata: BuildProperties: UseNpmCi: True