¿Cómo puedo resolver el error «Ha fallado la validación del modelo (número: no se permite la clave ajena [clave])» en CloudFormation?

4 minutos de lectura
0

Recibo el error «Ha fallado la validación del modelo (número: no se permite la clave ajena [clave])» en mis eventos de pila. Este error se produce cuando creo un recurso mediante un proveedor de recursos personalizado con la interfaz de línea de comandos (CLI) de AWS CloudFormation.

Descripción breve

Aparece este error cuando intenta crear un recurso con propiedades utilizando su proveedor de recursos. Sin embargo, no ha definido una o más propiedades en el esquema del proveedor de recursos o está utilizando propiedades reservadas.

Si tiene problemas con otros errores relacionados con el uso de un proveedor de recursos, consulte los siguientes artículos para ver los pasos de solución de problemas adicionales:

Nota: Si al ejecutar los comandos de la CLI de AWS, le da error, asegúrese de utilizar la versión más reciente.

Resolución

1.    Confirme que las propiedades definidas en la plantilla de CloudFormation también estén definidas en el archivo organization-service-resource.json.

Nota: El archivo de esquema del proveedor de recursos es un archivo JSON en formato organization-service-resource.json y se encuentra en el directorio raíz del proyecto.

2.    Si ha definido las propiedades correctamente, confirme que el proyecto se ha creado correctamente ejecutando los comandos cfn generate, mvn package y cfn submit en secuencia. Por ejemplo:

$ cfn generate
Generated files for Organization::Service::Resource
$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] --< software.organization.service.resource:organization-service-resource-handler >--
[INFO] Building organization-service-resource-handler 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  21.690 s
[INFO] Finished at: 2020-07-14T16:02:47-05:00
[INFO] ------------------------------------------------------------------------
$ cfn submit
Successfully submitted type. Waiting for registration with token '12345a-abcde-6789-abc1-a1234b567891' to complete.
{'ProgressStatus': 'COMPLETE', 'Description': 'Deployment is currently in DEPLOY_STAGE of status COMPLETED' , 'TypeArn': 'arn:aws:cloudformation:us-east-1:1234567891:type/resource/Organization-Service-Resource', 'TypeVersionArn': 'arn:aws:cloudformation:us-east-1:1234567891:type/resource/Organization-Service-Resource/00000035', 'ResponseMetadata': {'RequestId': '123a1234-b123-4567-abcd-123a123b1c1d', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '123a1234-b123-4567-abcd-123a123b1c1d', 'content-type': 'text/xml', 'content-length': '952', 'date': 'Tue, 14 Jul 2020 21:16:17 GMT'}, 'RetryAttempts': 0}}

3.    Para configurar la versión actual del proyecto para que se utilice de forma predeterminada, ejecute el siguiente comando:

aws cloudformation set-type-default-version --type RESOURCE --type-name Organization::Service::Resource --version-id 00000005

Nota: Sustituya los valores de --type-name y --version-id por el nombre de su tipo de recurso y la última versión de la compilación devuelta por cfn submit en la clave TypeVersionArn.

4.    Si los pasos 1 a 3 no resuelven el problema, compruebe si está utilizando una propiedad reservada cambiando el nombre de la propiedad tanto en el esquema del proveedor de recursos como en la plantilla de CloudFormation. A continuación, reconstruya y registre su tipo de recurso e intente crear el recurso utilizando CloudFormation de nuevo con un nombre de propiedad diferente.

Tenga en cuenta los siguientes consejos:

Si las pruebas unitarias no están completas y quiere omitirlas, ejecute el paquete mvn -Dmaven.test.skip=true en lugar del paquete mvn.

Para establecer la versión de tipo actual como predeterminada después de registrar correctamente la versión de tipo, especifique la opción --set-default en cfn submit. Por ejemplo:

$ cfn submit --set-default

Nota: Para obtener más información, consulte enviar.

Para solucionar los problemas de las pruebas, vaya al directorio /target/surefire-reports desde el directorio raíz del proyecto.


Información relacionada

CLI de AWS de CloudFormation

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años