Quantcast
Channel: Crunchify
Viewing all articles
Browse latest Browse all 1037

How to Create, Start and Configure Amazon EC2 instance using simple Ansible Script? (spawn VM remotely)

$
0
0

How to Create, Start and configure Amazon AWS using Simple Ansible State

Amazon AWS is no doubt the best public cloud out there. As we discussed in previous tutorials, Ansible is a very handy tool for sysops to maintain their company infrastructure.

In this tutorial we will go over steps on how to create, start and setup Amazon EC2 instance using simple Ansible scripts.

Details:

  1. specify instance_type: t2.micro
  2. specify security_group: crunchify_security_grp
    • Change the security group as per your need.
  3. specify image: ami-crunchify231di
    • You need to create Amazon Image before executing this.
  4. specify keypair: crunchify
    • This is your security key for password less login.
  5. choose default region: us-east-2
    • Default region that I would recommend.
  6. number of VMs you want to start: 1
    • start with VM 1.
  7. create basic firewall group
  8. create Amazon EC2 instance
  9. Wait for instance to come up
  10. Get IP address and save in file crunchify.txt file
    • you need to create crunchify.txt before executing this ansible script.
  11. Tag newly created instance as crunchify

Step-1)

Install ansible on macOS. Make sure you have setup Ansible right way 🙂

Step-2)

You need to export your AWS Access Key and Secret Access Key. Please follow tutorial on how to Setup Amazon AWS CLI to get your keys.

export AWS_ACCESS_KEY_ID=JHKHLJLHJHJK2SHIY27AIF
export AWS_SECRET_ACCESS_KEY=QLKJDKIAYXNIWN2ZHIY27AI54345HKLHJ

Step-3) Create crunchify-host file

[local]
localhost ansible_connection=local ansible_python_interpreter=python

Step-4) Create crunchify-ec2.yml file

---
  - name: Provision an EC2 Instance. Detailed steps by Crunchify.
    hosts: local
    connection: local
    gather_facts: False
    tags: provisioning
    # required parameters
    vars:
      instance_type: t2.micro
      security_group: crunchify_security_grp
      image: ami-crunchify231di
      keypair: crunchify
      region: us-east-2 # Change the Region
      count: 1
 
    # Task that will be used to Launch/Create an EC2 Instance
    tasks:

      - name: Create a security group
        local_action: 
          module: ec2_group
          name: "{{ security_group }}"
          description: Security Group for Crunchify's EC2 Servers
          region: "{{ region }}"
          rules:
            - proto: tcp
              from_port: 22
              to_port: 22
              cidr_ip: 0.0.0.0/0
            - proto: tcp
              from_port: 8080
              to_port: 8080
              cidr_ip: 0.0.0.0/0
            - proto: tcp
              from_port: 443
              to_port: 443
              cidr_ip: 0.0.0.0/0
          rules_egress:
            - proto: all
              cidr_ip: 0.0.0.0/0
        register: basic_firewall
        
      - name: Launching Crunchify's the new EC2 Instance
        local_action: ec2 
                      group={{ security_group }} 
                      instance_type={{ instance_type}} 
                      image={{ image }} 
                      wait=true
                      wait_timeout=500 
                      region={{ region }} 
                      keypair={{ keypair }}
                      count={{count}}
        register: ec2_crunchify

      - name: Add the newly created EC2 instance(s) to the local host group
        local_action: lineinfile 
                      path=crunchify.txt
                      regexp={{ item.public_ip }} 
                      insertafter="[crunchify]" line={{ item.public_ip }}
        with_items: '{{ec2_crunchify.instances}}'

      - name: Add new instance to Crunchify's host group
        add_host:
          hostname: "{{ item.public_ip }}"
          groupname: launched
        with_items: "{{ ec2_crunchify.instances }}"

      - name: Let's wait for SSH to come up. Usually that takes ~10 seconds
        local_action: wait_for 
                      host={{ item.public_ip }} 
                      port=22 
                      state=started
        with_items: '{{ ec2_crunchify.instances }}'

      - name: Add tag to Instance(s)
        local_action: ec2_tag resource={{ item.id }} region={{ region }} state=present
        with_items: '{{ ec2_crunchify.instances }}'
        args:
          tags:
            Name: crunchify

