Auto Scaling
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

在 Auto Scaling 组中启动竞价型实例

如果您能灵活控制应用程序的运行时间并且应用程序可以中断,那么相对于按需实例,竞价型实例是经济实惠之选。您可以将 Auto Scaling 设置为启动竞价型实例,而不是按需实例。

在使用 Auto Scaling 启动竞价型实例之前,我们建议您熟悉使用 Amazon EC2 启动和管理竞价型实例的操作。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的竞价型实例

以下是 Auto Scaling 使用竞价型实例的方式:

  • 设置您的最高价。当您使用 Auto Scaling 启动竞价型实例时,需要在启动配置中设置您愿意支付的最高价。您不能使用单个启动配置同时启动按需实例和竞价型实例。

  • 更改您的最高价。要更改最高价,您必须使用新价格创建一个启动配置,然后将其与 Auto Scaling 组相关联。请注意,只要现有实例所用的启动配置中指定的最高价高于当前竞价市场价格,这些实例才会继续运行。

  • 竞价市场价格与您的最高价。如果竞价型实例的市场价格超过 Auto Scaling 组中正在运行的实例的最高价,Amazon EC2 会终止实例。如果最高价恰好与竞价市场价格一样,您的请求是否履行取决于几个因素,如可用的竞价型实例容量。

  • 维护您的竞价型实例。 竞价型实例终止后,Auto Scaling 会尝试启动替代实例来保持该组的所需容量。如果最高价高于竞价市场价格,则会启动竞价型实例。否则,Auto Scaling 会不断尝试。

  • 在可用区之间平衡。如果您指定多个可用区,Auto Scaling 会在这些可用区之间分配请求。如果您的最高价在一个可用区中过低而无法执行任何请求,Auto Scaling 会检查请求是否已在其他可用区中被执行。如果是,Auto Scaling 会取消失败的请求并在已执行请求的可用区之间重新分配它们。如果没有执行请求的可用区中的价格降得足够低以使未来的请求能够成功,Auto Scaling 会在所有可用区之间重新平衡。有关更多信息,请参阅 再平衡活动

  • Auto Scaling 和竞价型实例终止。Auto Scaling 能够终止或替代竞价型实例,就像它能够终止或替代按需实例一样。有关更多信息,请参阅 控制 Auto Scaling 在缩小过程中终止哪些实例

使用 AWS 管理控制台启动竞价型实例

要创建启动竞价型实例的 Auto Scaling 组,请完成以下任务:

创建启动配置

创建启动配置

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格上的 Auto Scaling 下,选择 Launch Configurations。如果您是初次使用 Auto Scaling,则会看到一个欢迎页面;选择 Create Auto Scaling group

  3. 选择 Create launch configuration

  4. Choose AMI 页面中,选择 AMI。

  5. Choose Instance Type 页面上,为您的实例选择硬件配置。选择 Next: Configure details

  6. Configure Details (配置实例详细信息) 页面中,执行以下操作:

    1. 对于 Name,为启动配置键入一个名称。考虑在该名称中包含“Spot”和最高价。

    2. 选择 Request Spot Instances。如果选择此选项,可以看到区域中可用区的当前价格。对于 Maximum price,键入您愿意支付的最高价。

    3. 对于 Advanced Details,选择 IP 地址类型。如果要连接至 VPC 中的一个实例,您必须选择一个指定了公有 IP 地址的选项。如果您想连接到实例,但是不确定您是否有默认 VPC,请选择 Assign a public IP address to every instance

    4. 选择 Skip to review

  7. Review 页面上,选择 Edit security groups。按照说明操作来选择现有安全组,然后选择 Review

  8. Review 页面上,注意启动配置详细信息包含竞价型实例的最高价。选择 Create launch configuration

  9. Select an existing key pair or create a new key pair 页面上,选择所列的选项之一。选中确认复选框,然后选择 Create launch configuration

    警告

    如果需要连接到您的实例,请不要选择 Proceed without a key pair

创建 Auto Scaling 组

创建 Auto Scaling 组时,可指定您刚创建的启动配置。请注意,启动配置是实例的模板,它包括您的竞价型实例的最高价。

有关如何使用 AWS 管理控制台创建 Auto Scaling 组的更多信息和说明,请参阅使用启动配置创建 Auto Scaling 组

验证并检查您的实例

