Fazer upload de artefatos locais em um bucket do S3 com a AWS CLI - AWS CloudFormation

Fazer upload de artefatos locais em um bucket do S3 com a AWS CLI

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 package 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 package, na Referência de comandos da AWS CLI.

Pré-requisitos

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

Empacotar e implantar um modelo com artefatos locais

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 package 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 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.