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
.amzn-s3-demo-bucket
Comando da package
aws cloudformation package --s3-bucket
amzn-s3-demo-bucket
\ --template/path_to_template/template.json
\ --output-template-filepackaged-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://amzn-s3-demo-bucket
/<md5 checksum>
"
}
}
}
}