amazon.aws.autoscaling_group 模块 – 创建或删除 AWS 自动伸缩组 (ASG)

注意

此模块是 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 botocore SDK 保持一致,aws_access_key_id 别名是在 5.1.0 版本中添加的。

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

指示自动伸缩组是否根据分离的实例数量递减所需容量值。

选项

  • false ← (默认值)

  • true

default_cooldown

整数

缩放活动完成后的秒数,之后才能开始另一个活动。

默认值: 300

desired_capacity

整数

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

detach_instances

列表 / 元素=字符串

添加到 community.aws 3.2.0

从指定的自动伸缩组中移除一个或多个实例。

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

如果经典负载均衡器附加到自动伸缩组,则实例也会从负载均衡器中注销。

如果目标组附加到自动伸缩组,则实例也会从目标组中注销。

默认值: []

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 实例投入使用后,自动伸缩开始检查其运行状况所需的时间(以秒为单位)。

默认值: 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 中添加

指定按需实例和竞价实例的分配方式、为竞价实例支付的最大价格以及自动伸缩组如何分配实例类型以满足按需和竞价容量。

另请参阅 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 中添加

必须由按需实例满足的自动伸缩组容量的最小数量。此基本部分将在您的组进行扩展时首先进行预配。

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

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

列表 / 元素=字符串

要暂停的扩展过程列表。

有效值包括:

LaunchTerminateHealthCheckReplaceUnhealthyAZRebalanceAlarmNotificationScheduledActionsAddToLoadBalancer

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

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

默认值: []

tags

列表 / 元素=字典

要添加到自动扩展组的标签列表。

可选键是propagate_at_launch,默认为true

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

默认值: []

target_group_arns

列表 / 元素=字符串

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

termination_policies

列表 / 元素=字符串

用于在减少容量时选择要从自动扩展组中移除的实例的条件的有序列表。

修改现有 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 实例投入使用后,自动伸缩开始检查其运行状况所需的时间(以秒为单位)。

已返回:成功

示例: 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"}}

实例

列表 / 元素=字符串

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"}]}}

待处理实例

整数

处于待处理状态的实例数量

已返回:成功

示例: 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"]

不健康的实例

整数

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

已返回:成功

示例: 0

可用的实例

整数

处于可用状态的实例数量

已返回:成功

示例: 1

vpc_zone_identifier

字符串

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

已返回:成功

示例: "subnet-a31ef45f"

作者

  • Gareth Rushgrove (@garethr)