「モデルの検証に失敗しました (#: 外部キー [Key] は許可されていません)」という AWS CloudFormation のエラーを解決する方法を教えてください。

最終更新日: 2021 年 4 月 15 日

スタックイベントで、「モデルの検証に失敗しました (#: 外部キー [Key] は許可されていません)」というエラーが発生しました。このエラーは、AWS CloudFormation コマンドラインインターフェイス (CLI) でカスタムリソースプロバイダーを使用してリソースを作成するときに発生します。

簡単な説明

このエラーは、リソースプロバイダーを使用してプロパティでリソースを作成しようとすると表示されます。ただし、リソースプロバイダーのスキーマで 1 つ以上のプロパティを定義していないか、予約されたプロパティを使用しています

問題があってリソースプロバイダーの使用に関してエラーを受け取った場合は、次の記事の追加のトラブルシューティング手順を参照してください。

注: AWS CLI コマンドの実行時にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください

解決方法

1.    CloudFormation テンプレートで定義されているプロパティが、 organization-service-resource.json ファイルでも定義されていることを確認します。

注: リソースプロバイダーのスキーマファイルは、 organization-service-resource.json.json 形式の JSON ファイルで、プロジェクトのルートディレクトリにあります。

2.    プロパティを正しく定義した場合は、cfn generatemvn packagecfn 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 の値を、リソースタイプの名前と、TypesVersionArn キーの 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 ディレクトリに移動することで、テストのトラブルシューティングを行うことができます。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?