sam build - 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.

sam build

Crea una aplicación sin servidor y la prepara para los pasos posteriores del flujo de trabajo, como probar localmente la aplicación o implementarla en elAWSCloud. Si proporcionas unRESOURCE_LOGICAL_ID, luegoAWS SAMcrea solo ese recurso. Para crear un recurso de una aplicación o pila anidada, puede proporcionar el ID lógico de la aplicación o la pila junto con el ID lógico del recurso mediante el formatoStackLogicalId/ResourceLogicalId.

Lasam buildcomando procesa suAWS SAMarchivo de plantilla, código de aplicación y cualquier archivo y dependencias específicas del idioma aplicable. El comando también copia los artefactos de compilación en el formato y la ubicación esperados para los pasos posteriores del flujo de trabajo. Se especifican dependencias en un archivo de manifiesto que incluye en la aplicación, comorequirements.txtpara funciones de Python, opackage.jsonpara funciones Node.js.

El formato de los artefactos de compilación de la aplicación depende del tipo de paquete. Especificas tuAWS Lambdatipo de paquete de función con elPackageTypepropiedad. Las opciones son:

  • Zip— Un archivo de archivo .zip que contiene su código de 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 acerca de los tipos de paquete Lambda, consultePaquetes de implementación de Lambdaen laAWS LambdaGuía para desarrolladores.

Si un recurso incluye unMetadataatributo de recurso con unBuildMethodentrada,sam buildcrea ese recurso de acuerdo con el valor delBuildMethodentrada. Valores válidos paraBuildMethodson 1) Uno de los identificadores de un motor de ejecución de Lambda, o 2) Elmakefileidentificador.

  • Identificador de tiempo de ejecución Lambda— Cree el recurso en función de un motor de ejecución de Lambda. Para obtener las lista de identificadores de tiempo de ejecución compatibles, consulteTiempos de ejecución de Lambdaen laAWS LambdaGuía para desarrolladores.

  • makefileidentifier — Ejecute los comandos del destino de compilación del recurso. En este caso, su archivo makefile debe ser nombradoMakefilee incluye un objetivo de compilación denominadobuild-resource-logical-id.

Para crear capas y tiempos de ejecución personalizados, también puede utilizar laMetadataatributo de recurso con unBuildMethodentrada. Para obtener información sobre las capas de creación, consulteCapas de construcción. Para obtener información acerca de la creación de tiempos de ejecución personalizados, consulteCreación de Runtimes personalizados.

Para recursos de funciones sin servidor que tienen elImagetipo de paquete, utilice elMetadataatributo de recurso para configurar los ajustes de imagen de Docker necesarios para crear una imagen de contenedor. Para obtener más información acerca de la creación de imágenes de contenedor, consulteCreación de una imagen de contenedor.

Para ver un ejemplo completo que utiliza este comando, incluidas las pruebas locales y la implementación en elAWSCloud, consulteTutorial: Implementar una aplicación Hello World. Lasam buildEl comando forma parte dePaso 2: Cree su aplicación.

Uso:

sam build [OPTIONS] [RESOURCE_LOGICAL_ID]

Ejemplos:

To use these commands, update your SAM template to specify the path to your function's source code in the resource's Code or CodeUri property. To build on your workstation, run this command in the directory containing your SAM template. Built artifacts are written to the .aws-sam/build directory. $ sam build To build inside a Lambda-like Docker container $ sam build --use-container To build with environment variables passed to the build container from the command line $ sam build --use-container --container-env-var Function1.GITHUB_TOKEN=<token1> --container-env-var GLOBAL_ENV_VAR=<global-token> To build with environment variables passed to the build container from a file $ sam build --use-container --container-env-var-file <env-file.json> 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 To build and run your functions locally $ sam build && sam local invoke To build and package for deployment $ sam build && sam package --s3-bucket <bucketname> To build the 'MyFunction' resource $ sam build MyFunction To build the 'MyFunction' resource of the 'MyNestedStack' nested stack $ sam build MyNestedStack/MyFunction

Argumentos:

Argumento Descripción
RESOURCE_LOGICAL_ID Opcional. IndicaAWS SAMpara crear un único recurso declarado en elAWS SAMTemplate. Los artefactos de compilación del recurso especificado serán los únicos disponibles para los comandos posteriores del flujo de trabajo, p. ej.sam packageysam deploy.

