无法识别的资源类型

问题描述

我试图了解无服务器的工作方式。我已经阅读了许多他们的文档/教程,但是当我到达要构建特定对象(如RDS实例)的那一部分时,对于MVP的外观我没有任何参考框架。

我发现这个Q/A post展示了站起来RDS实例的基础知识。我换出该区域换了一个比较本地的区域,然后尝试了一下:

service: sandBox
app: sandBox
org: # omitting 

provider:
  name: aws
  runtime: nodejs12.x

resources:
  Resources:
    Vpc:
      Type: AWS:EC2::VPC
      Properties:
        CidrBlock: 10.0.0.0/16
        InstanceTenancy: default

    Publicsubnet:
      Type: AWS::EC2::subnet
      Properties:
        CidrBlock: 10.0.0.0/18
        VpcId:
          Ref: Vpc

    Privatesubnet1:
      Type: AWS::EC2::subnet
      Properties:
        AvailabilityZone: ca-central-1a
        CidrBlock: 10.0.64.0/18
        VpcId:
          Ref: Vpc

    Privatesubnet2:
      Type: AWS::EC2::subnet
      Properties:
        AvailabilityZone: ca-central-1b
        CidrBlock: 10.0.128.0/18
        VpcId:
          Ref: Vpc

    Database:
      Type: AWS::RDS:DBInstance
      Properties:
        Engine: aurora
        EngineVersion: 5.6.10a
        DBInstanceClass: db.r5.large
        dbname: MyDatabase
        MasterUsername: test
        MasterUserPassword: # ommitting
        DBsubnetGroupName:
          Ref: DBsubnetGroup
        VPCSecurityGroups:
          - Ref: DatabaseVpcSecurityGroup

    DBsubnetGroup:
      Type: "AWS::RDS::DBsubnetGroup"
      Properties: 
        DBsubnetGroupName: PrivateDbsubnet
        DBsubnetGroupDescription: PrivateDbsubnet
        subnetIds:
          - Ref: Privatesubnet1
          - Ref: Privatesubnet2

    DatabaseVpcSecurityGroup:
      Type: "AWS::EC2::SecurityGroup"
      Properties:
        GroupName: DBSecurityGroup
        GroupDescription: Allow local access
        SecurityGroupIngress:
          - CidrIp: 10.0.0.0/16
            IpProtocol: tcp
            FromPort: 3306
            ToPort: 3306
        VpcId: 
            Ref: Vpc

当我尝试使用无服务器部署它时,出现以下错误The CloudFormation template is invalid: Template format error: Unrecognized resource types: [AWS:EC2::VPC,AWS::RDS:DBInstance]

我可以看到这些资源存在于AWS上:

那么...这个错误是什么意思?我在做什么错了?

解决方法

您的资源类型中有错别字。在这两种情况下,您都有一个冒号(:),而您应该有一个双冒号(::)

,

如果您收到错误 Unrecognized "Resource Types",则表示您的代码存在语法问题。

检查“无法识别的资源类型”后是否有错别字:

Unrecognized resource types: [AWS::Dynamo::Table]

在这种情况下,应该是

Type: AWS::DynamoDB::Table