无法识别的资源类型

问题描述 投票:0回答:3

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

我发现这篇Q/A 帖子 展示了建立 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 上:

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

aws-cloudformation amazon-rds serverless-framework
3个回答
4
投票

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


2
投票

如果您收到错误“无法识别的“资源类型””,则意味着您的代码中存在语法问题。

检查“无法识别的资源类型”后面的拼写错误:

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

在这种情况下,应该是

Type: AWS::DynamoDB::Table

1
投票

我遇到了这个问题,解决方案是将以下行添加到 template.yaml 的顶部

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

使用 SAM 特定资源类型(例如

AWS::Serverless*
)时,您必须在 Cloudformation 模板中定义
AWS:Serverless
转换。为此,请在模板顶部包含
Transform
属性。

© www.soinside.com 2019 - 2024. All rights reserved.