Step-5) Execute ansible playbook

ansible-playbook -i ./hosts crunchify-ec2.yml

Ansible Result:

bash3.2 $ ansible-playbook -i ./hosts crunchify-ec2.yml 

PLAY [Provision an EC2 Instance. Detailed steps by Crunchify.] ****************************************************************************************************************

TASK [Create a security group] ************************************************************************************************************************************************
ok: [localhost -> localhost]

TASK [Master - Launch the new EC2 Instance] ***********************************************************************************************************************************
changed: [localhost -> localhost]

TASK [Add the newly created EC2 instance(s) to the local host group] **********************************************************************************************************
changed: [localhost -> localhost] => (item={u'ramdisk': None, u'kernel': None, u'root_device_type': u'ebs', u'private_dns_name': u'ip-172-31-41-108.us-east-2.compute.internal', u'block_device_mapping': 
{u'/dev/sda1': {u'status': u'attached', u'delete_on_termination': True, u'volume_id': u'vol-06d37e8354c769d93'}}, u'key_name': u'crunchify', u'public_ip': u'3.19.60.48', u'image_id': u'ami-crunchify231di', u'tenancy': u'default', u'private_ip': u'172.31.41.108', u'groups': 
{u'sg-0eb80f388be5a7c35': u'crunchify_security_grp'}, u'public_dns_name': u'ec2-3-19-60-48.us-east-2.compute.amazonaws.com', u'state_code': 16, u'id': u'i-0e447dd1223a40f8e', u'tags': {}, u'placement': u'us-east-2c', u'ami_launch_index': u'0', u'dns_name': u'ec2-3-19-60-48.us-east-2.compute.amazonaws.com', u'region': u'us-east-2', u'ebs_optimized': False, u'launch_time': u'2019-05-10T18:48:18.000Z', u'instance_type': u't2.micro', u'state': u'running', u'architecture': u'x86_64', u'hypervisor': u'xen', u'virtualization_type': u'hvm', u'root_device_name': u'/dev/sda1'})

TASK [Add new instance to host group] *****************************************************************************************************************************************
changed: [localhost] => (item={u'ramdisk': None, u'kernel': None, u'root_device_type': u'ebs', u'private_dns_name': u'ip-172-31-41-108.us-east-2.compute.internal', u'block_device_mapping': 
{u'/dev/sda1': {u'status': u'attached', u'delete_on_termination': True, u'volume_id': u'vol-06d37e8354c769d93'}}, u'key_name': u'crunchify', u'public_ip': u'3.19.60.48', u'image_id': u'ami-crunchify231di', u'tenancy': u'default', u'private_ip': u'172.31.41.108', u'groups': 
{u'sg-0eb80f388be5a7c35': u'crunchify_security_grp'}, u'public_dns_name': u'ec2-3-19-60-48.us-east-2.compute.amazonaws.com', u'state_code': 16, u'id': u'i-0e447dd1223a40f8e', u'tags': {}, u'placement': u'us-east-2c', u'ami_launch_index': u'0', u'dns_name': u'ec2-3-19-60-48.us-east-2.compute.amazonaws.com', u'region': u'us-east-2', u'ebs_optimized': False, u'launch_time': u'2019-05-10T18:48:18.000Z', u'instance_type': u't2.micro', u'state': u'running', u'architecture': u'x86_64', u'hypervisor': u'xen', u'virtualization_type': u'hvm', u'root_device_name': u'/dev/sda1'})