确认 Auto Scaling 正在启动竞价型实例

  1. 选择您的新 Auto Scaling 组。

  2. Activity History 选项卡上,它显示 Auto Scaling 已成功启动您请求的竞价型实例。

     “Activity History”选项卡。
  3. Instances 选项卡上,它显示有关您的竞价型实例的详细信息。您将看到 Auto Scaling 正在启动您在指定的可用区中请求的实例。

(可选)在 Auto Scaling 组发生变化时获取通知

设置通知

  1. 选择 Auto Scaling 组。

  2. Notifications 选项卡上,选择 Create notification

  3. 选择 create topic,指定以下内容,然后选择 Save

    • Send a notification to (发送通知到) – AutoScalingSpot

    • With these recipients (收件人如下)您的电子邮件账户

    • Whenever instances - 启动、终止、未能启动和未能终止状态中的一个或多个

     使用 Auto Scaling 为您的竞价请求创建通知。

在创建通知主题后,您指定的电子邮件账户将立即收到确认电子邮件。

(可选) 更新最高价

更新竞价型实例的最高价

  1. 创建一个启动配置,其设置与创建启动配置中相同,但名称和最高价格不同。

  2. 选择您的 Auto Scaling 组。

  3. Details 选项卡上,选择 Edit

  4. 选择您刚刚创建的启动配置,然后选择 Save

清除

在使用实例和 Auto Scaling 组后,建议将其清除。删除 Auto Scaling 组时,将同时删除所有竞价型实例和对该组的未竞价请求。

清除 Auto Scaling 组和实例

  1. 选择您的 Auto Scaling 组。

  2. 依次选择 ActionsDelete

  3. 当系统提示进行确认时,选择 Yes, Delete

使用 AWS CLI 启动竞价型实例

要创建启动竞价型实例的 Auto Scaling 组,请完成以下任务:

创建启动配置

要使用 Auto Scaling 为竞价型实例提出请求,请在 create-launch-configuration 命令中使用 --spot-price 选项来指定您愿意为实例支付的最高价,如下所示:

Copy
aws autoscaling create-launch-configuration --launch-configuration-name spot-lc-5cents --image-id ami-1a2bc4d --instance-type m1.small --spot-price "0.05"

创建 Auto Scaling 组

使用 create-auto-scaling-group 命令与刚才创建的启动配置来创建 Auto Scaling 组。以下命令启动 2 个竞价型实例:

Copy
aws autoscaling create-auto-scaling-group --auto-scaling-group-name spot-asg --launch-configuration-name spot-lc-5cents --availability-zones "us-west-2a" "us-west-2b" --max-size 5 --min-size 1 --desired-capacity 2

验证并检查您的实例

使用 describe-scaling-activities 命令列出 Auto Scaling 为您的 Auto Scaling 组执行的活动,如下所示:

Copy
aws autoscaling describe-scaling-activities --auto-scaling-group-name spot-asg

如果最初无法同时执行两个请求,则输出看起来类似于以下示例,其中一个请求成功,而 Auto Scaling 在等待另一个请求:

{
    "Activities": [
        {
            "Description": "Placing Spot instance request. Status Reason: Placed Spot instance request: sir-036wjsp9. Waiting for instance(s)",
            "AutoScalingGroupName": "spot-asg",
            "ActivityId": "28189e6b-e14f-4783-8d48-4d03b40b1354",
            "Details": "{\"Availability Zone\":\"us-west-2a\"}",
            "StartTime": "2015-03-01T16:21:41.578Z",
            "Progress": 20,
            "Cause": "At 2015-03-01T16:21:40Z a difference between desired and actual capacity changing the desired capacity, increasing the capacity from 0 to 2.",
            "StatusMessage": "Placed Spot instance request: sir-036wjsp9. Waiting for instance(s)",
            "StatusCode": "WaitingForSpotInstanceId"
        },
        {
            "Description": "Launching a new EC2 instance: i-d95eb0d4",
            "AutoScalingGroupName": "spot-asg",
            "ActivityId": "b987ab02-f7c3-4948-a0bc-5d1449de30ec",
            "Details": "{\"Availability Zone\":\"us-west-2b\"}",
            "StartTime": "2015-03-01T16:21:41.578Z",
            "Progress": 100,
            "EndTime": "2015-03-01T16:29:46Z",
            "Cause": "At 2015-03-01T16:21:40Z a difference between desired and actual capacity changing the desired capacity, increasing the capacity from 0 to 2.",
            "StatusCode": "Successful"
        }
    ]
}

