我知道这似乎与过去提出的其他问题有关,但我觉得不是。你将成为这件事的评判者。
我已经使用 Ansible 1.5 年了,我知道它不是配置基础设施的最佳工具,但对于我的需要来说已经足够了。
我使用 AWS 作为我的云提供商
有没有办法让 Ansible 提供多个相同类型的现场实例(类似于ec2 ansible 模块中的 count 属性),并将instance_interruption_behavior设置为stop(行为)而不是默认的terminate?
我的目标:
为 Amazon设置具有不同ec2_spot_requests的多个 EC2 实例。(每个实例的现场请求)但我不想使用默认的instance_interruption_behavior终止,而是希望将其设置为 stop(behavior )
到目前为止我所做的:
我知道 Ansible 有以下模块来处理 ec2 基础设施。主要是
ec2。 https://docs.ansible.com/ansible/latest/modules/ec2_module.html
不要与 ec2_instance 模块混淆。
https://docs.ansible.com/ansible/latest/modules/ec2_instance_module.html
我可以使用 ec2 模块来设置现场实例,正如我目前所做的那样,如下所示:
ec2:
key_name: mykey
region: us-west-1
instance_type: "{{ instance_type }}"
image: "{{ instance_ami }}"
wait: yes
wait_timeout: 100
spot_price: "{{ spot_bid }}"
spot_wait_timeout: 600
spot_type: persistent
group_id: "{{ created_sg.group_id }}"
instance_tags:
Name: "Name"
count: "{{ my_count }}"
vpc_subnet_id: " {{ subnet }}"
assign_public_ip: yes
monitoring: no
volumes:
- device_name: /dev/sda1
volume_type: gp2
volume_size: "{{ volume_size }}"
前置问题:
上面的示例模块很干净,允许我根据我的要求设置点实例,通过使用ec2模块和count属性。
然而,它不允许我将instance_interruption_behavior设置为停止(除非我很累),它只是默认终止。
其他模块:
在Ansible 版本 2.8.0上发布(目前仅在开发中可用),有一个新模块名为:ec2_launch_template
https://docs.ansible.com/ansible/devel/modules/ec2_launch_template_module.html
该模块为您提供了更多属性,允许您结合 ec2_instance 模块将所需的 instance_interruption_behavior 设置为停止(行为)。这就是我所做的:
- hosts: 127.0.0.1
connection: local
gather_facts: True
vars_files:
- vars/main.yml
tasks:
- name: "create security group"
include_tasks: tasks/create_sg.yml
- name: "Create launch template to support interruption behavior 'STOP' for spot instances"
ec2_launch_template:
name: spot_launch_template
region: us-west-1
key_name: mykey
instance_type: "{{ instance_type }}"
image_id: "{{ instance_ami }}"
instance_market_options:
market_type: spot
spot_options:
instance_interruption_behavior: stop
max_price: "{{ spot_bid }}"
spot_instance_type: persistent
monitoring:
enabled: no
block_device_mappings:
- device_name: /dev/sda1
ebs:
volume_type: gp2
volume_size: "{{ manager_instance_volume_size }}"
register: my_template
- name: "setup up a single spot instance"
ec2_instance:
instance_type: "{{ instance_type }}"
tags:
Name: "My_Spot"
launch_template:
id: "{{ my_template.latest_template.launch_template_id }}"
security_groups:
- "{{ created_sg.group_id }}"
主要问题:
如上面的代码片段所示,ec2_launch_template Ansible 模块不支持count属性,并且ec2_instance 模块也不允许。
有什么方法可以导致 ansible 提供相同类型的多个实例(类似于 ec2 ansible 模块中的 count 属性)?