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
eCode/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/S3Bucket
eCode/S3Key
sã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/S3Bucket
eCode/S3Key
do 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/S3Bucket
eCode/S3Key
do 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
GetFunction
da API do AWS Lambda (por exemplo, usando o comandoaws lambda get-function
da AWS CLI). -
Na resposta, o parâmetro
RepositoryType
seráS3
se o código estiver em um bucket do Amazon S3 ouECR
se o código estiver em um repositório do Amazon ECR. -
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. -
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.