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

Para algunas propiedades de recursos que requieren una ubicación de Amazon S3 (un nombre de bucket y un nombre de archivo), puede especificar referencias locales en su lugar. Por ejemplo, puede especificar la ubicación de S3 del código fuente de su función de AWS Lambda o un archivo OpenAPI (anteriormente Swagger) de la API de REST de Amazon API Gateway. En lugar de cargar manualmente los archivos en un bucket de S3 y, a continuación, agregar la ubicación a su plantilla, puede especificar referencias locales, denominadas artefactos locales, en la plantilla y luego usar el comando package de la LCI para cargarlas de forma rápida. 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.

Si especifica un archivo, el comando se carga directamente en el bucket de S3. 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.

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.

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.

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 del usuario.

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 un archivo .zip que contiene la carpeta del código fuente de la función y, luego, carga el archivo .zip en la carpeta raíz del bucket de amzn-s3-demo-bucket.

Comando de la package

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 guarda la plantilla que genera en la ruta especificada por la opción --output-template-file. El comando sustituye el artefacto con la ubicación de Amazon S3, tal y como se muestra en el siguiente ejemplo:

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>" } } } }