如果 as-describe-scaling-activities 的输出包括 Failed 活动,则查看响应了解详细信息。例如,可能 AMI ID 不再有效,或者它与您选择的实例类型不兼容。如果没有给出原因,请检查您的最高价是否高于该可用区的竞价市场价格。

要查看有关 Auto Scaling 组的信息,请使用 describe-auto-scaling-groups 命令,如下所示:

Copy
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name spot-asg

在下面的示例输出中,Auto Scaling 按照您的指定,启动了两个实例,这两个实例都在运行:

{
    "AutoScalingGroups": [
        {
            "AutoScalingGroupARN": "arn",
            "HealthCheckGracePeriod": 0,
            "SuspendedProcesses": [],
            "DesiredCapacity": 2,
            "Tags": [],
            "EnabledMetrics": [],
            "LoadBalancerNames": [],
            "AutoScalingGroupName": "spot-asg",
            "DefaultCooldown": 300,
            "MinSize": 1,
            "Instances": [
                {
                    "InstanceId": "i-d95eb0d4",
                    "AvailabilityZone": "us-west-2b",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "spot-lc-5cents"
                },
                {
                    "InstanceId": "i-13d7dc1f",
                    "AvailabilityZone": "us-west-2a",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "spot-lc-5cents"
                }
            ],
            "MaxSize": 5,
            "VPCZoneIdentifier": null,
            "TerminationPolicies": [
                "Default"
            ],
            "LaunchConfigurationName": "spot-lc-5cents",
            "CreatedTime": "2015-03-01T16:12:35.608Z",
            "AvailabilityZones": [
                "us-west-2b",
                "us-west-2a"
            ],
            "HealthCheckType": "EC2"
        }
    ]
}

除了使用 describe-auto-scaling-groups 外,您还可以使用 describe-auto-scaling-instances 命令,如下所示:

Copy
aws autoscaling describe-auto-scaling-instances

下面是示例输出:

{
    "AutoScalingInstances": [
        {
            "AvailabilityZone": "us-west-2a",
            "InstanceId": "i-13d7dc1f",
            "AutoScalingGroupName": "spot-asg",
            "HealthStatus": "HEALTHY",
            "LifecycleState": "InService",
            "LaunchConfigurationName": "spot-lc-5cents"
        },
        {
            "AvailabilityZone": "us-west-2b",
            "InstanceId": "i-d95eb0d4",
            "AutoScalingGroupName": "spot-asg",
            "HealthStatus": "HEALTHY",
            "LifecycleState": "InService",
            "LaunchConfigurationName": "spot-lc-5cents"
        }
    ]
}

(可选)在 Auto Scaling 组发生变化时获取通知

有关在 Auto Scaling 中设置电子邮件通知的信息,请参阅在 Auto Scaling 组扩展时获取 SNS 通知

(可选) 更新竞争型实例的最高价

更新竞价型实例的最高价

  1. 创建一个启动配置,其设置与之前相同,但名称和最高价格不同,如下所示:

    Copy
    aws autoscaling create-launch-configuration --launch-configuration-name spot-lc-7cents --image-id ami-1a2b3c4d --instance-type m1.small --spot-price "0.07"
  2. 通过使用 update-auto-scaling-group 命令,修改您的 Auto Scaling 组,以使用新的启动配置,如下所示:

    Copy
    aws autoscaling update-auto-scaling-group --auto-scaling-group-name spot-asg --launch-configuration-name spot-lc-7cents
  3. 使用 describe-scaling-activities 命令查看您的更改,如下所示:

    Copy
    aws autoscaling describe-scaling-activities --auto-scaling-group-name spot-asg

清除

在使用实例和 Auto Scaling 组后,建议将其清除。在如下 delete-auto-scaling-group 命令中使用可选 --force-delete 参数,该参数指定 Auto Scaling 组中的实例随 Auto Scaling 组一同终止,即使实例仍在运行也是如此。否则,您必须终止这些实例,然后才能删除 Auto Scaling 组。

Copy
aws autoscaling delete-auto-scaling-group --auto-scaling-group-name spot-asg --force-delete