Opciones:

Opción Descripción
-b, --build-dir DIRECTORY Ruta de acceso a un directorio donde se almacenan los artefactos compilados. Este directorio y todo su contenido se eliminan con esta opción.
-s, --base-dir DIRECTORY Resuelve las rutas relativas al código fuente de la función o de la capa con respecto a este directorio. Utilice esta opción si desea cambiar la forma en que se resuelven las rutas relativas a las carpetas de código fuente. De forma predeterminada, las rutas relativas se resuelven con respecto alAWS SAMubicación de la plantilla.

Además de los recursos de la aplicación raíz o pila que está creando, esta opción también aplica aplicaciones o pilas anidadas.

Esta opción se aplica a los siguientes tipos de recursos y propiedades:

  • Tipo de recurso:AWS::Serverless::Function propiedad:CodeUri

  • Tipo de recurso:AWS::Serverless::Function Atributo de recurso:Metadata Entrada:DockerContext

  • Tipo de recurso:AWS::Serverless::LayerVersion propiedad:ContentUri

  • Tipo de recurso:AWS::Lambda::Function propiedad:Code

  • Tipo de recurso:AWS::Lambda::LayerVersion propiedad:Content

-u, --use-container Si sus funciones dependen de paquetes que tienen dependencias compiladas de forma nativa, utilice esta opción para crear su función dentro de un contenedor Docker similar a Lambda.
-e, --container-env-var TEXT Variables de entorno que transferir al contenedor de compilación. Puede especificar esta opción varias veces. Cada instancia de esta opción toma un par clave-valor, donde la clave es la variable de recurso y entorno, y el valor es el valor de la variable de entorno. Por ejemplo, --container-env-var Function1.GITHUB_TOKEN=TOKEN1 --container-env-var Function2.GITHUB_TOKEN=TOKEN2.

Esta opción solo se aplica si el--use-containerSe especifica la opción; de lo contrario, se producirá un error.

-ef, --container-env-var-file PATH Ruta y nombre de archivo de un archivo JSON que contiene los valores de las variables de entorno del contenedor. Para obtener más información acerca de los archivos de variables de entorno contenedor, consulteArchivo de variables de entorno contenedor.

Esta opción solo se aplica si el--use-containerSe especifica la opción; de lo contrario, se producirá un error.

--build-image TEXT

URI de la imagen de contenedor que desea extraer para la compilación. Por defecto,AWS SAMExtracción de la imagen del contenedor de Amazon ECR Public. Utilice esta opción para extraer la imagen de otra ubicación.

Puede especificar esta opción varias veces. Cada instancia de esta opción puede tomar una cadena o un par clave-valor. Si especifica una cadena, es el URI de la imagen contenedor que se utilizará para todos los recursos de la aplicación. Por ejemplo, sam build --use-container --build-image amazon/aws-sam-cli-build-image-python3.8. Si especifica un par clave-valor, la clave es el nombre del recurso y el valor es el URI de la imagen contenedor que se va a utilizar para ese recurso. Por ejemplo, sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.8. Con los pares clave-valor, puede especificar imágenes de contenedores diferentes para distintos recursos.

Esta opción solo se aplica si el--use-containerSe especifica la opción; de lo contrario, se producirá un error.

