【问题标题】:Error while creating Aws ec2 instance using Ansible使用 Ansible 创建 Aws ec2 实例时出错
【发布时间】:2019-12-02 12:48:40
【问题描述】:

我已经运行了创建 aws 实例的简单任务。

在我从 AWS Web 控制台终止 ec2 实例之后创建了实例。后来我向它添加了更多任务,但永远无法使用这些任务创建 ec2 实例。

我一直收到以下错误:

致命:[本地主机]:失败! => {"changed": false, "msg": "id(s) ['i-0f513aec91787e83d'] 的实例之前已创建,但已被终止 - 使用(可能不同的)'instance-id' 参数"}

它不断报告先前的实例 ID。我可以看到我的 AWS 控制台中没有这样的实例。

谁能解释一下为什么会这样?

- name: get any running ec2 instance
  ec2_instance_info:
    aws_access_key: "{{ec2_access_key}}"
    aws_secret_key: "{{ec2_secret_key}}"
    region: "{{region}}"
    filters:
      instance-state-name: ['running']
  register: ec2_list

- name: Display ec2_list
  debug: msg="{{item.instance_id}}"
  with_items: "{{ec2_list.instances}}"


- name: Terminate Any running Instances
  ec2:
    state: 'absent'
    instance_ids: "{item.instance_id}"
  with_items: "{{ec2_list.instances}}"


- name: Create new ec-2 instance
  ec2:
    aws_access_key: "{{ec2_access_key}}"
    aws_secret_key: "{{ec2_secret_key}}"
    key_name: "{{key_name}}"
    id: "{{id}}"
    instance_type: t2.micro
    image: "{{image}}"
    region: "{{region}}"
    vpc_subnet_id: "{{vpc_subnet_id}}"
    wait: yes
    count: 1
    assign_public_ip: yes
  register: ec2

- name: Wait for ssh to come up
  delegate_to: "{{ item.public_dns_name }}"
  wait_for_connection:
    delay: 60
    timeout: 320
    loop: "{{ ec2.instances }}"

- name: Terminate currently running Instances
  ec2:
    state: 'absent'
    instance_ids: "{{ec2.instance_ids}}"

【问题讨论】:

    标签: amazon-web-services amazon-ec2 ansible boto3 ansible-facts


    【解决方案1】:

    当您删除 EC2 时,AWS 不会立即删除此 EC2。在 AWS 删除 VM 之前,您必须等待几分钟。此外,您不能创建 2 个具有相同实例 ID 的虚拟机。

    您应该避免手动定义您自己的实例 ID。例如,您可以使用标签来选择您的 EC2(您可以拥有多个具有相同标签的虚拟机)

    示例:

      ec2:
        instance_tags:
          tag1: "tag1"
          tag2: "tag2"
      ....
    

    然后,您可以选择或删除具有相同标签的虚拟机

    【讨论】:

    • 我没有手动指定instance_ids,我使用的是id,只是分配一个虚拟Id,其值存储在vars中。
    【解决方案2】:

    ec2 ansible 模块的文档说:

    id:此标识符在实例终止后至少 24 小时内有效,以后不应再用于其他调用。

    你改变了这个 id 吗?

    【讨论】:

    • 我没有更改此 ID。它仍然是我给出的相同的虚拟 ID。一旦我将此虚拟对象更改为其他值。有效。非常感谢您的帮助。
    • 你应该使用标签(有了它们你不需要在每次执行你的剧本时都改变标签值)。
    猜你喜欢
    • 2016-12-07
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多