

# Carga de artefactos locales en un bucket de S3 con la AWS CLI
<a name="using-cfn-cli-package"></a>

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 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html) 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 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html) en la [Referencia de comandos de AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/index.html).



## Requisitos previos
<a name="using-cfn-cli-package-prerequisites"></a>

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

## Empaquetar e implementar una plantilla con artefactos locales
<a name="package-and-deploy-a-template-with-local-artifacts"></a>

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 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html) 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 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/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](using-cfn-nested-stacks.md).