

# Fazer upload de artefatos locais em um bucket do S3 com a AWS CLI
<a name="using-cfn-cli-package"></a>

Você pode usar a AWS CLI para carregar artefatos locais referenciados por um modelo do CloudFormation para um bucket do Amazon S3. Artefatos locais são arquivos aos quais você faz referência no seu modelo. Em vez de carregar manualmente os arquivos em um bucket do S3 e depois adicionar seus locais ao seu modelo, você pode especificar artefatos locais no seu modelo e usar o comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html) para carregá-los rapidamente. 

Um artefato local é um caminho para um arquivo ou pasta que o comando **package** faz upload no Amazon S3. Por exemplo, um artefato pode ser um caminho local para o código-fonte da função do AWS Lambda ou um arquivo OpenAPI da API REST do Amazon API Gateway. 

Ao usar o comando **package**:
+ Se você especificar um arquivo, o comando faz upload diretamente no bucket do S3. 
+ Se você especificar uma pasta, o comando cria um arquivo `.zip` para a pasta e, depois, faz upload do arquivo `.zip`. 
+ Se você não especificar um caminho, o comando criará um arquivo `.zip` para o diretório de trabalho e fará upload dele. 

Você pode especificar um caminho absoluto ou relativo, no qual o caminho relativo é relativo para o local do modelo.

Depois de fazer upload dos artefatos, o comando retorna uma cópia de seu modelo, substituindo referências a artefatos locais pelo local do S3 onde o comando fez upload dos artefatos. Você poderá então usar o modelo retornado para criar ou atualizar uma pilha.

**nota**  
Você pode usar artefatos locais apenas para as propriedades de recurso com as quais o comando **package** é compatível. Consulte mais informações sobre esse comando e uma lista de propriedades de recursos compatíveis na documentação do [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html), na [Referência de comandos da AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/index.html).



## Pré-requisitos
<a name="using-cfn-cli-package-prerequisites"></a>

Antes de começar, é necessário ter um bucket do Amazon S3 existente. 

## Empacotar e implantar um modelo com artefatos locais
<a name="package-and-deploy-a-template-with-local-artifacts"></a>

O modelo a seguir especifica o artefato local para um código-fonte da função do Lambda. O código-fonte é armazenado na pasta `/home/user/code/lambdafunction`.

**Modelo 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"
      }
    }
  }
}
```

O comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/package.html) a seguir cria e carrega um arquivo `.zip` da pasta do código-fonte da função para a raiz do 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
```

O comando gera um novo modelo no caminho especificado por `--output-template-file`. Ele substitui a referência do artefato pelo local do Amazon S3, conforme mostrado abaixo. O arquivo `.zip` é nomeado usando a soma de verificação MD5 do conteúdo da pasta, em vez de usar o próprio nome da pasta.

**Modelo 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"
      }
    }
  }
}
```

Depois de empacotar os artefatos do seu modelo, implante o modelo processado usando o 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
```

Ao implantar modelos maiores que 51.200 bytes, use o comando **deploy** com a opção `--s3-bucket` para carregar seu modelo no S3, como no exemplo a seguir.

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

**nota**  
Para ver outro exemplo de uso do comando **package** para carregar artefatos locais, consulte [Dividir um modelo em partes reutilizáveis usando pilhas aninhadas](using-cfn-nested-stacks.md).