Search code examples
amazon-web-servicesansible

start the stopped AWS instances using ansible playbook


I am trying to stop/start the particular group of instances listed in the hosts file under group [target]. following playbook works fine to stop the instances.

---
- hosts: target
  remote_user: ubuntu

  tasks:
  - name: Gather facts
    action: ec2_facts

  - name: Stop Instances
    local_action:
        module: ec2
        region: "{{region}}"
        instance_ids: "{{ansible_ec2_instance_id}}"
        state: stopped

But when I am trying to start these instances, it's not working as the ec2_facts is not able to ssh into the instances (since they are stopped now) and get the instance-ids

---
- hosts: target
  remote_user: ubuntu

  tasks:
  - name: start instances
    local_action:
        module: ec2
        region: "{{region}}"
        instance_ids: "{{ansible_ec2_instance_id}}"
        state: running

I have already seen the documentation which make use of dynamic inventory file for hosts and the way of hard-coding the instance-ids. I want to start the instances whose IPs are listed in the target group of hosts file.


Solution

  • Got the solution, Following is the ansible-task that worked for me.

    ---
    - name: Start instances
      hosts: localhost
      gather_facts: false
      connection: local
      vars:
        instance_ids:
          - 'i-XXXXXXXX'
        region: ap-southeast-1
      tasks:
        - name: Start the feature instances
          ec2:
            instance_ids: '{{ instance_ids }}'
            region: '{{ region }}'
            state: running
            wait: True
    

    Here is the Blog post on How to start/stop ec2 instances with ansible