Carga de artefactos locales en un bucket de S3 con la AWS CLI - AWS CloudFormation

Carga de artefactos locales en un bucket de S3 con la AWS CLI

Puede utilizar la AWS CLI para cargar artefactos locales a los que se hace referencia en una plantilla de CloudFormation a un bucket de Amazon S3. Los artefactos locales son archivos a los que hace referencia en su plantilla. En lugar de cargar de forma manual los archivos en un bucket de S3 y, a continuación, añadir la ubicación a su plantilla, puede especificar artefactos locales en su plantilla y luego usar el comando package para cargarlos rápidamente.

Un artefacto local es una ruta a un archivo o carpeta que el comando package carga en Amazon S3. Por ejemplo, un artefacto puede ser una ruta local al código fuente de su función de AWS Lambda o un archivo OpenAPI de la API de REST de Amazon API Gateway.

Al usar el comando package:

  • Si especifica un archivo, el comando se carga directamente en el bucket de S3.

  • Si especifica una carpeta, el comando crea un archivo .zip para la carpeta y, a continuación, carga el archivo .zip.

  • Si no especifica una ruta, el comando crea un archivo .zip para el directorio de trabajo y, a continuación, lo carga.

Puede especificar una ruta absoluta o relativa, donde la ruta relativa es relativa respecto a la ubicación de la plantilla.

Después de cargar los artefactos, el comando devuelve una copia de la plantilla, sustituyendo las referencias a artefactos locales con la ubicación de S3 donde el comando cargó los artefactos. A continuación, puede utilizar la plantilla devuelta para crear o actualizar una pila.

nota

Solo puede usar artefactos locales para propiedades de recursos compatibles con el comando package. Para obtener más información acerca de este comando y una lista de las propiedades de recursos compatibles, consulte la documentación de package en la Referencia de comandos de AWS CLI.

Requisitos previos

Antes de comenzar, debe tener un bucket de Amazon S3 existente.

Empaquetar e implementar una plantilla con artefactos locales

La siguiente plantilla especifica el artefacto local del código fuente de una función de Lambda. El código fuente se almacena en la carpeta /home/user/code/lambdafunction.

Plantilla original

{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::Serverless-2016-10-31", "Resources": { "MyFunction": { "Type": "AWS::Serverless::Function", "Properties": { "Handler": "index.handler", "Runtime": "nodejs18.x", "CodeUri": "/home/user/code/lambdafunction" } } } }

El siguiente comando package crea y carga un archivo .zip de la carpeta del código de origen de la función en la raíz del bucket especificado.

aws cloudformation package \ --s3-bucket amzn-s3-demo-bucket \ --template /path_to_template/template.json \ --output-template-file packaged-template.json \ --output json

El comando genera una nueva plantilla en la ruta especificada por --output-template-file. Sustituye la referencia del artefacto con la ubicación de Amazon S3, tal y como se muestra a continuación. El archivo .zip se nombra utilizando la suma de comprobación MD5 del contenido de la carpeta, en lugar de utilizar el nombre de la carpeta en sí.

Plantilla resultante

{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::Serverless-2016-10-31", "Resources": { "MyFunction": { "Type": "AWS::Serverless::Function", "Properties": { "Handler": "index.handler", "Runtime": "nodejs18.x", "CodeUri": "s3://amzn-s3-demo-bucket/md5 checksum" } } } }

Después de empaquetar los artefactos de su plantilla, implemente la plantilla procesada mediante el comando deploy.

aws cloudformation deploy \ --template-file packaged-template.json \ --stack-name stack-name

Al implementar plantillas de más de 51 200 bytes, utilice el comando deploy con la opción --s3-bucket para cargar su plantilla en S3, como en el siguiente ejemplo.

aws cloudformation deploy \ --template-file packaged-template.json \ --stack-name stack-name \ --s3-bucket amzn-s3-demo-bucket
nota

Para ver otro ejemplo del uso del comando package para cargar artefactos locales, consulte División de una plantilla en piezas reutilizables utilizando pilas anidadas.