community.general.spotinst_aws_elastigroup 模块 – 创建、更新或删除 Spotinst AWS Elastigroups

注意

此模块是 community.general 集合(版本 10.1.0)的一部分。

如果您使用的是 ansible 包,您可能已经安装了此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.general。您需要更多要求才能使用此模块,请参阅 要求 获取详细信息。

要在 playbook 中使用它,请指定:community.general.spotinst_aws_elastigroup

概要

  • 可以创建、更新或删除 Spotinst AWS Elastigroups。启动配置是 elastigroup 配置的一部分,因此无需额外的模块来处理启动配置。您必须在此位置拥有一个凭据文件 - <home>/.spotinst/credentials。凭据文件必须包含如下一行:token = <YOUR TOKEN> 完整文档可在 https://help.spotinst.com/hc/en-us/articles/115003530285-Ansible- 找到

要求

执行此模块的主机需要满足以下要求。

  • spotinst_sdk >= 1.0.38

参数

参数

注释

account_id

字符串

允许在模块配置中设置 account-id 的可选参数。默认情况下,这是从凭据路径检索的。

availability_vs_cost

字符串 / 必需

策略方向。

可用的选项是:availabilityOrientedcostOrientedbalanced

availability_zones

列表 / 元素=字典 / 必需

在 elastigroup 中配置的可用区哈希/字典列表;‘[{“key”:”value”, “key”:”value”}]’;允许的键是 name(字符串)、subnet_id(字符串)、placement_group_name(字符串)。

block_device_mappings

列表 / 元素=字典

用于 elastigroup 实例的块设备映射的哈希/字典列表;您可以指定虚拟设备和 EBS 卷。‘[{“key”:”value”, “key”:”value”}]’;允许的键是 device_name(字符串列表)、virtual_name(字符串)、no_device(字符串)、ebs(对象,期望以下键 - delete_on_termination(布尔值)、encrypted(布尔值)、iops(整数)、snapshot_id(整数)、volume_type(字符串)、volume_size(整数))

chef

字典

Chef 集成配置;期望以下键 - chef_server(字符串)、organization(字符串)、user(字符串)、pem_key(字符串)、chef_version(字符串)

credentials_path

路径

允许设置非默认凭据路径的可选参数。

默认值: "~/.spotinst/credentials"

do_not_update

列表 / 元素=字符串

TODO 文档。

默认值: []

down_scaling_policies

列表 / 元素=字典

要在 elastigroup 中配置的扩展策略的哈希/字典列表;‘[{“key”:”value”, “key”:”value”}]’;允许的键是 - policy_name(字符串,必需)、namespace(字符串,必需)、metric_name(字符串,必需)、dimensions(对象列表,允许的键是 name(字符串,必需)和 value(字符串))、statistic(字符串,必需)、evaluation_periods(字符串,必需)、period(字符串,必需)、threshold(字符串,必需)、cooldown(字符串,必需)、unit(字符串,必需)、operator(字符串,必需)、action_type(字符串,必需)、adjustment(字符串)、max_target_capacity(字符串)、target(字符串)、maximum(字符串)、minimum(字符串)

draining_timeout

整数

实例从传入请求中耗尽并在终止之前从 ELB 中注销的时间。

ebs_optimized

布尔值

为默认未启用的受支持实例启用 EBS 优化;注意 - 将会收取额外费用。

选项

  • false

  • true

ebs_volume_pool

列表 / 元素=字典

一个哈希/字典列表,包含在可用时重新连接到弹性组的 EBS 设备;“[{“key”:”value”, “key”:”value”}]”;允许的键包括 - volume_ids(字符串列表)、device_name(字符串)

ecs

字典

ECS 集成配置。需要以下键 - cluster_name(字符串)

elastic_beanstalk

字典

用于未来实现 Elastic Beanstalk 配置的占位符参数。

elastic_ips

列表 / 元素=字符串

