Comment résoudre l'erreur « Model validation failed (#: extraneous key [Key] is not permitted » (« Échec de la validation du modèle [# : la clé externe (Clé) n'est pas autorisée] ») dans AWS CloudFormation ?

Date de la dernière mise à jour : 17/08/2020

Je reçois l'erreur « Model validation failed (#: extraneous key [Key] is not permitted » (« Échec de la validation du modèle [# : la clé externe (Clé) n'est pas autorisée] ») dans mes événements de pile lorsque je crée une ressource à l'aide de mon fournisseur de ressources dans AWS CloudFormation. Comment puis-je résoudre cette erreur ?

Brève description

Solution

1.    Vérifiez que les propriétés définies dans votre modèle AWS CloudFormation sont également définies dans votre fichier organization-service-resource.json.

Remarque : le fichier de schéma du fournisseur de ressources est un fichier JSON nommé organization-service-resource.json et se trouve dans le répertoire racine de votre projet.

2.    Si vous avez défini les propriétés correctement, vérifiez que votre projet a été créé avec succès en exécutant dans l'ordre les commandes cfn generate, mvn package et cfn submit. Par exemple :

$ 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.    Pour définir la version actuelle de votre projet à utiliser par défaut, exécutez la commande suivante :

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

Remarque : remplacez les valeurs --type-name et --version-id par le nom de votre type de ressource et la dernière version de build renvoyée par la commande cfn submit dans la clé TypeVersionArn.

4.    Si les étapes 1 à 3 ne résolvent pas le problème, vérifiez si vous utilisez une propriété réservée en modifiant le nom de la propriété à la fois dans le schéma du fournisseur de ressources et dans votre modèle AWS CloudFormation. Ensuite, régénérez et enregistrez votre type de ressource, puis essayez de créer la ressource à l'aide d'AWS CloudFormation avec le nouveau nom de propriété.

Tenez compte des conseils suivants :

Si vos tests d'unité ne sont pas terminés et que vous souhaitez les ignorer, exécutez la commande mvn -Dmaven.test.skip=true package au lieu de mvn package.

Pour définir la version de type actuelle comme valeur par défaut après un enregistrement réussi de la version de type, remplacez l'option --set-default par cfn submit comme dans l'exemple suivant :

$ cfn submit --set-default

Remarque : pour plus d'informations, consultez la section submit.

Vous pouvez résoudre les problèmes des tests en accédant au répertoire /target/surefire-reports à partir du répertoire racine de votre projet.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?