amazon.aws.autoscaling_group 模块 – 创建或删除 AWS AutoScaling Groups (ASGs)

注意

此模块是 amazon.aws 集合 (版本 9.0.0) 的一部分。

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

要安装它,请使用:ansible-galaxy collection install amazon.aws。您需要满足其他要求才能使用此模块,请参阅 要求 了解详细信息。

要在 playbook 中使用它,请指定:amazon.aws.autoscaling_group

amazon.aws 5.0.0 中的新增功能

概要

别名:ec2_asg

要求

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

  • python >= 3.6

  • boto3 >= 1.28.0

  • botocore >= 1.31.0

参数

参数

注释

access_key

别名: aws_access_key_id, aws_access_key, ec2_access_key

字符串

AWS 访问密钥 ID。

有关访问令牌的更多信息,请参阅 AWS 文档 https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys

也可以按优先级递减的顺序使用 AWS_ACCESS_KEY_IDAWS_ACCESS_KEYEC2_ACCESS_KEY 环境变量。

aws_access_keyprofile 选项是互斥的。

aws_access_key_id 别名在 5.1.0 版本中添加,以与 AWS botocore SDK 保持一致。

ec2_access_key 别名已弃用,将在 2024-12-01 之后的版本中删除。

EC2_ACCESS_KEY 环境变量的支持已弃用,将在 2024-12-01 之后的版本中删除。

availability_zones

列表 / 元素=字符串

要在其中创建组的可用区名称列表。

如果未设置 vpc_zone_identifier,则默认为该区域中的所有可用区。

aws_ca_bundle

路径

用于验证 SSL 证书的 CA 捆绑包的位置。

也可以使用 AWS_CA_BUNDLE 环境变量。

aws_config

字典

用于修改 botocore 配置的字典。

可以在 AWS 文档中找到参数 https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html#botocore.config.Config

debug_botocore_endpoint_logs

布尔值

使用 botocore.endpoint 记录器来解析任务期间进行的唯一(而非总数)“resource:action” API 调用,并将集合输出到任务结果中的 resource_actions 键。使用 aws_resource_action 回调输出 playbook 期间生成的总列表。

也可以使用 ANSIBLE_DEBUG_BOTOCORE_LOGS 环境变量。

选项

  • false ←(默认)

  • true

decrement_desired_capacity

布尔值

在 community.aws 3.2.0 中添加

指示 AutoScalingGroup 是否将所需的容量值减去分离的实例数。

选项

  • false ←(默认)

  • true

default_cooldown

整数

在缩放活动完成后,到可以开始下一个缩放活动之间的秒数。

默认: 300

desired_capacity

整数

组中所需的实例数,如果未指定,则将使用当前组的值。

detach_instances

列表 / 元素=字符串

在 community.aws 3.2.0 中添加

从指定的 AutoScalingGroup 中删除一个或多个实例。

如果未设置 decrement_desired_capacity 标志,则会启动新实例以替换分离的实例。

如果经典负载均衡器附加到 AutoScalingGroup,则实例也会从负载均衡器中取消注册。

如果目标组附加到 AutoScalingGroup,则实例也会从目标组中取消注册。

默认值: []

endpoint_url

别名: ec2_url, aws_endpoint_url, s3_url

字符串

连接的 URL,而不是默认的 AWS 端点。虽然这可以用于连接其他 AWS 兼容服务,但 amazon.aws 和 community.aws 集合仅针对 AWS 进行了测试。

也可以使用 AWS_URLEC2_URL 环境变量,优先级递减。

ec2_urls3_url 别名已弃用,将在 2024-12-01 之后的版本中删除。

EC2_URL 环境变量的支持已弃用,将在 2024-12-01 之后的版本中删除。

health_check_period

整数

新的 EC2 实例投入服务后,Auto Scaling 开始检查其健康状况的时间长度(以秒为单位)。

默认: 300

health_check_type

字符串

您希望从中获取运行状况的服务,Amazon EC2 或 Elastic Load Balancer。

选项

  • "EC2" ← (默认)

  • "ELB"

launch_config_name

字符串

用于组的启动配置的名称。有关管理这些配置的信息,请参阅 community.aws.autoscaling_launch_config 模块。

如果未指定,则将使用当前组的值。必须提供 launch_config_namelaunch_template 之一。

launch_template

字典

描述要使用的启动模板的字典

launch_template_id

字符串

启动模板的 ID。只需要 launch_template.launch_template_namelaunch_template.launch_template_id 中的一个。

launch_template_name

字符串

启动模板的名称。只需要 launch_template.launch_template_namelaunch_template.launch_template_id 中的一个。

version

字符串

