使用 ansible playbook 启动已停止的 AWS 实例

问题描述 投票:0回答:4

我正在尝试

stop/start
group
下的
hosts
文件中列出的特定实例
[target]
。 以下剧本可以很好地停止实例。

---
- 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

但是当我尝试启动这些实例时,它不起作用,因为

ec2_facts
无法
ssh
进入实例(因为它们现在已停止)并获取
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

我已经看过使用

dynamic inventory
文件作为主机的文档以及对
instance-ids
进行硬编码的方法。我想启动
IPs
文件的
target
组中列出的实例。
    

amazon-web-services ansible
4个回答
5
投票
hosts


ansible-task

这里是关于如何使用 ansible 启动/停止 ec2 实例的博客文章


1
投票

选项1

使用 AWS CLI 使用 IP 或名称查询已停止实例的实例 ID。例如,要查询给定实例名称的实例 ID:

--- - 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

选项2

将 Ansible 升级到版本 2.0(越过山丘和遥远的地方)并使用新的 ec2_remote_facts 模块

shell: aws ec2 describe-instances --filters 'Name=tag:Name,Values={{inst_name}}' --output text --query 'Reservations[*].Instances[*].InstanceId' register: inst_id



0
投票
gather_facts: False

以防止 Ansible 尝试通过 SSH 连接到主机,因为它们没有运行: - ec2_remote_facts: filters: instance-state-name: stopped

如果您需要在实例启动后收集事实,则可以使用 
setup

模块在实例启动后显式收集事实。 编辑:我刚刚意识到问题是您正在尝试访问 ansible_ec2_instance_id 事实,但由于实例已关闭而无法获取。 您可能想看看

这个名为 ec2_lookup 的自定义模块

,即使实例已关闭,它也可以让您搜索并获取 AWS 实例 ID。使用它,您可以获得您感兴趣的实例的列表,然后启动它们。


0
投票

- hosts: target remote_user: ubuntu gather_facts: false

	
© www.soinside.com 2019 - 2024. All rights reserved.