使用Ansible创建AWS ec2实例时出错

时间:2019-12-02 12:48:40

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

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

实例创建之后,我从AWS Web控制台终止了ec2实例。稍后,我向其中添加了更多任务,但是无法使用这些任务创建ec2实例。

我一直收到以下错误消息:

  

致命:[localhost]:失败! => {“已更改”:false,“ msg”:“具有id ['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}}"

2 个答案:

答案 0 :(得分:1)

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

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

示例:

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

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

答案 1 :(得分:1)

ec2 ansible模块的文档说:

  

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

您更改了此ID吗?