Como resolvo o erro “Falha na validação do modelo (#: chave estranha [Key] não é permitida)” no CloudFormation?

4 minuto de leitura
0

Eu usei um provedor de recursos personalizado na interface de linha de comando do AWS CloudFormation (CFN-CLI) para criar um recurso. Porém, recebi o erro “Falha na validação do modelo (#: chave externa [Key] não é permitida)” em meus eventos de pilha do CloudFormation.

Resolução

Você pode usar seu provedor de recursos para criar somente tipos de recursos com propriedades. Quando você não define propriedades no esquema do tipo de recurso ou está usando propriedades reservadas, você recebe o erro de validação do modelo.

Para solucionar esse problema, realize as etapas a seguir:

  1. Verifique se as propriedades definidas em seu modelo do CloudFormation também estão definidas em seu arquivo de esquema de tipo de recurso. Você pode encontrar o arquivo no diretório raiz do seu projeto.
    Observação: o arquivo usa o formato de nomenclatura organization-service-resource.json. Por exemplo, article-ec2-subnet.json é o nome do arquivo de um recurso Amazon Elastic Cloud Compute (Amazon EC2) chamado Article::EC2::Subnet.

  2. Verifique se você está usando uma propriedade reservada. Se você estiver usando uma propriedade reservada, altere o nome da propriedade no esquema do tipo de recurso e no seu modelo do CloudFormation.

  3. Para verificar se seu projeto foi criado com sucesso, execute os comandos cfn validate, cfn generate e cfn submit em sequência. Se você estiver usando o plug-in Java, execute os comandos cfn validate, cfn generate, mvn package e cfn submit em sequência.
    Exemplo:

    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}}

    Observação: se seus testes de unidade não estiverem concluídos e você quiser ignorá-los, execute o mvn -Dmaven.test.skip=true package em vez do mvn package.

  4. Para definir a versão atual do seu projeto como padrão, execute o comando set-type-default-version da AWS Command Line Interface (AWS CLI):

    aws cloudformation set-type-default-version --type RESOURCE --type-name Organization::Service::Resource --version-id 00000005

    Observação: substitua Organization::Service::Resource nome do seu tipo de recurso. Além disso, substitua 00000005 pela versão mais recente da compilação que o cfn submit retorna na chave TypeVersionArn. Se você receber erros ao executar comandos da AWS CLI, consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

  5. Execute o comando a seguir para definir a versão do tipo atual como padrão:

    cfn submit --set-default

    Para mais informações, consulte submeter.

  6. Para solucionar os problemas dos testes, use o arquivo rpdk.log no diretório raiz do seu projeto.

Se você usa um provedor de recursos e recebe um tipo diferente de erro, consulte os seguintes artigos do Centro de Conhecimento da AWS para obter etapas adicionais de solução de problemas:

Informações relacionadas

CLI do CloudFormation no site do GitHub.

AWS OFICIAL
AWS OFICIALAtualizada há um mês