使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

如何解決 CloudFormation 中的 "Model validation failed (#: extraneous key [Key] is not permitted)" 錯誤?

2 分的閱讀內容
0

我在 AWS CloudFormation Command Line Interface (CFN-CLI) 中使用自訂資源提供者來建立資源。但是,我在 CloudFormation 堆疊事件中收到 "Model validation failed (#: extraneous key [Key] is not permitted)" 錯誤。

解決方法

您可以使用資源提供者僅建立具有屬性的資源類型。當您未在資源類型架構中定義屬性或使用預留的屬性時,您會收到模型驗證錯誤。

若要解決此問題,請完成下列步驟:

  1. 確認 CloudFormation 範本中定義的屬性也在您的資源類型架構中有定義。您可以在專案的根目錄中找到該檔案。
    **注意:**該檔案使用組織 organization-service-resource.json 命名格式。例如,article-ec2-subnet.json 是名為 Article::EC2::Subnet 的 Amazon Elastic Cloud Compute (Amazon EC2) 資源的檔案名稱。

  2. 檢查您是否使用預留的屬性。如果您使用的是預留的屬性,請在資源類型架構和 CloudFormation 範本中變更屬性的名稱。

  3. 若要驗證您的專案是否成功建立,請依序執行 cfn validatecfn generatecfn submit 命令。如果您使用的是 Java 外掛程式,則依序執行 cfn validatecfn generatemvn packagecfn 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

  4. 若要將專案的目前版本設定為預設值,請執行 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 版本

  5. 執行下列命令,將目前類型版本設定為預設值:

    cfn submit --set-default

    如需相關資訊,請參閱 submit

  6. 若要對測試進行疑難排解,請使用專案根目錄中的 rpdk.log 檔案。

如果您使用資源提供者並收到不同類型的錯誤,請參閱下列 AWS 知識中心文章以取得其他疑難排解步驟:

相關資訊

GitHub 網站上的 CloudFormation CLI

AWS 官方
AWS 官方已更新 2 個月前