Create Aws Cloudformation Ec2 t2.micro Template

13,393

Solution 1

You can make use the following template snippet.
It will output the EC2 instance Public DNS name.

Note: I haven't tested this template!

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "CloudFormation template for creating an ec2 instance",
    "Parameters": {
        "KeyName": {
            "Description": "Key Pair name",
            "Type": "AWS::EC2::KeyPair::KeyName",
            "Default": "my_keypair_name"
        },
        "VPC": {
            "Type": "AWS::EC2::VPC",
            "Properties":{
                "CidrBlock": "10.0.0.0/16",
                "EnableDnsHostnames": "true"
            }
        },
        "Subnet":{
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {"Ref": "VPC"},
                "CidrBlock": "10.0.0.0/24",
                "AvailabilityZone": "us-east-1a"
            }
        },
        "InstanceType": {
            "Description": "Select one of the possible instance types",
            "Type": "String",
            "Default": "t2.micro",
            "AllowedValues": ["t2.micro", "t2.small", "t2.medium"]
        }
    },
    "Resources":{
        "SecurityGroup":{
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "My security group",
                "VpcId": {"Ref": "VPC"},
                "SecurityGroupIngress": [{
                    "CidrIp": "0.0.0.0/0",
                    "FromPort": 22,
                    "IpProtocol": "tcp",
                    "ToPort": 22
                }]
            }
        },
        "Server": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "ImageId": "ami-123456",
                "InstanceType": {"Ref": "InstanceType"},
                "KeyName": {"Ref": "KeyName"},
                "SecurityGroupIds": [{"Ref": "SecurityGroup"}],
                "SubnetId": {"Ref": "Subnet"}
            }
        }
    },
    "Outputs": {
        "PublicName": {
            "Value": {"Fn::GetAtt": ["Server", "PublicDnsName"]},
            "Description": "Public name (connect via SSH)"
        }   
    }
}

For more information see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html

Solution 2

Below stack allows to create EC2 instance, just specify parameters like VPC id,Subnet Id, SG id, instance type, also ami id , for instance type u can define in this it is t2,micro by default. This Is sucessfully tested and running w/o errors.kindly comment if you have any queries.######Created by MARK Machines So is this,:

    {"Description": "CloudFormation template for creating an ec2 instance",
"Parameters": {
    "KeyName": {
        "Description": "Key Pair name",
        "Type": "AWS::EC2::KeyPair::KeyName",
        "Default": "xxx-xxx"
    },
    "VPC": {
        "Type": "AWS::EC2::VPC::Id",
        "Default":"givevpcid"
    },
    "Subnet":{
        "Type": "AWS::EC2::Subnet::Id",
        "Default": "givesubnetid"
    },
    "InstanceType": {
        "Description": "Select one of the possible instance types",
        "Type": "String",
        "Default": "t2.micro",
        "AllowedValues": ["t2.micro", "t2.small", "t2.medium"]
    },
    "SecurityGroup":{
         "Type": "AWS::EC2::SecurityGroup::Id",
         "Default" : "givesecuritygroupid",
         "AllowedValues": ["sg-xxxxx", "sg-yyy", "sg-zzz"]
    } 
},
"Resources":{
    "Server": {
        "Type": "AWS::EC2::Instance",
        "Properties": {
            "ImageId": "ami-098789xxxxxxxxx",
            "InstanceType": {"Ref": "InstanceType"},
            "KeyName": {"Ref": "KeyName"},
            "SecurityGroupIds": [{"Ref": "SecurityGroup"}],
            "SubnetId": {"Ref": "Subnet"}
        }
    }
},
"Outputs": {
    "PublicName": {
        "Value": {"Fn::GetAtt": ["Server", "PublicDnsName"]},
        "Description": "Public name (connect via SSH)"
    }   
}

}

Solution 3

You can use my following template which works fine.

single-instance.yml

AWSTemplateFormatVersion: 2010-09-09
Description: >-
  AWS CloudFormation Sample Template EC2InstanceWithSecurityGroupSample: Create
  an Amazon EC2 instance running the Amazon Linux AMI. The AMI is chosen based
  on the region in which the stack is run. This example creates an EC2 security
  group for the instance to give you SSH access. **WARNING** This template
  creates an Amazon EC2 instance. You will be billed for the AWS resources used
  if you create a stack from this template.
Parameters:
  KeyName:
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instance
    Type: 'AWS::EC2::KeyPair::KeyName'
    ConstraintDescription: must be the name of an existing EC2 KeyPair.
  InstanceType:
    Description: WebServer EC2 instance type
    Type: String
    Default: t2.micro
    ConstraintDescription: must be a valid EC2 instance type.
  SSHLocation:
    Description: The IP address range that can be used to SSH to the EC2 instances
    Type: String
    MinLength: '9'
    MaxLength: '18'
    Default: 0.0.0.0/0
    AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})'
    ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
Mappings:
  AWSInstanceType2Arch:
    t2.micro:
      Arch: HVM64
  AWSInstanceType2NATArch:
    t2.micro:
      Arch: NATHVM64
  AWSRegionArch2AMI:
    us-east-1:
      HVM64: ami-0080e4c5bc078760e
      HVMG2: ami-0aeb704d503081ea6
Resources:
  EC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      InstanceType: !Ref InstanceType
      SecurityGroups:
        - !Ref InstanceSecurityGroup
      KeyName: !Ref KeyName
      ImageId: !FindInMap 
        - AWSRegionArch2AMI
        - !Ref 'AWS::Region'
        - !FindInMap 
          - AWSInstanceType2Arch
          - !Ref InstanceType
          - Arch
  InstanceSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: Enable SSH access via port 22
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: '22'
          ToPort: '22'
          CidrIp: !Ref SSHLocation
Outputs:
  InstanceId:
    Description: InstanceId of the newly created EC2 instance
    Value: !Ref EC2Instance
  AZ:
    Description: Availability Zone of the newly created EC2 instance
    Value: !GetAtt 
      - EC2Instance
      - AvailabilityZone
  PublicDNS:
    Description: Public DNSName of the newly created EC2 instance
    Value: !GetAtt 
      - EC2Instance
      - PublicDnsName
  PublicIP:
    Description: Public IP address of the newly created EC2 instance
    Value: !GetAtt 
      - EC2Instance
      - PublicIp 

Then Run Following Command:

aws cloudformation create-stack --template-body file://single-instance.yml --stack-name single-instance --parameters ParameterKey=KeyName,ParameterValue=sample ParameterKey=InstanceType,ParameterValue=t2.micro
Share:
13,393
Arda Güçlü
Author by

Arda Güçlü

Updated on July 20, 2022

Comments

  • Arda Güçlü
    Arda Güçlü almost 2 years

    I would like to create a CloudFormation template whose instance type is "t2.micro". However, i couldn't find any example about this instance type. Ec2 whose type is "t2.micro" needs VPC, etc.

    Thanks.