为什么 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" 部分,它应该可以正常工作。
我只是在用 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" 部分,它应该可以正常工作。