-m, --manifest PATH Ruta de acceso a un archivo de manifiesto de dependencia personalizado (por ejemplo, package.json) que se va a utilizar en lugar del predeterminado.
-t, --template-file, --template PATH Ruta y nombre de archivo deAWS SAMArchivo de plantilla de[default: template.[yaml|yml]].
--parameter-overrides (Opcional) Cadena que contieneAWS CloudFormationreemplazos de parámetros codificados como pares clave-valor. Utiliza el mismo formato que laAWS Command Line Interface(AWS CLI). Por ejemplo: 'ParameterKey=KeyPairName,ParameterValue=MyKey ParameterKey=InstanceType,ParameterValue=t1.micro».
--skip-pull-image Especifica si el comando debe omitir la extracción de la última imagen Docker para el tiempo de ejecución de Lambda.
--docker-network TEXT Especifica el nombre o ID de una red Docker existente a la que deben conectarse los contenedores de Docker de Lambda Docker, junto con la red en modo puente predeterminada. Si no se especifica, los contenedores de Lambda se conectan solo a la red Docker en modo puente predeterminada.
--parallel Compilaciones parallel habilitadas. Utilice esta opción para crear suAWS SAMfunciones y capas de plantilla en parallel. De forma predeterminada, las funciones y las capas se compilan en secuencia.
--cached | --no-cached Habilitar o deshabilitar las compilaciones en caché. Utilice esta opción para reutilizar artefactos de compilación que no han cambiado con respecto a las compilaciones anteriores.AWS SAMevalúa si ha cambiado algún archivo del directorio del proyecto de. De forma predeterminada, las compilaciones no se almacenan en caché. Si el archivo de--no-cachedse invoca, anula lacached = trueconfiguración en samcofig.toml. Nota: AWS SAMno evalúa si has cambiado módulos de terceros de los que depende tu proyecto, en los que no has proporcionado una versión específica. Por ejemplo, si la función Python incluye unrequirements.txtarchivo con la entradarequests=1.xy los cambios más recientes de la versión del módulo de solicitud de1.1a1.2, luegoAWS SAMno extrae la última versión hasta que ejecute una compilación no almacenada en caché.
--cache-dir El directorio en el que se almacenan los artefactos de caché cuando--cachedse especifica. El directorio de caché predeterminado es.aws-sam/cache.
-x, --exclude Nombre de los recursos que se van a excluir de la compilación de SAM CLI. Por ejemplo, si su plantilla de contieneFunction1,Function2, yFunction3y tú corressam build --exclude Function2, soloFunction1yFunction3se construirá.
--profile TEXT El perfil específico del archivo de credenciales que obtieneAWSCredenciales de .
--region TEXT LaAWSRegión en la que desea implementar. Por ejemplo, us-east-1.
--config-file PATH Ruta y nombre de archivo del archivo de configuración que contiene los valores de parámetro predeterminados que se van a utilizar. El valor predeterminado es»samconfig.toml«en la raíz del directorio del proyecto. Para obtener más información sobre los archivos de configuración, consulte AWS SAMArchivo de configuración de la CLI.
--config-env TEXT El nombre del entorno que especifica los valores de parámetros predeterminados en el archivo de configuración que se va a utilizar. El valor predeterminado es «default». Para obtener más información sobre los archivos de configuración, consulte AWS SAMArchivo de configuración de la CLI.
--debug Activa el registro de depuración para imprimir mensajes de depuración que elAWS SAMCLI genera y muestra marcas de hora.
--help Muestra este mensaje y termina.

Ejemplos

Creación de un recurso mediante un identificador de tiempo de ejecución de Lambda

A continuación se muestra un ejemploAWS SAMplantilla que muestra cómo crear un recurso utilizando un identificador de tiempo de ejecución de Lambda:

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.6 Metadata: BuildMethod: python3.6

Con esta plantilla, el siguiente comando creará elMyLayerrecurso contra el entorno de ejecución de Python 3.6:

sam build MyLayer

Creación de un recurso mediante elmakefileidentificador

A continuación se muestra un ejemploAWS SAMque muestra cómo crear un recurso mediante elmakefileidentificador:

Resources: MyLayer: Type: AWS::Serverless::LayerVersion Properties: ContentUri: my_layer CompatibleRuntimes: - python3.8 Metadata: BuildMethod: makefile

Este es un ejemplo de un archivo makefile asociado. El archivo debe denominarseMakefilee incluya un destino de compilación con los comandos que desea ejecutar:

build-MyLayer: mkdir -p "$(ARTIFACTS_DIR)/python" cp *.py "$(ARTIFACTS_DIR)/python" python -m pip install -r requirements.txt -t "$(ARTIFACTS_DIR)/python"

Con esta plantilla y makefile, el siguiente comando ejecutará los comandos parabuild-MyLayerobjetivo:

sam build MyLayer

Pasar las variables de entorno a un contenedor de compilación

A continuación se muestra un ejemplo que muestra cómo pasar variables de entorno a un contenedor de compilación mediante un archivo.

En primer lugar, cree un archivo llamadoenv.jsonCon el siguiente contenido:

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

A continuación, ejecute el siguiente comando:

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

Para obtener más información sobre los archivos de variables de entorno contenedor, consulteArchivo de variables de entorno contenedor.