Amazon ec2 通过ansible标记启动以前停止的EC2实例

Amazon ec2 通过ansible标记启动以前停止的EC2实例,amazon-ec2,ansible,Amazon Ec2,Ansible,我正在尝试创建一个剧本或角色,让我可以使用ansible by标记启动以前停止的EC2实例(EC2实例通过标记分配给清单中的静态组)。将更改ec2.ini文件,以同时返回有关已停止实例的信息。到目前为止,我所看到的唯一类似示例依赖于ec2\u facts来获取instance\u id ansible网站上的官方假设区域和实例ID已经预先知道/硬编码 - name: Start sandbox instances hosts: localhost gather_facts: false

我正在尝试创建一个剧本或角色,让我可以使用ansible by标记启动以前停止的EC2实例(EC2实例通过标记分配给清单中的静态组)。将更改
ec2.ini
文件,以同时返回有关已停止实例的信息。到目前为止,我所看到的唯一类似示例依赖于
ec2\u facts
来获取
instance\u id

ansible网站上的官方假设
区域
实例ID
已经预先知道/硬编码


- name: Start sandbox instances
  hosts: localhost
  gather_facts: false
  connection: local
  vars:
    instance_ids:
      - 'i-xxxxxx'
      - 'i-xxxxxx'
      - 'i-xxxxxx'
    region: us-east-1
  tasks:
    - name: Start the sandbox instances
      ec2:
        instance_ids: '{{ instance_ids }}'
        region: '{{ region }}'
        state: running
        wait: True
        vpc_subnet_id: subnet-29e63245
        assign_public_ip: yes
  role:
    - do_neat_stuff
    - do_more_neat_stuff

最好我正在寻找一种解决方案,例如,如果可能的话,我可以从动态资源清册中获取必要的变量。

现有EC2实例可以从下面的播放开始,而不需要硬编码实例标识符或EC2区域


---ec2.yml
-主持人:aws
收集事实:错误
任务:
-名称:启动EC2实例
地方行动:
模块:ec2
状态=运行
region={{hostvars[inventory_hostname]['ec2_region']}
实例_id={{hostvars[inventory_hostname]['ec2_id']}
标签:
-开始实例

假设动态实例已标记,则以下命令将启动实例:


$ansible playbook-i inventory--limit[instance static group name]--tags start instance ec2.yml

首先,您必须告诉动态资源清册脚本返回停机的主机。在ec2.ini文件中设置为“False”。将其更改为“True”:

以下是我使用的剧本:

---
- hosts: "{{ ip_list | default( 'ec2' ) }}"
  connection: ssh
  gather_facts: false
  tasks:
  - name: Start instance
    ec2:
      state: running
      instance_id: "{{ ec2_id }}"
      key_name: "{{ key_name }}"
      region: "{{ region }}"
      wait: true
    delegate_to: localhost

key\u nameregion在我的group\u vars/all文件中定义,ec2\u id来自ansible,带有主机信息,ip\u list在命令行上定义。

我相信您可以迭代标记并使用
ansible\u ec2\u实例id
。如果您需要更多信息,请告诉我。如果我们想要启动具有
弹性IP的实例,并且这些实例列在
组下的
主机
文件中,比如说
[停止的实例]
在哪里记录了部分:instance_id={{{hostvars[inventory_hostname]['ec2_id']}?关于.ini文件的一点非常好。您可以添加关于组变量/all和命令行/如何运行它的示例吗?
groupvars/all
中唯一相关的内容是
key\u name
region
。密钥_名称是在构建库存时设置的,因此我们可以对不同的库存使用不同的密钥。命令行就是ansibleplaybookstart\u实例-e“ip\u list=first,second,third”
# By default, only EC2 instances in the 'running' state are returned. Set
# 'all_instances' to True to return all instances regardless of state.
all_instances = True
---
- hosts: "{{ ip_list | default( 'ec2' ) }}"
  connection: ssh
  gather_facts: false
  tasks:
  - name: Start instance
    ec2:
      state: running
      instance_id: "{{ ec2_id }}"
      key_name: "{{ key_name }}"
      region: "{{ region }}"
      wait: true
    delegate_to: localhost