

# Como resolver problemas com propriedades somente gravação em recursos AWS::Lambda::Function
<a name="generate-IaC-lambda-function"></a>

Este tópico explica como resolver problemas com propriedades somente gravação em recursos [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html) ao usar o gerador de IaC.

## Problema
<a name="lambda-function-mutually-exclusive-properties-issue"></a>

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`
+ `Code/ImageUri`a propriedade 
+ `Code/ZipFile`a propriedade 

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
<a name="lambda-function-mutually-exclusive-properties-resolution"></a>

**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.

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

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

1. 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.

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

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

1. 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 da API [https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html) do AWS Lambda (por exemplo, usando o comando [https://docs.aws.amazon.com/cli/latest/reference/lambda/get-function.html](https://docs.aws.amazon.com/cli/latest/reference/lambda/get-function.html) da AWS CLI).

1. 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.

1. 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.

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

1. 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.