接收错误属性验证失败:[属性值{/ TableInput / ViewOriginalText}与类型{String}不匹配] AWS cloudformation

问题描述

我正在尝试使用表中的数据创建外部视图,但是收到错误属性验证失败:[AWS]中使用云形成在AWS胶水中创建视图时[属性{/ TableInput / ViewOriginalText}的值与类型{String}不匹配]

任何关于分辨率的想法都将不胜感激。以下是我正在使用的yaml文件代码段。

预先感谢

---
AWstemplateFormatVersion: 2010-09-09
Description: "glue Athena database and table configuration"
Parameters:

  MarketingAndSalesDatabaseName:
    Type: String
    MinLength: "4"
    Default: "marketingandsales_qs"
    Description: "Name of the AWS glue database to contain this CloudFormation template's tables."

  SalesPipelineTableName:
    Type: String
    MinLength: "4"
    Default: "salespipeline_qs"
    Description: "Name of the Sales Pipeline data table in AWS glue."

Resources:

  ### AWS gluE RESOURCES ###

  MarketingAndSalesDatabase:
    Type: "AWS::glue::Database"
    Properties:
      DatabaseInput:
        Description: "Marketing and Sales database (Amazon QuickSight Samples)."
        Name: !Ref MarketingAndSalesDatabaseName
      CatalogId: !Ref AWS::AccountId

  SalesPipelineTable:
    Type: "AWS::glue::Table"
    DependsOn: MarketingAndSalesDatabase
    Properties:
      TableInput:
        Description: "Sales Pipeline table (Amazon QuickSight Sample)."
        TableType: "VIRTUAL_VIEW"
        Parameters: {
                "CrawlerSchemaDeserializerVersion": "1.0","compressionType": "none","classification": "csv","recordCount": "16831","typeOfData": "file","CrawlerSchemaSerializerVersion": "1.0","columnsOrdered": "true","objectCount": "1","delimiter": ",","skip.header.line.count": "1","averageRecordSize": "119","sizeKey": "2002910","presto_view": "true"
        }
        StorageDescriptor:
          StoredAsSubDirectories: False
          Parameters: {
                  "CrawlerSchemaDeserializerVersion": "1.0","sizeKey": "2002910"
          }
          InputFormat: "org.apache.hadoop.mapred.TextInputFormat"
          OutputFormat: "org.apache.hadoop.hive.ql.io.HiveIgnoreKeytextoutputFormat"
          Columns:
            - Type: string
              Name: salesperson
            - Type: string
              Name: lead_name
        ViewOriginalText:
          'Fn::Sub':
            - '/* Presto View: ${View} */'
            - View:
                 'Fn::Base64': !sub '{"catalog": "awsdatacatalog","schema":"default","columns": [ { "name": "salesperson","type": "varchar" },{ "name": "lead_name","type": "varchar" }],"originalsql": "SELECT salesperson AS salesperson,lead_name AS lead_name FROM marketing_qs_1"
                  }'
        Retention: 0
        Name: !Ref SalesPipelineTableName
      DatabaseName: !Ref MarketingAndSalesDatabaseName
      CatalogId: !Ref AWS::AccountId

解决方法

这些属性应位于StorageDescriptor下方,而不是ViewOriginalText

          Compressed: False
          Location: !Sub "s3://${DataBucketName}/sales/"

建议在创作模板时尝试在CloudFormation Linter中的VSCode内联查看其中一些错误:

Visual Studio Code screenshot

[cfn-lint] E3002: Property is an object instead of String at Resources/SalesPipelineTable/Properties/TableInput/ViewOriginalText

在该Sub中也不需要

Base64

[cfn-lint] W1020: Fn::Sub isn't needed because there are no variables at Resources/SalesPipelineTable/Properties/TableInput/ViewOriginalText/Fn::Sub/1/View/Fn::Base64/Fn::Sub