Como resolver problemas com propriedades somente gravação em recursos AWS::Lambda::Function - AWS CloudFormation

Como resolver problemas com propriedades somente gravação em recursos AWS::Lambda::Function

Este tópico explica como resolver problemas com propriedades somente gravação em recursos AWS::Lambda::Function ao usar o gerador de IaC.

Problema

O recurso AWS::Lambda::Function tem três conjuntos de propriedades mutuamente excludentes para especificar o código Lambda:

  • As propriedades Code/S3Bucket e Code/S3Key, e opcionalmente, a propriedade Code/S3ObjectVersion

  • a propriedade Code/ImageUri

  • a propriedade Code/ZipFile

Somente um desses conjuntos pode ser usado para um determinado recurso AWS::Lambda::Function.

O gerador de IaC não pode determinar qual conjunto de propriedades somente gravação exclusivas foi usado para criar ou atualizar o recurso. Como resultado, ele inclui somente o primeiro conjunto de propriedades no modelo gerado. As propriedades Code/ImageUri e Code/ZipFile são omitidas.

Além disso, o gerador de IaC emite os seguintes avisos:

  • MUTUALLY_EXCLUSIVE_PROPERTIES: avisa que Code/S3Bucket e Code/S3Key são identificadas como propriedades mutuamente excludentes.

  • UNSUPPORTED_PROPERTIES: avisa que não há suporte à propriedade Code/S3ObjectVersion.

Para incluir recursos AWS::Lambda::Function em um modelo gerado, você deve baixar e atualizar o modelo com as propriedades de código corretas.

Resolução

Se você armazenar seu código do Lambda em um bucket do Amazon S3 e não usar a propriedade S3ObjectVersion, poderá importar o modelo gerado sem nenhuma modificação. O gerador de IaC solicitará o bucket e a chave do Amazon S3 como parâmetros de modelo durante a operação de importação.

Se você armazenar seu código do Lambda como um repositório do Amazon ECR, poderá atualizar seu modelo usando as seguintes instruções:
  1. Baixe o modelo gerado.

  2. Remova as propriedades e os parâmetros correspondentes das propriedades Code/S3Bucket e Code/S3Key do modelo gerado.

  3. Substitua as propriedades removidas no modelo gerado pela propriedade Code/ImageUri, especificando o URL do repositório do Amazon ECR.

  4. Abra o modelo gerado no console do gerador de IaC e escolha o botão Importar modelo editado.

Se você armazenar seu código do Lambda em um arquivo ZIP, poderá atualizar seu modelo usando as seguintes instruções:
  1. Baixe o modelo gerado.

  2. Remova as propriedades e os parâmetros correspondentes das propriedades Code/S3Bucket e Code/S3Key do modelo gerado.

  3. Substitua as propriedades removidas no modelo gerado pela propriedade Code/ZipFile.

  4. Abra o modelo gerado no console do gerador de IaC e escolha o botão Importar modelo editado.

Se você não tiver uma cópia do seu código do Lambda, poderá atualizar seu modelo usando as seguintes instruções:
  1. Use a ação GetFunction da API do AWS Lambda (por exemplo, usando o comando aws lambda get-function da AWS CLI).

  2. Na resposta, o parâmetro RepositoryType será S3 se o código estiver em um bucket do Amazon S3 ou ECR se o código estiver em um repositório do Amazon ECR.

  3. Na resposta, o parâmetro Location contém um URL pré-assinado que pode ser usado para baixar o pacote de implantação por 10 minutos. Baixe o código.

  4. Carregue o código para um bucket do Amazon S3.

  5. Execute uma operação de importação com o modelo gerado e forneça o nome do bucket e a chave como valores de parâmetros.