TASK [Wait for SSH to come up] ************************************************************************************************************************************************
ok: [localhost -> localhost] => (item={u'ramdisk': None, u'kernel': None, u'root_device_type': u'ebs', u'private_dns_name': u'ip-172-31-41-108.us-east-2.compute.internal', u'block_device_mapping': 
{u'/dev/sda1': {u'status': u'attached', u'delete_on_termination': True, u'volume_id': u'vol-06d37e8354c769d93'}}, u'key_name': u'crunchify', u'public_ip': u'3.19.60.48', u'image_id': u'ami-crunchify231di', u'tenancy': u'default', u'private_ip': u'172.31.41.108', u'groups': 
{u'sg-0eb80f388be5a7c35': u'crunchify_security_grp'}, u'public_dns_name': u'ec2-3-19-60-48.us-east-2.compute.amazonaws.com', u'state_code': 16, u'id': u'i-0e447dd1223a40f8e', u'tags': {}, u'placement': u'us-east-2c', u'ami_launch_index': u'0', u'dns_name': u'ec2-3-19-60-48.us-east-2.compute.amazonaws.com', u'region': u'us-east-2', u'ebs_optimized': False, u'launch_time': u'2019-05-10T18:48:18.000Z', u'instance_type': u't2.micro', u'state': u'running', u'architecture': u'x86_64', u'hypervisor': u'xen', u'virtualization_type': u'hvm', u'root_device_name': u'/dev/sda1'})

TASK [Add tag to Instance(s)] *************************************************************************************************************************************************
changed: [localhost -> localhost] => (item={u'ramdisk': None, u'kernel': None, u'root_device_type': u'ebs', u'private_dns_name': u'ip-172-31-41-108.us-east-2.compute.internal', u'block_device_mapping': 
{u'/dev/sda1': {u'status': u'attached', u'delete_on_termination': True, u'volume_id': u'vol-06d37e8354c769d93'}}, u'key_name': u'crunchify', u'public_ip': u'3.19.60.48', u'image_id': u'ami-crunchify231di', u'tenancy': u'default', u'private_ip': u'172.31.41.108', u'groups': 
{u'sg-0eb80f388be5a7c35': u'crunchify_security_grp'}, u'public_dns_name': u'ec2-3-19-60-48.us-east-2.compute.amazonaws.com', u'state_code': 16, u'id': u'i-0e447dd1223a40f8e', u'tags': {}, u'placement': u'us-east-2c', u'ami_launch_index': u'0', u'dns_name': u'ec2-3-19-60-48.us-east-2.compute.amazonaws.com', u'region': u'us-east-2', u'ebs_optimized': False, u'launch_time': u'2019-05-10T18:48:18.000Z', u'instance_type': u't2.micro', u'state': u'running', u'architecture': u'x86_64', u'hypervisor': u'xen', u'virtualization_type': u'hvm', u'root_device_name': u'/dev/sda1'})

PLAY RECAP ********************************************************************************************************************************************************************
localhost                  : ok=6    changed=4    unreachable=0    failed=0

Let’s verify that new instance got created successfully with all our specifications

Go to Amazon AWS console to check instance.

Link: https://us-east-2.console.aws.amazon.com/ec2/v2/home?region=us-east-2#Instances:sort=instanceId

New Amazon EC2 instance was created - Crunchify Tips

Make sure you verify all your settings.

Amazon EC2 - new security group and instance type created - Tutorial by Crunchify

Check your Tags. This is very helpful if you are dealing with hundreds of instances.

Amazon EC2 - new tag and name created - Crunchify Tips

Check crunchify.txt file which has newly created hosts’s IP:

bash3.2 $ cat crunchify.txt 
18.217.28.189

That’s it. Congratulation. You have just created and started new EC2 instance on Amazon AWS cloud remotely using Ansible.

Let me know if you face any issue creating instance on Amazon EC2 cloud.

The post How to Create, Start and Configure Amazon EC2 instance using simple Ansible Script? (spawn VM remotely) appeared first on Crunchify.


Viewing all articles
Browse latest Browse all 1037

Trending Articles