Comment résoudre l'erreur « Échec de la validation du modèle (# : clé extérieure [Clé] non autorisée) » dans CloudFormation ?

Lecture de 4 minute(s)
0

Pour créer une ressource, j'ai utilisé un fournisseur de ressources personnalisé dans l'interface de la ligne de commande AWS CloudFormation (CFN-CLI). Toutefois, je reçois l’erreur « Échec de la validation du modèle (# : clé extérieure [Clé] non autorisée) » dans les événements de la pile CloudFormation.

Résolution

Pour créer uniquement des types de ressources avec des propriétés, vous pouvez utiliser votre fournisseur de ressources. Une erreur de validation du modèle se produit lorsque vous ne définissez pas de propriétés dans le schéma du type de ressource ou que vous utilisez des propriétés réservées.

Afin de résoudre ce problème, suivez les étapes suivantes :

  1. Assurez-vous que les propriétés définies dans votre modèle CloudFormation sont également définies dans votre fichier de schéma de type de ressource. Ce fichier se trouve dans le répertoire racine de votre projet.
    **Remarque :**le fichier utilise le format d'appellation organization-service-resource.json. Par exemple, article-ec2-subnet.json est le nom de fichier d'une ressource Amazon Elastic Cloud Compute (Amazon EC2) nommée Article::EC2::Subnet.

  2. Vérifiez qu'il s'agit bien d'une propriété réservée. En cas d'utilisation d'une propriété réservée, modifiez le nom de la propriété à la fois dans le schéma du type de ressource et dans votre modèle CloudFormation.

  3. Une fois votre projet construit, exécutez successivement les commandes cfn validate, cfn generate et cfn submit pour vérifier que tout s'est bien déroulé. En cas d'utilisation du plugin Java, exécutez successivement les commandes cfn validate, cfn generate, mvn package et cfn submit.
    Exemple :

    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}}

    **Remarque :**si vos tests unitaires ne sont pas terminés et que vous souhaitez les ignorer, exécutez le package mvn -DMaven.test.skip=True au lieu du package mvn.

  4. Si vous souhaitez définir la version actuelle de votre projet comme version par défaut, exécutez la commande set-type-default-version de l'interface de ligne de commande AWS (AWS CLI) :

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

    **Remarque :**remplacez Organization::Service::Resource par le nom de votre type de ressource. Également, remplacez 00000005 par la dernière version de la construction que cfn submit renvoie dans la clé TypeVersionArn. Si des erreurs surviennent lorsque vous exécutez des commandes AWS CLI, consultez l’article Résoudre les erreurs AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

  5. La commande suivante permet de définir la version actuelle du type comme étant la version par défaut :

    cfn submit --set-default

    Pour en savoir plus, consultez la section Soumettre.

  6. Pour résoudre les problèmes liés aux tests, utilisez le fichier rpdk.log dans le répertoire racine de votre projet.

L'utilisation d'un fournisseur de ressources et l'apparition d'un autre type d'erreur peuvent conduire à consulter les articles suivants du Centre de connaissances AWS pour obtenir des informations supplémentaires sur les étapes de dépannage :

Informations connexes

CloudFormation CLI sur le site Web GitHub.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 7 mois