¿Cómo puedo resolver el error «Ha fallado la validación del modelo (número: no se permite la clave ajena [clave])» en CloudFormation?
Utilicé un proveedor de recursos personalizado en la interfaz de línea de comandos de AWS CloudFormation (CFN-CLI) para crear un recurso. Pero recibí el error «Ha fallado la validación del modelo (número: no se permite la clave ajena [clave])» en mis eventos de pila de CloudFormation.
Resolución
Puede usar su proveedor de recursos para crear solo tipos de recursos con propiedades. Cuando no define propiedades en el esquema de tipos de recursos o si utiliza propiedades reservadas, recibe el error de validación del modelo.
Para resolver este problema, complete los siguientes pasos:
-
Compruebe que las propiedades definidas en la plantilla de CloudFormation también estén definidas en el archivo de esquema de tipos de recursos. Puede encontrar el archivo en el directorio raíz del proyecto.
Nota: El archivo usa el formato de nomenclatura organization-service-resource.json. Por ejemplo, el nombre del archivo es article-EC2-subnet.json para un recurso de Amazon Elastic Cloud Compute (Amazon ec2) denominado Article::EC2::Subnet. -
Compruebe si está usando una propiedad reservada. Si está utilizando una propiedad reservada, cambie el nombre de la propiedad tanto en el esquema del proveedor de recursos como en la plantilla de CloudFormation.
-
Para comprobar que el proyecto se ha creado correctamente, ejecute los comandos cfn validate, cfn generate y cfn submit de forma secuencial. Si utiliza el complemento de Java, ejecute los comandos cfn validate, cfn generate, mvn package y cfn submit de forma secuencial.
Ejemplo:cfn validate Resource schema is valid. 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}}
Nota: 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 actual de su proyecto como predeterminada, ejecute el comando set-type-default-version de la interfaz de la línea de comandos de AWS (AWS CLI):
aws cloudformation set-type-default-version --type RESOURCE --type-name Organization::Service::Resource --version-id 00000005
Nota: Sustituya Organization::Service::Resource por el nombre de su tipo de recurso. Además, reemplace 00000005 por la versión más reciente de la compilación que devuelve el cfn submit en la clave TypeVersionArn. Si se muestran errores al ejecutar comandos de la AWS CLI, consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.
-
Ejecute el siguiente comando para establecer la versión de tipo actual como predeterminada:
cfn submit --set-default
Para obtener más información, consulte enviar.
-
Para solucionar los problemas de las pruebas, use el archivo rpdk.log en el directorio raíz de su proyecto.
Si utiliza un proveedor de recursos y recibe un tipo de error diferente, consulte los siguientes artículos del Centro de conocimiento de AWS para obtener pasos adicionales para la solución de problemas:
- ¿Cómo resuelvo el error «La especificación del recurso no es válida» cuando uso la CLI de CloudFormation para ejecutar comando cfn generate?
- ¿Cómo resuelvo el error «Se ha agotado el tiempo de espera para la creación del recurso físico» cuando creo un recurso mediante mi tipo de proveedor de recursos en CloudFormation?
- ¿Cómo resuelvo el error «La “clave” del atributo no existe» cuando utilizo la función Fn::GetAtt en el recurso de mi proveedor de recursos en CloudFormation?
- ¿Cómo puedo resolver el error «java.lang.ClassNotFoundException: com.example.package.resource.HandlerWrapper» en CloudFormation?
Información relacionada
CLI de CloudFormation en el sitio web de GitHub.
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 meses
- OFICIAL DE AWSActualizada hace 3 años