

# Resolución de problemas relacionados con las propiedades de solo escritura en recursos de AWS::Lambda::Function
<a name="generate-IaC-lambda-function"></a>

En este tema se explica cómo resolver los problemas relacionados con las propiedades de solo escritura de los recursos de [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) cuando se utiliza el generador de IaC.

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

El recurso de `AWS::Lambda::Function` tiene tres conjuntos de propiedades que se excluyen mutuamente para especificar el código de Lambda:
+ Propiedades `Code/S3Bucket` y `Code/S3Key` y, de manera opcional, la propiedad `Code/S3ObjectVersion`
+ Propiedad `Code/ImageUri`
+ Propiedad `Code/ZipFile`

Solo se puede usar uno de estos conjuntos para un recurso de `AWS::Lambda::Function` determinado.

El generador de IaC no puede determinar qué conjunto de propiedades exclusivas de solo escritura se utilizó para crear o actualizar el recurso. Como resultado, incluye solo el primer conjunto de propiedades de la plantilla generada. Se omiten las propiedades `Code/ImageUri` y `Code/ZipFile`. 

Además, el generador de IaC emite las siguientes advertencias:
+ **`MUTUALLY_EXCLUSIVE_PROPERTIES`**: advierte que `Code/S3Bucket` y `Code/S3Key` se identifican como propiedades que se excluyen mutuamente.
+ **`UNSUPPORTED_PROPERTIES`**: advierte que la propiedad `Code/S3ObjectVersion` no es compatible.

Para incluir recursos de `AWS::Lambda::Function` en una plantilla generada, debe descargar y actualizar la plantilla con las propiedades de código correctas.

## Resolución
<a name="lambda-function-mutually-exclusive-properties-resolution"></a>

**Si almacena el código Lambda en un bucket de Amazon S3 y no utiliza la propiedad `S3ObjectVersion`**, puede importar la plantilla generada sin ninguna modificación. El generador de IaC le pedirá el bucket de Amazon S3 y la clave como parámetros de plantilla durante la operación de importación.

****Si almacena el código Lambda como un repositorio de Amazon ECR**, puede actualizar la plantilla de acuerdo con las siguientes instrucciones:**

1. Descargue la plantilla generada.

1. Elimine las propiedades y los parámetros correspondientes de las propiedades de `Code/S3Bucket` y `Code/S3Key` de la plantilla generada.

1. Sustituya las propiedades eliminadas de la plantilla generada por la propiedad `Code/ImageUri` y especifique la URL del repositorio de Amazon ECR.

1. Abra la plantilla generada en la consola del generador de IaC y pulse el botón **Importar plantilla editada**.

****Si almacena el código Lambda en un archivo zip**, puede actualizar la plantilla de acuerdo con las siguientes instrucciones:**

1. Descargue la plantilla generada.

1. Elimine las propiedades y los parámetros correspondientes de las propiedades de `Code/S3Bucket` y `Code/S3Key` de la plantilla generada.

1. Sustituya las propiedades eliminadas de la plantilla generada por la propiedad `Code/ZipFile`.

1. Abra la plantilla generada en la consola del generador de IaC y pulse el botón **Importar plantilla editada**.

****Si no tiene una copia del código Lambda**, puede actualizar la plantilla según las siguientes instrucciones:**

1. Utilice la acción de la API de AWS Lambda [https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html) (por ejemplo, mediante el 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) de la AWS CLI).

1. En la respuesta, el parámetro `RepositoryType` indica `S3` si el código está en un bucket de Amazon S3 o `ECR` si el código se encuentra en un repositorio de Amazon ECR.

1. En la respuesta, el parámetro `Location` contiene una URL prefirmada que puede usar para descargar el paquete de implementación durante 10 minutos. Descargue el código.

1. Cargue el archivo en un bucket de Amazon S3.

1. Ejecute una operación de importación con la plantilla generada y proporcione el nombre y la clave del bucket como valores de parámetro.