Upload de artefatos em um bucket do S3 - AWS CloudFormation

Upload de artefatos em um bucket do S3

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 os arquivos em um bucket do S3 e depois adicionar o local para o modelo, você pode especificar referências locais (denominadas artefatos locais) no modelo e então usar o comando package para rapidamente carregá-los. 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, em seguida, 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. Para obter mais informações sobre esse comando e uma lista de propriedades de recursos compatíveis, consulte o comando aws cloudformation 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 a seguir cria um arquivo .zip que contém a pasta do código-fonte da função e, em seguida, faz upload do arquivo .zip na pasta raiz do bucket my-bucket.

Comando do pacote

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

O comando economiza o modelo gerado para o caminho especificado pela opção --output. 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>"
      }
    }
  }
}