Carga de artefactos locales en un bucket de S3 - AWS CloudFormation

Carga de artefactos locales en un bucket de S3

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, añadir la ubicación a su plantilla, puede especificar referencias locales, denominadas artefactos locales, en la plantilla y luego usar el comando package para cargarlas 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.

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, sube el archivo.zip. Si especifica una ruta, el comando crea un archivo .zip para el directorio de trabajo y, a continuación, lo sube. 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 el comando aws cloudformation package en la referencia de comandos de la 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 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 my-bucket.

Comando de paquete

aws cloudformation package \ --template /path_to_template/template.json \ --s3-bucket mybucket \ --output-template-file packaged-template.json \ --use-json

El comando guarda la plantilla que genera en la ruta especificada por la opción --output. 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://mybucket/<md5 checksum>"
      }
    }
  }
}