Easy methods to create an AWS EC2 occasion in CloudFormation

Create an EC2 Occasion in CloudFormation#

If you could create an EC2 occasion in CloudFormation, then you are able to do the next:

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      SecurityGroupIds:
        - sg-abc01234
      SubnetId: subnet-abc01234

You may set the Occasion Identify as follows:

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      SecurityGroupIds:
        - sg-abc01234
      SubnetId: subnet-abc01234
      Tags:
        -
          Key: Identify
          Worth: webserver

You may Allow Monitoring as follows:

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      Monitoring: true
      SecurityGroupIds:
        - sg-abc01234
      SubnetId: subnet-abc01234
      Tags:
        -
          Key: Identify
          Worth: webserver

You may add Termination Safety as follows:

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:
      DisableApiTermination: true
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      Monitoring: true
      SecurityGroupIds:
        - sg-abc01234
      SubnetId: subnet-abc01234
      Tags:
        -
          Key: Identify
          Worth: webserver

Easy methods to Enhance the Root Quantity Dimension#

You may Enhance the Root Quantity Dimension as follows:

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:
      BlockDeviceMappings:
        -
          DeviceName: "/dev/sda1"
          Ebs:
            VolumeSize: 24
            VolumeType: gp2
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      SecurityGroupIds:
        - sg-abc01234
      SubnetId: subnet-abc01234

Storage in CloudFormation EC2 Cases#

You may Add Further Occasion Storage as follows:

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:
      BlockDeviceMappings:
        -
          DeviceName: "/dev/sda1"
          Ebs:
            VolumeSize: 24
            VolumeType: gp2
        -
          DeviceName: "/dev/sdf"
          Ebs:
            VolumeSize: 64
            VolumeType: gp2
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      SecurityGroupIds:
        - sg-abc01234
      SubnetId: subnet-abc01234

You may Connect an Occasion Quantity as follows:

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:      
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      SecurityGroupIds:
        - sg-abc01234
      SubnetId: subnet-abc01234
      Volumes:
        -
          System: "/dev/sdf"
          VolumeId: !Ref LogVolume

  LogVolume:
    Kind: AWS::EC2::Quantity
    DeletionPolicy: Snapshot
    Properties:
      AvailabilityZone: us-east-1a
      Dimension: 24
      Tags:
        -
          Key: Identify
          Worth: web-log-volume
      VolumeType: gp2

Safety Teams in EC2 Cases with CloudFormation#

You may Setup a Safety Group as follows:

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebSecurityGroup:
    Kind: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Net server
      GroupName: internet     
      VpcId: vpc-abc01234

One other instance:

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebSecurityGroup:
    Kind: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Net server
      GroupName: internet     
      VpcId: vpc-abc01234
      SecurityGroupIngress:
        -
          IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
        -
          IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0

One other instance:

AWSTemplateFormatVersion: "2010-09-09"
Assets:  
  DatabaseSecurityGroup:
    Kind: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Database server
      GroupName: database     
      VpcId: vpc-abc01234
      SecurityGroupIngress:
        -
          IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          SourceSecurityGroupId: sg-abc01234

One other instance utilizing referencing:

AWSTemplateFormatVersion: "2010-09-09"
Assets:  
  WebSecurityGroup:
    Kind: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Net server
      GroupName: internet     
      VpcId: vpc-abc01234
      SecurityGroupIngress:
        -
          IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

  DatabaseSecurityGroup:
    Kind: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Database server
      GroupName: database     
      VpcId: vpc-abc01234
      SecurityGroupIngress:
        -
          IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          SourceSecurityGroupId: !Ref WebSecurityGroup

Self referencing a Safety Group:

AWSTemplateFormatVersion: "2010-09-09"
Assets: 
  SwarmSecurityGroup:
    Kind: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Swarm server
      GroupName: swarm
      VpcId: vpc-abc01234

  SwarmIngress1:
    Kind: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: !Ref SwarmSecurityGroup
      IpProtocol: tcp
      FromPort: 2377
      ToPort: 2377
      SourceSecurityGroupId: !Ref SwarmSecurityGroup

  SwarmIngress2:
    Kind: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: !Ref SwarmSecurityGroup
      IpProtocol: tcp
      FromPort: 7946
      ToPort: 7946
      SourceSecurityGroupId: !Ref SwarmSecurityGroup

  SwarmIngress3:
    Kind: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: !Ref SwarmSecurityGroup
      IpProtocol: udp
      FromPort: 7946
      ToPort: 7946
      SourceSecurityGroupId: !Ref SwarmSecurityGroup
  
  SwarmIngress4:
    Kind: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: !Ref SwarmSecurityGroup
      IpProtocol: udp
      FromPort: 4789
      ToPort: 4789
      SourceSecurityGroupId: !Ref SwarmSecurityGroup

Attaching a Safety group to an Occasion#

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebSecurityGroup:
    Kind: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Net server
      GroupName: internet     
      VpcId: vpc-abc01234
      SecurityGroupIngress:
        -
          IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      SecurityGroupIds:
        - !Ref WebSecurityGroup
      SubnetId: subnet-abc01234

Utilizing an Elastic IP#

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      SecurityGroupIds:
        - sg-abc01234
      SubnetId: subnet-abc01234
  
  WebElasticIp:
    Kind: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref WebInstance
      Area: vpc

Utilizing all of it collectively in a single template#

AWSTemplateFormatVersion: "2010-09-09"
Assets:
  
  ## Safety group for WebInstance enabling port 80
  ## from all IP addresses
  WebSecurityGroup:
    Kind: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Net server
      GroupName: internet     
      VpcId: vpc-abc01234
      SecurityGroupIngress:
        -
          IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
 
  ## EC2 Occasion with a customized safety group
  ## and a bigger root occasion gadget
  ## and an externally created EBS quantity hooked up
  WebInstance:
    Kind: AWS::EC2::Occasion
    Properties:
      BlockDeviceMappings:
        -
          DeviceName: "/dev/sda1"
          Ebs:
            VolumeSize: 24
            VolumeType: gp2
      InstanceType: t2.nano
      ImageId: ami-80861296
      KeyName: my-key
      Monitoring: true
      SecurityGroupIds:
        - !Ref WebSecurityGroup
      SubnetId: subnet-abc01234
      Tags:
        -
          Key: Identify
          Worth: webserver
      Volumes:
        -
          System: "/dev/sdf"
          VolumeId: !Ref LogVolume
  
  ## EBS Quantity for storing internet logs
  LogVolume:
    Kind: AWS::EC2::Quantity
    DeletionPolicy: Snapshot
    Properties:
      AvailabilityZone: us-east-1a
      Dimension: 64
      Tags:
        -
          Key: Identify
          Worth: web-log-volume
      VolumeType: gp2

  ## Connect EIP to the occasion
  WebElasticIp:
    Kind: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref WebInstance
      Area: vpc