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/S3BucketeCode/S3Key, e opcionalmente, a propriedadeCode/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 queCode/S3BucketeCode/S3Keysão identificadas como propriedades mutuamente excludentes. -
UNSUPPORTED_PROPERTIES: avisa que não há suporte à propriedadeCode/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:
-
Baixe o modelo gerado.
-
Remova as propriedades e os parâmetros correspondentes das propriedades
Code/S3BucketeCode/S3Keydo modelo gerado. -
Substitua as propriedades removidas no modelo gerado pela propriedade
Code/ImageUri, especificando o URL do repositório do Amazon ECR. -
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:
-
Baixe o modelo gerado.
-
Remova as propriedades e os parâmetros correspondentes das propriedades
Code/S3BucketeCode/S3Keydo modelo gerado. -
Substitua as propriedades removidas no modelo gerado pela propriedade
Code/ZipFile. -
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:
-
Use a ação
GetFunctionda API do AWS Lambda (por exemplo, usando o comandoaws lambda get-functionda AWS CLI). -
Na resposta, o parâmetro
RepositoryTypeseráS3se o código estiver em um bucket do Amazon S3 ouECRse o código estiver em um repositório do Amazon ECR. -
Na resposta, o parâmetro
Locationcontém um URL pré-assinado que pode ser usado para baixar o pacote de implantação por 10 minutos. Baixe o código. -
Carregue o código para um bucket do Amazon S3.
-
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.