为什么 Ansible 不喜欢 AmazonLinux2 ami 的?

Why Ansible don't like AmazonLinux2 ami's?

我只是在用 ansible 尝试一些东西,但如果有人可以重现这个或者至少可以向我解释一下,我真的很感激。 我正在尝试在 AWS 上使用 ansible 部署实例。我在 W10 主机上使用 Vagrant 部署的虚拟机中使用 ansible (2.9.6)。 我写了这个剧本:

---

- name: Configuring the EC2 instance
  hosts: localhost
  connection: local
  vars:
    count: '{{ count }}'
    volumes:
      - device_name: /dev/sda1
        volume_size: '{{ volume_size }}'

  tasks:
    - name: Launch Instances
      ec2:
        instance_type: '{{ instance_type }}'
        image: '{{ ami }}'
        region: '{{ region }}'
        key_name: '{{ pem }}'
        count: '{{ count }}'
        group_id: '{{ sec_grp }}'
        wait: true
        volumes: '{{ volumes }}'
      register: ec2

    - name: Associating after allocating eip
      ec2_eip:
        in_vpc: yes
        reuse_existing_ip_allowed: yes
        state: present
        region: '{{ region }}'
        device_id: '{{ ec2.instance_ids[0] }}'
      register: elastic_ip

    - name: Adding tags to the instance
      local_action:
        module: ec2_tag
        region: '{{ region }}'
        resource: '{{ item.id }}'
        state: present
      with_items: '{{ ec2.instances }}'
      args:
        tags: 
          Name: '{{ tag_name }}'
          Env: '{{ tag_env }}'
          Type: AppService
      register: tag

我用 --extra-vars 执行下一个命令: ansible-playbook ec2.yml --extra-vars instance_type=t2.micro -e ami=ami-04d5cc9b88f9d1d39 -e region=eu-west-1 -e pem=keyname -e count=1 -e sec_grp=sg-xx -e volume_size=10 -e tag_name=prueba -e tag_env=dev -vvv

ami-04d5cc9b88f9d1d39 = Amazon Linux 2 AMI (HVM),eu-west-1 的 SSD 卷类型

当剧本完成 运行 成功并且在我的 aws-console 上看到实例启动并更改为 运行ning 状态(初始化)时,突然更改为终止状态,最后更改为停止状态。 在我的终端上,剧本 运行 很好,我得到:

PLAY RECAP **************************
localhost                  : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

我花了一整天的时间试图解决这个问题,更改“'state: running'”并添加新任务以显式创建实例 运行nning。好吧,最后的问题是 AMI。我在同一区域将其更改为 ubuntu ami: ami-035966e8adab4aaad 并且工作正常,它仍然是 运行ing。 我之前将此 ami (amazon linux 2) 与 cloudformation 和 terraform 一起使用,但从未发生过这样的事情,始终可以正常启动。 好吧,如果有人知道为什么会这样或者我遗漏了什么,我真的很想知道。 保重!

我能够重现这个问题。我尝试了你提到的一切。复制您提供的 yml 文件,使用完全相同的值执行(密钥对和安全组除外)。 EC2 进入 运行 状态,然后停止。 为了隔离这个问题,我在另一个地区 (AP-South-1) 使用相同的 Amazon Linux 2 ami 做了同样的事情,但重现了同样的错误。

这是因为,Amazon Linux 2 AMI 要求将 EBS 安装在 /dev/xvda 而不是 /dev/sda1。当AMI为ubuntu时使用/dev/sda1。

由于根 EBS 的 AMI 和挂载路径不兼容,EC2 实例在初始化后进入停止状态。

参考这个 SO 问题:

更新 yml 的 "volume" 部分,它应该可以正常工作。