要使用的启动模板的版本号。

如果未提供,则默认为最新版本。

lc_check

布尔值

检查要被 replace_instances 替换的实例是否已具有当前的启动配置。

选项

  • false

  • true ← (默认)

load_balancers

列表 / 元素=字符串

用于组的 ELB 名称列表。用于经典负载均衡器。

lt_check

布尔值

检查要被 replace_instances 替换的实例是否已具有当前的 launch_templatelaunch_template launch_template.version

选项

  • false

  • true ← (默认)

max_instance_lifetime

整数

实例可以处于服务状态的最长时间(以秒为单位)。

最大实例生命周期必须等于 0,介于 60480031536000 秒(含)之间,或者未指定。

0 会删除生命周期限制。

max_size

整数

组中的最大实例数,如果未指定,则将使用当前组的值。

metrics_collection

布尔值

启用 ASG 指标收集。

选项

  • false ←(默认)

  • true

metrics_granularity

字符串

metrics_collection=true 时,这将决定 CloudWatch 收集的指标粒度。

默认值: "1Minute"

metrics_list

列表 / 元素=字符串

metrics_collection=true 时,要收集的自动缩放指标列表。

默认值: ["GroupMinSize", "GroupMaxSize", "GroupDesiredCapacity", "GroupInServiceInstances", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"]

min_size

整数

组中的最小实例数,如果未指定,则将使用当前组的值。

mixed_instances_policy

字典

用于 ASG 的混合实例策略。

仅当 ASG 配置为使用启动模板(launch_template)时才使用。

另请参阅 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-autoscaling-autoscalinggroup-mixedinstancespolicy.html

instance_types

列表 / 元素=字符串

实例类型列表。

instances_distribution

字典

在 community.aws 1.5.0 中添加

指定按需实例和竞价型实例的分配,竞价型实例的最高支付价格,以及 Auto Scaling 组如何分配实例类型以满足按需和竞价容量。

另请参阅 https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_InstancesDistribution.html

on_demand_allocation_strategy

字符串

在 community.aws 1.5.0 中添加

指示如何分配实例类型以满足按需容量。

on_demand_base_capacity

整数

在 community.aws 1.5.0 中添加

必须由按需实例满足的 Auto Scaling 组容量的最小量。此基本部分会在您的组扩展时首先进行预置。

如果未设置,则默认为 0。如果将其设置为 0,则按需实例将根据 mixed_instances_policy.instances_distribution.on_demand_percentage_above_base_capacity 设置,作为 Auto Scaling 组所需容量的百分比启动。

on_demand_percentage_above_base_capacity

整数

在 community.aws 1.5.0 中添加

控制超出 mixed_instances_policy.instances_distribution.on_demand_base_capacity 的额外容量的按需实例和竞价型实例的百分比。

如果未设置,则默认为 100。如果将其设置为 100,则按需实例的百分比为 100%,竞价型实例的百分比为 0%。

有效范围:0100

spot_allocation_strategy

字符串

在 community.aws 1.5.0 中添加

指示如何在竞价型实例池中分配实例。

spot_instance_pools

整数

在 community.aws 1.5.0 中添加

要在其中分配竞价型实例的竞价型实例池的数量。竞价型池由 LaunchTemplate 的 Overrides 数组中的不同实例类型确定。如果未设置,则默认为 2

仅当竞价分配策略为最低价格时使用。

有效范围:最小值为 1。最大值为 20

spot_max_price

字符串

在 community.aws 1.5.0 中添加

您愿意为竞价型实例支付的每单位小时的最高价格。

如果将此参数的值留空(这是默认值),则最大竞价价格设置为按需价格。

要删除先前设置的值,请包含该参数,但将该值留空。

name

字符串 / 必需

要创建或删除的组的唯一名称。

notification_topic

字符串

用于发送自动缩放通知的 SNS 主题 ARN。

notification_types

列表 / 元素=字符串

触发通知的自动缩放事件列表。

默认值: ["autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR", "autoscaling:EC2_INSTANCE_TERMINATE", "autoscaling:EC2_INSTANCE_TERMINATE_ERROR"]

placement_group

字符串

在 Amazon EC2 中创建的集群放置组的物理位置。

profile

别名: aws_profile

字符串

用于身份验证的命名 AWS 配置文件。

有关命名配置文件的更多信息,请参阅 AWS 文档 https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html

也可以使用 AWS_PROFILE 环境变量。

profile 选项与 aws_access_keyaws_secret_keysecurity_token 选项互斥。

purge_tags

布尔值

在 community.aws 3.2.0 中添加

如果 true,则会从资源中清除现有标签,以完全匹配 tags 参数所定义的标签。

如果未设置 tags 参数,则不会修改标签。

选项

  • false ←(默认)

  • true

region

别名: aws_region, ec2_region

字符串

要使用的 AWS 区域。

对于诸如 IAM、Route53 和 CloudFront 等全局服务,将忽略 region

也可以使用 AWS_REGIONEC2_REGION 环境变量。

有关更多信息,请参阅 Amazon AWS 文档 http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region

ec2_region 别名已弃用,将在 2024-12-01 之后的版本中删除

EC2_REGION 环境变量的支持已弃用,将在 2024-12-01 之后的版本中删除。

replace_all_instances

布尔值

以滚动方式,将所有使用旧启动配置的实例替换为来自新启动配置的实例。它将 ASG 大小增加 replace_batch_size,等待新实例启动并运行。之后,它会终止一批旧实例,等待替换,然后重复,直到所有旧实例都被替换。一旦完成,ASG 大小将减少回预期的大小。

选项

  • false ←(默认)

  • true

replace_batch_size

整数

您希望一次替换的实例数量。与 replace_all_instances 一起使用。

默认值: 1

replace_instances

列表 / 元素=字符串

属于指定 AutoScalingGroup 的实例 ID 列表,您希望终止这些实例并用匹配当前启动配置的实例替换它们。

默认值: []

secret_key

别名: aws_secret_access_key, aws_secret_key, ec2_secret_key

字符串

AWS 秘密访问密钥。

有关访问令牌的更多信息,请参阅 AWS 文档 https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys

也可以使用 AWS_SECRET_ACCESS_KEYAWS_SECRET_KEYEC2_SECRET_KEY 环境变量,优先级递减。

secret_keyprofile 选项互斥。

为了与 AWS botocore SDK 保持一致,在 5.1.0 版本中添加了 aws_secret_access_key 别名。

ec2_secret_key 别名已弃用,将在 2024-12-01 之后的版本中删除。

EC2_SECRET_KEY 环境变量的支持已弃用,将在 2024-12-01 之后的版本中删除。

session_token

别名: aws_session_token, security_token, aws_security_token, access_token

字符串

用于临时凭证的 AWS STS 会话令牌。

有关访问令牌的更多信息,请参阅 AWS 文档 https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys

也可以使用 AWS_SESSION_TOKENAWS_SECURITY_TOKENEC2_SECURITY_TOKEN 环境变量,优先级递减。

security_tokenprofile 选项互斥。

在 3.2.0 版本中添加了别名 aws_session_tokensession_token,并且在 6.0.0 版本中将参数从 security_token 重命名为 session_token

security_tokenaws_security_tokenaccess_token 别名已弃用,将在 2024-12-01 之后的版本中删除。

EC2_SECRET_KEYAWS_SECURITY_TOKEN 环境变量的支持已弃用,将在 2024-12-01 之后的版本中删除。

state

字符串

注册或注销实例。

选项

  • "present" ← (默认)

  • "absent"

suspend_processes

列表 / 元素=字符串

要暂停的扩展进程列表。

有效值包括

Launch, Terminate, HealthCheck, ReplaceUnhealthy, AZRebalance, AlarmNotification, ScheduledActions, AddToLoadBalancer

有效值的完整文档可以在 AWS 文档中找到

https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-suspend-resume-processes.html

默认值: []

tags

list / elements=dictionary

要添加到 Auto Scale Group 的标签列表。

可选键是 propagate_at_launch,默认为 true

propagate_at_launchtrue 时,标签将传播到创建的实例。

默认值: []

target_group_arns

列表 / 元素=字符串

用于组的目标组 ARN 列表。用于应用程序负载均衡器。

termination_policies

列表 / 元素=字符串

用于选择从 Auto Scaling 组中删除实例以减少容量的有序标准列表。

在修改现有 AutoScalingGroup 时使用 termination_policies=Default 将导致保留现有策略,而不是更改为 Default

有效值包括:DefaultOldestInstanceNewestInstanceOldestLaunchConfigurationClosestToNextInstanceHour

有效值的完整文档可以在 AWS 文档中找到

https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html#custom-termination-policy

默认值: ["Default"]

validate_certs

布尔值

设置为 false 时,将不会验证与 AWS API 通信的 SSL 证书。

强烈建议不要设置 validate_certs=false,作为替代方案,请考虑设置 aws_ca_bundle

选项

  • false

  • true ← (默认)

vpc_zone_identifier

列表 / 元素=字符串

要使用的 VPC 子网列表

wait_for_instances

布尔值

在退出之前,等待 ASG 实例处于就绪状态。如果实例位于 ELB 后面,它将等待直到 ELB 确定所有实例的 lifecycle_state 为“InService”且 health_status 为“Healthy”。

选项

  • false

  • true ← (默认)

wait_timeout

整数

替换实例时等待实例变为可用的时间。如果您遇到错误“等待 ELB 实例运行状况正常的时间过长”,请尝试增加此值。

默认: 300

备注

注意

  • 注意:对于模块,环境变量和配置文件是从 Ansible“主机”上下文而不是“控制器”上下文中读取的。因此,可能需要将文件显式复制到“主机”。对于查找和连接插件,环境变量和配置文件是从 Ansible“控制器”上下文而不是“主机”上下文中读取的。

  • Ansible 使用的 AWS SDK (boto3) 也可以从 Ansible“主机”上下文中的其配置文件(通常为 ~/.aws/credentials)读取凭据和其他设置(例如区域)的默认值。 有关更多信息,请参见 https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html

示例

# Basic configuration with Launch Configuration

- amazon.aws.autoscaling_group:
    name: special
    load_balancers: ['lb1', 'lb2']
    availability_zones: ['eu-west-1a', 'eu-west-1b']
    launch_config_name: 'lc-1'
    min_size: 1
    max_size: 10
    desired_capacity: 5
    vpc_zone_identifier: ['subnet-abcd1234', 'subnet-1a2b3c4d']
    tags:
      - environment: production
        propagate_at_launch: false

# Rolling ASG Updates

# Below is an example of how to assign a new launch config to an ASG and terminate old instances.
#
# All instances in "myasg" that do not have the launch configuration named "my_new_lc" will be terminated in
# a rolling fashion with instances using the current launch configuration, "my_new_lc".
#
# This could also be considered a rolling deploy of a pre-baked AMI.
#
# If this is a newly created group, the instances will not be replaced since all instances
# will have the current launch configuration.

- name: create launch config
  community.aws.autoscaling_launch_config:
    name: my_new_lc
    image_id: ami-lkajsf
    key_name: mykey
    region: us-east-1
    security_groups: sg-23423
    instance_type: m1.small
    assign_public_ip: true

- amazon.aws.autoscaling_group:
    name: myasg
    launch_config_name: my_new_lc
    health_check_period: 60
    health_check_type: ELB
    replace_all_instances: true
    min_size: 5
    max_size: 5
    desired_capacity: 5
    region: us-east-1

# To only replace a couple of instances instead of all of them, supply a list
# to "replace_instances":

- amazon.aws.autoscaling_group:
    name: myasg
    launch_config_name: my_new_lc
    health_check_period: 60
    health_check_type: ELB
    replace_instances:
      - i-b345231
      - i-24c2931
    min_size: 5
    max_size: 5
    desired_capacity: 5
    region: us-east-1

# Basic Configuration with Launch Template

- amazon.aws.autoscaling_group:
    name: special
    load_balancers: ['lb1', 'lb2']
    availability_zones: ['eu-west-1a', 'eu-west-1b']
    launch_template:
      version: '1'
      launch_template_name: 'lt-example'
      launch_template_id: 'lt-123456'
    min_size: 1
    max_size: 10
    desired_capacity: 5
    vpc_zone_identifier: ['subnet-abcd1234', 'subnet-1a2b3c4d']
    tags:
      - environment: production
        propagate_at_launch: false

# Basic Configuration with Launch Template using mixed instance policy

- amazon.aws.autoscaling_group:
    name: special
    load_balancers: ['lb1', 'lb2']
    availability_zones: ['eu-west-1a', 'eu-west-1b']
    launch_template:
      version: '1'
      launch_template_name: 'lt-example'
      launch_template_id: 'lt-123456'
    mixed_instances_policy:
      instance_types:
        - t3a.large
        - t3.large
        - t2.large
      instances_distribution:
        on_demand_percentage_above_base_capacity: 0
        spot_allocation_strategy: capacity-optimized
    min_size: 1
    max_size: 10
    desired_capacity: 5
    vpc_zone_identifier: ['subnet-abcd1234', 'subnet-1a2b3c4d']
    tags:
      - environment: production
        propagate_at_launch: false

返回值

通用返回值在此处记录 此处,以下是此模块独有的字段

描述

auto_scaling_group_arn

字符串

自动扩展组的唯一 ARN

返回: 成功

示例: "arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:6a09ad6d-eeee-1234-b987-ee123ced01ad:autoScalingGroupName/myasg"

auto_scaling_group_name

字符串

自动扩展组的唯一名称

返回: 成功

示例: "myasg"

availability_zones

列表 / 元素=字符串

自动扩展组的可用区

返回: 成功

示例: ["us-east-1d"]

created_time

字符串

自动扩展组的创建时间的时间戳

返回: 成功

示例: "2017-11-08T14:41:48.272000+00:00"

default_cooldown

整数

默认冷却时间(以秒为单位)。

返回: 成功

示例: 300

desired_capacity

整数

此组中应运行的 EC2 实例数。

返回: 成功

示例: 3

healthcheck_period

整数

新的 EC2 实例投入服务后,Auto Scaling 开始检查其健康状况的时间长度(以秒为单位)。

返回: 成功

示例: 30

healthcheck_type

字符串

您希望获取其健康状态的服务,可以是“EC2”或“ELB”之一。

返回: 成功

示例: "ELB"

healthy_instances

整数

处于健康状态的实例数量

返回: 成功

示例: 5

in_service_instances

整数

正在服务中的实例数量

返回: 成功

示例: 3

instance_facts

字典

EC2 实例及其与 ASG 相关的状态的字典。

返回: 成功

示例: {"i-0123456789012": {"health_status": "Healthy", "launch_config_name": "public-webapp-production-1", "lifecycle_state": "InService"}}

instances

列表 / 元素=字符串

ASG 中的实例 ID 列表

返回: 成功

示例: ["i-0123456789012"]

launch_config_name

字符串

与 ASG 关联的启动配置的名称。与 launch_configuration_name 相同,为了与 amazon.aws.autoscaling_group 模块兼容而提供。

返回: 成功

示例: "public-webapp-production-1"

load_balancers

列表 / 元素=字符串

附加到 ASG 的负载均衡器名称列表。

返回: 成功

示例: ["elb-webapp-prod"]

max_instance_lifetime

整数

实例可以处于服务状态的最长时间(以秒为单位)。

返回: 成功

示例: 604800

max_size

整数

组的最大大小

返回: 成功

示例: 3

metrics_collection

列表 / 元素=字符串

已启用的 AutosSalingGroup 指标列表

返回: 成功

示例: [{"Granularity": "1Minute", "Metric": "GroupInServiceInstances"}]

min_size

整数

组的最小大小

返回: 成功

示例: 1

mixed_instances_policy

列表 / 元素=字符串

如果设置了混合实例策略,则返回实例类型列表。

返回: 成功

示例: ["t3.micro", "t3a.micro"]

mixed_instances_policy_full

字典

如果设置了混合实例策略,则返回混合实例策略的完整字典表示。

返回: 成功

示例: {"instances_distribution": {"on_demand_allocation_strategy": "prioritized", "on_demand_base_capacity": 0, "on_demand_percentage_above_base_capacity": 0, "spot_allocation_strategy": "capacity-optimized"}, "launch_template": {"launch_template_specification": {"launch_template_id": "lt-53c2425cffa544c23", "launch_template_name": "random-LaunchTemplate", "version": "2"}, "overrides": [{"instance_type": "m5.xlarge"}, {"instance_type": "m5a.xlarge"}]}}

pending_instances

整数

处于挂起状态的实例数量

返回: 成功

示例: 1

tags

列表 / 元素=字符串

ASG 的标签列表,以及每个标签是否在启动时传播到实例。

返回: 成功

示例: [{"key": "Name", "propagate_at_launch": "true", "resource_id": "public-webapp-production-1", "resource_type": "auto-scaling-group", "value": "public-webapp-production-1"}, {"key": "env", "propagate_at_launch": "true", "resource_id": "public-webapp-production-1", "resource_type": "auto-scaling-group", "value": "production"}]

target_group_arns

列表 / 元素=字符串

ASG 填充的目标组的 ARN 列表

返回: 成功

示例: ["arn:aws:elasticloadbalancing:ap-southeast-2:123456789012:targetgroup/target-group-host-hello/1a2b3c4d5e6f1a2b", "arn:aws:elasticloadbalancing:ap-southeast-2:123456789012:targetgroup/target-group-path-world/abcd1234abcd1234"]

target_group_names

列表 / 元素=字符串

ASG 填充的目标组的名称列表

返回: 成功

示例: ["target-group-host-hello", "target-group-path-world"]

termination_policies

列表 / 元素=字符串

组的终止策略列表。

返回: 成功

示例: ["Default"]

unhealthy_instances

整数

处于不健康状态的实例数量

返回: 成功

示例: 0

viable_instances

整数

处于可用状态的实例数量

返回: 成功

示例: 1

vpc_zone_identifier

字符串

自动伸缩组的 VPC 区域 ID / 子网 ID

返回: 成功

示例: "subnet-a31ef45f"

作者

  • Gareth Rushgrove (@garethr)