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

Para algumas propriedades de recursos que exigem um local do Amazon S3 (um nome de bucket e nome de arquivo), você pode especificar referências locais. Por exemplo, você pode especificar o local do S3 do código-fonte da função do AWS Lambda ou um arquivo OpenAPI (anteriormente conhecido como Swagger) da API REST do Amazon API Gateway. Em vez de fazer upload manualmente dos arquivos em um bucket do S3 e, depois, adicionar o local para o modelo, é possível especificar referências locais (chamadas de artefatos locais) no modelo e, então, usar o comando package da CLI para fazer upload deles 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.

Se você especificar um arquivo, o comando faz upload diretamente no bucket do S3. 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. Em seguida, você pode usar o modelo retornado para criar ou atualizar uma pilha.

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.

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.

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 do usuário.

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 um arquivo .zip que contém a pasta do código-fonte da função e, depois, faz upload do arquivo .zip na pasta raiz do bucket mybucket.

Comando da package

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

O comando economiza o modelo gerado para o caminho especificado pela opção --output-template-file. O comando substitui o artefato pelo local do Amazon S3, conforme mostrado no exemplo a seguir.

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://mybucket/<md5 checksum>" } } } }