¿Cómo puedo resolver el error «Ha fallado la validación del modelo (número: no se permite la clave ajena [clave])» en CloudFormation?
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:
- ¿Cómo puedo solucionar el error «La especificación del recurso no es válida» cuando ejecuto el comando cfn generate mediante la CLI de CloudFormation en AWS CloudFormation?
- ¿Cómo soluciono el error «Se ha agotado el tiempo de espera del recurso físico» cuando creo un recurso con mi tipo de proveedor de recursos en AWS CloudFormation?
- ¿Cómo soluciono el error «La clave del atributo» no existe cuando utilizo la función Fn::GetAtt en el recurso de mi proveedor de recursos en AWS CloudFormation?
- ¿Cómo soluciono el error «java.lang.ClassNotFoundException: com.example.package.resource.HandlerWrapper» en AWS CloudFormation?
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
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años