AWS 中此 Cloudformation 模板中的内在函数 !Ref 的错误是什么?

问题描述

最近我开始探索 YAML 格式的 AWS CloudFormation。我收到错误消息:

遇到不支持属性类型

YAML 代码说明如下:-

AWstemplateFormatVersion: 2010-09-09
Resources: 
  DevEC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: ami-04aa88aebb9fefd83
      Type: t2.micro
      KeyName: Newkey
      SecurityGroups:
       - default
       - !Ref SSHSecurityGroup
SSHSecurityGroup:
  Type: AWS::EC2::SecurityGroup
  Properties:
    GroupDescription: Group_For_CloudFormation
    SecurityGroupIngress:
    - Ipprotocol: tcp
      FromPort: '22'
      ToPort: '22'
      CidrIp: 0.0.0.0/0

解决方法

你能检查一下这个片段是否适合你吗?

Resources:

  DevEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-04aa88aebb9fefd83
      InstanceType: t2.micro
      KeyName: Newkey
      SecurityGroups:
        - default
        - !Ref SSHSecurityGroup
  SSHSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Group_For_CloudFormation
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
,

所以正确的代码如下:-

AWSTemplateFormatVersion: 2010-09-09
Resources: 
  DevEC2Instance:
   Type: AWS::EC2::Instance
   Properties:
     ImageId: ami-04aa88aebb9fefd83
     InstanceType: t2.micro
     KeyName: Newkey
     SecurityGroups:
      - default 
      - !Ref SSHSecurityGroup
  SSHSecurityGroup:
     Type: AWS::EC2::SecurityGroup
     Properties:
      GroupDescription: SMy Security Group
      SecurityGroupIngress:
       - IpProtocol: tcp
         FromPort: '22'
         ToPort: '22'
         CidrIp: 0.0.0.0/0
,

错误是由于资源 SSHSecurityGroup 上缺少缩进,在 YAML 中您需要小心缩进。这使得 Cloudformation 不将该元素作为资源,因为它处于同一缩进级别。

这应该有效:

AWSTemplateFormatVersion: 2010-09-09
Resources: 
  DevEC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: ami-04aa88aebb9fefd83
      InstanceType: t2.micro
      KeyName: Newkey
      SecurityGroups:
       - default
       - !Ref SSHSecurityGroup
  SSHSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Group_For_CloudFormation
      SecurityGroupIngress:
       - IpProtocol: tcp
         FromPort: '22'
         ToPort: '22'
         CidrIp: 0.0.0.0/0