我在 AWS CloudFormation Command Line Interface (CFN-CLI) 中使用自訂資源提供者來建立資源。但是,我在 CloudFormation 堆疊事件中收到 "Model validation failed (#: extraneous key [Key] is not permitted)" 錯誤。
解決方法
您可以使用資源提供者僅建立具有屬性的資源類型。當您未在資源類型架構中定義屬性或使用預留的屬性時,您會收到模型驗證錯誤。
若要解決此問題,請完成下列步驟:
-
確認 CloudFormation 範本中定義的屬性也在您的資源類型架構中有定義。您可以在專案的根目錄中找到該檔案。
**注意:**該檔案使用組織 organization-service-resource.json 命名格式。例如,article-ec2-subnet.json 是名為 Article::EC2::Subnet 的 Amazon Elastic Cloud Compute (Amazon EC2) 資源的檔案名稱。
-
檢查您是否使用預留的屬性。如果您使用的是預留的屬性,請在資源類型架構和 CloudFormation 範本中變更屬性的名稱。
-
若要驗證您的專案是否成功建立,請依序執行 cfn validate、cfn generate 和 cfn submit 命令。如果您使用的是 Java 外掛程式,則依序執行 cfn validate、cfn generate、mvn package 和 cfn submit 命令。
範例:
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}}
**注意:**如果單元測試沒有完成,想跳過測試,則執行 mvn -Dmaven.test.skip=true package,而不要執行 mvn package。
-
若要將專案的目前版本設定為預設值,請執行 set-type-default-version AWS Command Line Interface (AWS CLI) 命令:
aws cloudformation set-type-default-version --type RESOURCE --type-name Organization::Service::Resource --version-id 00000005
注意: 將 Organization::Service::Resource 取代為您的資源類型的名稱。此外,請將 00000005 取代為 TypeVersionArn 金鑰中的 cfn submit 傳回的最新版本號。如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
-
執行下列命令,將目前類型版本設定為預設值:
cfn submit --set-default
如需相關資訊,請參閱 submit。
-
若要對測試進行疑難排解,請使用專案根目錄中的 rpdk.log 檔案。
如果您使用資源提供者並收到不同類型的錯誤,請參閱下列 AWS 知識中心文章以取得其他疑難排解步驟:
相關資訊
GitHub 網站上的 CloudFormation CLI。