Resolución de problemas relacionados con las propiedades de solo escritura en recursos de AWS::Lambda::Function - AWS CloudFormation

Resolución de problemas relacionados con las propiedades de solo escritura en recursos de AWS::Lambda::Function

En este tema se explica cómo resolver los problemas relacionados con las propiedades de solo escritura de los recursos de AWS::Lambda::Function cuando se utiliza el generador de IaC.

Problema

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

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.

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

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

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

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

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

  4. 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 GetFunction (por ejemplo, mediante el comando aws lambda get-function de la AWS CLI).

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

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

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

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