Come posso risolvere l'errore "Convalida del modello non riuscita (#: chiave estranea [chiave] non consentita)" in CloudFormation?

4 minuti di lettura
0

Ricevo l'errore "Convalida del modello non riuscita (#: chiave estranea [chiave] non consentita)" nei miei eventi di stack. Questo errore si verifica quando creo una risorsa utilizzando un provider di risorse personalizzato con l'interfaccia a riga di comando (CLI) di AWS CloudFormation.

Breve descrizione

Questo errore viene visualizzato quando si tenta di creare una risorsa con proprietà utilizzando il proprio provider di risorse. Tuttavia, non hai definito una o più proprietà nello schema del provider di risorse o stai utilizzando proprietà riservate.

Se riscontri problemi con altri errori relativi all'utilizzo di un provider di risorse, consulta i seguenti articoli per ulteriori procedure di risoluzione dei problemi:

Nota: se ricevi errori durante l'esecuzione dei comandi dell'interfaccia a riga di comando di AWS, assicurati di utilizzare la versione più recente dell'interfaccia a riga di comando di AWS.

Risoluzione

  1. Verifica che le proprietà definite nel tuo modello CloudFormation siano definite anche nel tuo file organization-service-resource.json.

Nota: il file di schema del provider di risorse è un file JSON nel formato organization-service-resource.json e si trova nella directory principale del progetto.

  1. Se hai definito correttamente le proprietà, conferma che il tuo progetto sia stato creato correttamente eseguendo i comandi cfn generate, mvn package e cfn submit in sequenza. Ad esempio:
$ 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}}
  1. Per impostare la versione corrente del progetto da utilizzare come impostazione predefinita, esegui il seguente comando:
aws cloudformation set-type-default-version --type RESOURCE --type-name Organization::Service::Resource --version-id 00000005

Nota: sostituisci i valori per --type-name e --version-id con il nome del tuo tipo di risorsa e l'ultima versione della build restituita da cfn submit nella chiave TypeVersionArn.

  1. Se i passaggi 1-3 non risolvono il problema, verifica se stai utilizzando una proprietà riservata modificando il nome della proprietà sia nello schema del provider di risorse che nel modello CloudFormation. Quindi, ricostruisci e registra il tuo tipo di risorsa e prova a creare nuovamente la risorsa utilizzando CloudFormation con il nome di proprietà diverso.

Considera i seguenti suggerimenti:

Se i tuoi unit test non sono completi e desideri saltare i test, esegui il pacchetto mvn -dmaven.test.skip=true invece del pacchetto mvn.

Per impostare la versione del tipo corrente come predefinita dopo una corretta registrazione della versione del tipo, specifica l'opzione --set-default su cfn submit. Ad esempio:

$ cfn submit --set-default

Nota: per ulteriori informazioni, consulta submit.

Puoi risolvere i test accedendo alla directory /target/surefire-reports dalla directory principale del tuo progetto.


Informazioni correlate

AWS CloudFormation CLI

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa