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를 cfn submit이 TypeVersionArn 키에 반환하는 빌드의 최신 버전으로 바꾸세요. AWS CLI 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
-
다음 명령을 실행하여 현재 유형 버전을 기본값으로 설정합니다.
cfn submit --set-default
자세한 내용은 제출을 참조하세요.
-
테스트 문제를 해결하려면 프로젝트의 루트 디렉터리에 있는 rpdk.log 파일을 사용하세요.
리소스 공급자를 사용했는데 다른 유형의 오류가 발생하는 경우, 다음 AWS Knowledge Center 문서에서 추가 문제 해결 단계를 참조하세요.
관련 정보
GitHub 웹사이트의 CloudFormation CLI.