要与组实例关联的 Elastic IP 分配 ID 列表(例如 eipalloc-9d4e16f8

fallback_to_od

布尔值

如果没有可用的竞价实例,弹性组将改为启动按需实例

选项

  • false

  • true

health_check_grace_period

整数

实例启动后开始并检查其运行状况的时间(以秒为单位)。

如果未指定,则默认为 300

health_check_type

字符串

用于运行状况检查的服务。

可用的选项有: ELBHCSTARGET_GROUPMLBEC2

health_check_unhealthy_duration_before_replacement

整数

实例被认为不健康之前,应该处于不健康状态的最短时间。

iam_role_arn

字符串

实例配置文件的 iamRole arn

只能使用 iam_role_arn 或 iam_role_name

iam_role_name

字符串

实例配置文件的 iamRole 名称

只能使用 iam_role_arn 或 iam_role_name

id

字符串

如果组已存在且您想要更新或删除它,则为组 ID。除非将 uniqueness_by 字段设置为 id,否则此操作将不起作用。当设置此项并且设置了 uniqueness_by 字段时,组将被更新或删除,但不会被创建。

image_id

字符串 / 必需

用于启动实例的映像 ID。如果实例类型和映像类型之间存在冲突,将返回错误

key_pair

字符串

指定要附加到实例的密钥对

kubernetes

字典

Kubernetes 集成配置。需要以下键 - api_server(字符串)、token(字符串)

lifetime_period

整数

生命周期

load_balancers

列表 / 元素=字符串

经典 ELB 名称列表

max_size

integer / required

您可以扩展到的实例数量上限

mesosphere

字典

Mesosphere 集成配置。需要以下键 - api_server(字符串)

min_size

integer / required

您可以缩减到的实例数量下限

monitoring

字符串

描述是否启用了实例增强监控

multai_load_balancers

列表 / 元素=字典

Multai 负载均衡器的配置参数。

multai_token

字符串

用于 Multai 配置的令牌。

name

字符串 / 必需

要创建、更新或删除的弹性组的唯一名称

network_interfaces

列表 / 元素=字典

要添加到弹性组的网络接口的哈希/字典列表;“[{“key”:”value”, “key”:”value”}]”;允许的键包括 - description(字符串)、device_index(整数)、secondary_private_ip_address_count(整数)、associate_public_ip_address(布尔值)、delete_on_termination(布尔值)、groups(字符串列表)、network_interface_id(字符串)、private_ip_address(字符串)、subnet_id(字符串)、associate_ipv6_address(布尔值)、private_ip_addresses(对象列表,键为 privateIpAddress(字符串,必填)和 primary(布尔值))

on_demand_count

整数

如果未设置 risk,则为必填项

要启动的按需实例数量。所有其他实例将是竞价实例;设置此参数或 risk 参数

on_demand_instance_type

字符串

将要配置的按需实例类型

opsworks

字典

弹性组 OpsWorks 集成配置。需要以下键 - layer_id(字符串)

persistence

字典

有状态弹性组配置。接受以下键 - should_persist_root_device(布尔值)、should_persist_block_devices(布尔值)、should_persist_private_ip(布尔值)

product

字符串 / 必需

操作系统类型。

可用的选项包括: Linux/UNIXSUSE LinuxWindowsLinux/UNIX (Amazon VPC)、 SUSE Linux (Amazon VPC)。

rancher

字典

Rancher 集成配置。需要以下键 - version(字符串)、access_key(字符串)、secret_key(字符串)、master_host(字符串)

right_scale

字典

Rightscale 集成配置。需要以下键 - account_id(字符串)、refresh_token(字符串)

risk

整数

如果未设置 on demand,则为必填项。要启动的竞价实例的百分比 (0 - 100)。

roll_config

字典

滚动配置。如果您希望组在更新后滚动,请使用此功能。接受以下键 - batch_size_percentage(整数,必填)、grace_period -(整数,必填)、health_check_type(字符串,可选)

scheduled_tasks

列表 / 元素=字典

要在弹性组中配置的计划任务的哈希/字典列表;“[{“key”:”value”, “key”:”value”}]”;允许的键包括 - adjustment(整数)、scale_target_capacity(整数)、scale_min_capacity(整数)、scale_max_capacity(整数)、adjustment_percentage(整数)、batch_size_percentage(整数)、cron_expression(字符串)、frequency(字符串)、grace_period(整数)、task_type(字符串,必填)、is_enabled(布尔值)

security_group_ids

list / elements=string / required

一个或多个安全组 ID。如果更新,它将使用给定的新数组覆盖现有安全组

shutdown_script

字符串

在实例终止之前执行的 Base64 编码的关闭脚本。在设置之前进行编码。

signals

列表 / 元素=字典

要在弹性组中配置的信号的哈希/字典列表;允许的键包括 - name(字符串,必填)、timeout(整数)

spin_up_time

整数

实例的启动时间(以秒为单位)

spot_instance_types

list / elements=string / required

将要配置的竞价实例类型。

state

字符串

创建或删除弹性组

选项

  • "present" ← (默认)

  • "absent"

tags

列表 / 元素=字典

要在弹性组中配置的标签列表。请指定键和值列表(键冒号值);

target

integer / required

要启动的实例数

target_group_arns

列表 / 元素=字符串

实例应注册到的目标组 arn 列表

target_tracking_policies

列表 / 元素=字典

要在弹性组中配置的目标跟踪策略的哈希/字典列表;“[{“key”:”value”, “key”:”value”}]”;允许的键包括 - policy_name(字符串,必填)、namespace(字符串,必填)、source(字符串,必填)、metric_name(字符串,必填)、statistic(字符串,必填)、unit(字符串,必填)、cooldown(字符串,必填)、target(字符串,必填)

tenancy

字符串

专用与共享租赁。

可用的选项包括: defaultdedicated

terminate_at_end_of_billing_hour

布尔值

在计费小时结束时终止

选项

  • false

  • true

token

字符串

Spotinst 颁发的个人 API 访问令牌。

如果未指定,该模块将尝试按以下顺序从以下位置获取它:环境变量 SPOTINST_TOKEN,或从凭据路径获取。

uniqueness_by

字符串

如果您的组名称不是唯一的,您可以使用此功能来更新或删除特定组。每当设置此属性时,您必须设置 group_id 才能更新或删除组,否则将创建组。

选项

  • "id"

  • "name" ← (默认)

unit

字符串

用于启动实例的容量单位。

可用的选项包括: instanceweight

up_scaling_policies

列表 / 元素=字典

要在弹性组中配置的扩展策略的哈希/字典列表;“[{“key”:”value”, “key”:”value”}]”;允许的键包括 - policy_name(字符串,必填)、namespace(字符串,必填)、metric_name(字符串,必填)、dimensions(对象列表,允许的键包括 name(字符串,必填)和 value(字符串))、statistic(字符串,必填)、evaluation_periods(字符串,必填)、period(字符串,必填)、threshold(字符串,必填)、cooldown(字符串,必填)、unit(字符串,必填)、operator(字符串,必填)、action_type(字符串,必填)、adjustment(字符串)、min_target_capacity(字符串)、target(字符串)、maximum(字符串)、minimum(字符串)

user_data

字符串

Base64 编码的 MIME 用户数据。在设置值之前进行编码。

utilize_reserved_instances

布尔值

如果有任何可用的预留实例,弹性组将在购买竞价实例之前利用您的预留。

选项

  • false

  • true

wait_for_instances

布尔值

弹性组创建/更新操作是否应等待实例启动

选项

  • false ← (默认)

  • true

wait_timeout

整数

模块在操作失败之前应等待实例的时间。仅当 wait_for_instances 为 True 时才起作用。

属性

属性

支持

描述

check_mode

支持:

可以在 check_mode 中运行并返回更改的状态预测,而无需修改目标。

diff_mode

支持:

在差异模式下,当在 check_mode 中时,将返回有关已更改的内容(或可能需要更改的内容)的详细信息。

示例

# Basic configuration YAML example

- hosts: localhost
  tasks:
    - name: Create elastigroup
      community.general.spotinst_aws_elastigroup:
          state: present
          risk: 100
          availability_vs_cost: balanced
          availability_zones:
            - name: us-west-2a
              subnet_id: subnet-2b68a15c
          image_id: ami-f173cc91
          key_pair: spotinst-oregon
          max_size: 15
          min_size: 0
          target: 0
          unit: instance
          monitoring: true
          name: ansible-group
          on_demand_instance_type: c3.large
          product: Linux/UNIX
          load_balancers:
            - test-lb-1
          security_group_ids:
            - sg-8f4b8fe9
          spot_instance_types:
            - c3.large
          do_not_update:
            - image_id
            - target
      register: result
    - ansible.builtin.debug: var=result

# In this example, we create an elastigroup and wait 600 seconds to retrieve the instances, and use their private ips

- hosts: localhost
  tasks:
    - name: Create elastigroup
      community.general.spotinst_aws_elastigroup:
          state: present
          account_id: act-1a9dd2b
          risk: 100
          availability_vs_cost: balanced
          availability_zones:
            - name: us-west-2a
              subnet_id: subnet-2b68a15c
          tags:
            - Environment: someEnvValue
            - OtherTagKey: otherValue
          image_id: ami-f173cc91
          key_pair: spotinst-oregon
          max_size: 5
          min_size: 0
          target: 0
          unit: instance
          monitoring: true
          name: ansible-group-tal
          on_demand_instance_type: c3.large
          product: Linux/UNIX
          security_group_ids:
            - sg-8f4b8fe9
          block_device_mappings:
            - device_name: '/dev/sda1'
              ebs:
                volume_size: 100
                volume_type: gp2
          spot_instance_types:
            - c3.large
          do_not_update:
            - image_id
          wait_for_instances: true
          wait_timeout: 600
      register: result

    - name: Store private ips to file
      ansible.builtin.shell: echo {{ item.private_ip }}\n >> list-of-private-ips
      with_items: "{{ result.instances }}"
    - ansible.builtin.debug: var=result

# In this example, we create an elastigroup with multiple block device mappings, tags, and also an account id
# In organizations with more than one account, it is required to specify an account_id

- hosts: localhost
  tasks:
    - name: Create elastigroup
      community.general.spotinst_aws_elastigroup:
          state: present
          account_id: act-1a9dd2b
          risk: 100
          availability_vs_cost: balanced
          availability_zones:
            - name: us-west-2a
              subnet_id: subnet-2b68a15c
          tags:
            - Environment: someEnvValue
            - OtherTagKey: otherValue
          image_id: ami-f173cc91
          key_pair: spotinst-oregon
          max_size: 5
          min_size: 0
          target: 0
          unit: instance
          monitoring: true
          name: ansible-group-tal
          on_demand_instance_type: c3.large
          product: Linux/UNIX
          security_group_ids:
            - sg-8f4b8fe9
          block_device_mappings:
            - device_name: '/dev/xvda'
              ebs:
                volume_size: 60
                volume_type: gp2
            - device_name: '/dev/xvdb'
              ebs:
                volume_size: 120
                volume_type: gp2
          spot_instance_types:
            - c3.large
          do_not_update:
            - image_id
          wait_for_instances: true
          wait_timeout: 600
      register: result

    - name: Store private ips to file
      ansible.builtin.shell: echo {{ item.private_ip }}\n >> list-of-private-ips
      with_items: "{{ result.instances }}"
    - ansible.builtin.debug: var=result

# In this example we have set up block device mapping with ephemeral devices

- hosts: localhost
  tasks:
    - name: Create elastigroup
      community.general.spotinst_aws_elastigroup:
          state: present
          risk: 100
          availability_vs_cost: balanced
          availability_zones:
            - name: us-west-2a
              subnet_id: subnet-2b68a15c
          image_id: ami-f173cc91
          key_pair: spotinst-oregon
          max_size: 15
          min_size: 0
          target: 0
          unit: instance
          block_device_mappings:
            - device_name: '/dev/xvda'
              virtual_name: ephemeral0
            - device_name: '/dev/xvdb/'
              virtual_name: ephemeral1
          monitoring: true
          name: ansible-group
          on_demand_instance_type: c3.large
          product: Linux/UNIX
          load_balancers:
            - test-lb-1
          security_group_ids:
            - sg-8f4b8fe9
          spot_instance_types:
            - c3.large
          do_not_update:
            - image_id
            - target
      register: result
    - ansible.builtin.debug: var=result

# In this example we create a basic group configuration with a network interface defined.
# Each network interface must have a device index

- hosts: localhost
  tasks:
    - name: Create elastigroup
      community.general.spotinst_aws_elastigroup:
          state: present
          risk: 100
          availability_vs_cost: balanced
          network_interfaces:
            - associate_public_ip_address: true
              device_index: 0
          availability_zones:
            - name: us-west-2a
              subnet_id: subnet-2b68a15c
          image_id: ami-f173cc91
          key_pair: spotinst-oregon
          max_size: 15
          min_size: 0
          target: 0
          unit: instance
          monitoring: true
          name: ansible-group
          on_demand_instance_type: c3.large
          product: Linux/UNIX
          load_balancers:
            - test-lb-1
          security_group_ids:
            - sg-8f4b8fe9
          spot_instance_types:
            - c3.large
          do_not_update:
            - image_id
            - target
      register: result
    - ansible.builtin.debug: var=result


# In this example we create a basic group configuration with a target tracking scaling policy defined

- hosts: localhost
  tasks:
    - name: Create elastigroup
      community.general.spotinst_aws_elastigroup:
          account_id: act-92d45673
          state: present
          risk: 100
          availability_vs_cost: balanced
          availability_zones:
            - name: us-west-2a
              subnet_id: subnet-79da021e
          image_id: ami-f173cc91
          fallback_to_od: true
          tags:
            - Creator: ValueOfCreatorTag
            - Environment: ValueOfEnvironmentTag
          key_pair: spotinst-labs-oregon
          max_size: 10
          min_size: 0
          target: 2
          unit: instance
          monitoring: true
          name: ansible-group-1
          on_demand_instance_type: c3.large
          product: Linux/UNIX
          security_group_ids:
            - sg-46cdc13d
          spot_instance_types:
            - c3.large
          target_tracking_policies:
            - policy_name: target-tracking-1
              namespace: AWS/EC2
              metric_name: CPUUtilization
              statistic: average
              unit: percent
              target: 50
              cooldown: 120
          do_not_update:
            - image_id
      register: result
    - ansible.builtin.debug: var=result

返回值

常用返回值记录在此处:此处,以下是此模块特有的字段

描述

group_id

字符串

已创建/更新的组的 ID。

返回:成功

示例:"sig-12345"

instances

字典

活动弹性组实例及其详细信息的列表。

返回:成功

示例: [{"availabilityZone": "us-west-2b", "createdAt": "2017-07-17T12:46:18.000Z", "instanceId": "i-09640ad8678234c", "instanceType": "m4.large", "privateIp": "180.0.2.244", "product": "Linux/UNIX", "spotInstanceRequestId": "sir-regs25zp", "status": "fulfilled"}]

作者

  • Spotinst (@talzur)