スタックイベントで、「Model validation failed (#: extraneous key [Key] is not permitted)」(モデルの検証に失敗しました (#: 外部キー [Key] は許可されていません)) というエラーが発生しました。このエラーは、AWS CloudFormation コマンドラインインターフェイス (CLI) でカスタムリソースプロバイダーを使用してリソースを作成するときに発生します。
簡単な説明
このエラーは、リソースプロバイダーを使用してプロパティでリソースを作成しようとすると発生します。ただし、リソースプロバイダーのスキーマで定義していないプロパティがあるか、予約されたプロパティを使用している場合です。
問題があってリソースプロバイダーの使用に関してエラーを受け取った場合は、次の記事の追加のトラブルシューティング手順を参照してください。
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
解決方法
1. CloudFormation テンプレートで定義されているプロパティが、 organization-service-resource.json ファイルでも定義されていることを確認します。
注: リソースプロバイダーのスキーマファイルは、 organization-service-resource.json.json 形式の JSON ファイルで、プロジェクトのルートディレクトリにあります。
2. プロパティを正しく定義した場合は、cfn generate、mvn package、cfn submit コマンドを順番に実行して、プロジェクトが正常に構築されたことを確認します。例:
$ 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. プロジェクトの現在のバージョンをデフォルトで使用するように設定するには、次のコマンドを実行します。
aws cloudformation set-type-default-version --type RESOURCE --type-name Organization::Service::Resource --version-id 00000005
注: --type-name と --version-id の値を、リソースタイプの名前と、TypeVersionArn キーの cfn submit によって返されたビルドの最新バージョンに置き換えます。
4. ステップ 1~3 で問題が解決しない場合は、リソースプロバイダースキーマと CloudFormation テンプレートの両方でプロパティの名前を変更して、予約済みプロパティを使用しているかどうかを確認します。次に、リソースタイプを再構築して登録し、CloudFormation を使用して別のプロパティ名でリソースを作成してみます。
以下のヒントを考慮してください。
単体テストが完了しておらず、テストをスキップしたい場合は、mvn package の代わりに mvn -Dmaven.test.skip=true package を実行します。
タイプバージョンの登録が成功した後に現在のタイプバージョンをデフォルトとして設定するには、--set-default オプションを cfn submit に指定します。例:
$ cfn submit --set-default
注: 詳細については、「 送信」を参照してください。
プロジェクトのルートディレクトリから /target/surefire-reports ディレクトリに移動することで、テストのトラブルシューティングを行うことができます。
関連情報
AWS CloudFormation CLI