弹性伸缩(简称ESS,也称为Auto Scaling)在业务需求增长时无缝地增加ECS实例数量保证计算能力,在业务需求下降时自动减少ECS实例数量节约成本。为了提供更加弹性、灵活的伸缩服务,伸缩配置支持设置标签、密钥对、实例RAM角色和实例自定义数据。本文介绍4个特性的作用并演示其使用方式。

前提条件

使用本教程进行操作前,请确保您已经注册了阿里云账号。如还未注册,请先完成账号注册

背景信息

弹性伸缩不仅提供了在业务需求高峰或低谷时自动调节ECS实例活ECI实例数量的能力,而且提供了在ECS实例活ECI实例上自动部署应用的能力。合理使用弹性伸缩服务,不仅能够有效地降低您的服务器成本,而且能够有效地降低您的服务管理和运维成本。

弹性伸缩的伸缩配置支持多种特性,可以高效、灵活地自定义ECS实例或ECI实例的配置。为了帮助您准确地理解和使用弹性伸缩服务,本文将结合伸缩配置特性介绍内容,演示伸缩组自动伸缩和自动部署的效果,包括为实例自动添加实例RAM角色、标签属性,设置实例支持密钥对登录,并在实例启动后自动执行自定义脚本。

伸缩配置特性介绍

本文中的伸缩配置特性主要包括标签、密钥对、实例RAM角色和实例自定义数据四种特性,其详细信息如下所示:
特性类别说明相关链接
标签标签可以识别资源和用户组,允许企业或个人将相同作用的ECS或ECI资源归类,便于搜索和资源聚合。标签概述
  • 控制台:通过弹性伸缩控制台创建伸缩配置时,选择已创建好的标签即可。
  • API:通过API创建伸缩配置时,您可以使用Tags选择标签。
SSH密钥对阿里云只支持RSA 2048位的密钥对,仅Linux系统的ECS实例支持SSH密钥对登录。在创建SSH密钥对时,阿里云会保存密钥的公钥,并向您返回密钥部分。
在弹性伸缩自动创建出ECS实例后,ECS实例会存储该SSH密钥对的公钥,您在本机使用SSH密钥对的私钥即可登录自动创建的ECS实例。
说明 相比密码方式,使用SSH密钥对登录Linux实例更加快速、安全,您只需要在创建伸缩配置时选择SSH密钥对。
SSH密钥对概述
  • 控制台:通过弹性伸缩控制台创建伸缩配置时,选择已创建好的密钥对即可。
  • API:通过API创建伸缩配置时,您可以使用KeyPairName选择SSH密钥对。
实例RAM角色访问控制(Resource Access Management,RAM)是阿里云提供的一项管理用户身份与资源访问权限的服务。RAM支持创建不同的角色,不同的角色对不同的云产品具有不同的操作权限。

实例RAM角色让ECS实例扮演具有某些权限的角色,从而赋予实例一定的访问权限。在伸缩配置中选择实例RAM角色时,请确保实例RAM角色的权限策略允许您的实例扮演该实例RAM角色,否则伸缩配置无法弹出实例。

实例RAM角色概述
  • 控制台:通过弹性伸缩控制台创建伸缩配置时,选择已创建好的实例RAM角色即可。
  • API:通过API创建伸缩配置时,您可以使用RamRoleName选择实例RAM角色。
实例自定义数据Windows实例和Linux实例均支持设置实例自定义数据功能,主要功能体现如下所示:
  • 自定义功能:作为实例自定义脚本在启动实例时执行,您可以自定义实例的启动行为。
  • 引用功能:作为普通数据向实例传入信息,您可以在实例中引用这些数据。
ECS实例自定义数据概述
  • 控制台:通过弹性伸缩控制台创建伸缩配置时,您只需要准备好实例自定义脚本,然后以Base64编码的方式传入伸缩配置即可,自动创建的ECS实例会在启动时自动执行实例自定义脚本,实现应用级别的扩容和缩容。
    说明 相比Terraform等开源IT基础架构管理工具,使用弹性伸缩原生的实例自定义数据更加快速、安全。关于使用实例自定义数据功能的注意事项和具体操作,请参见使用实例自定义数据自动配置ECS实例
  • API:通过API创建伸缩配置时,您可以使用UserData参数传入实例自定义数据。

步骤一:创建配置项

按照以下步骤创建所需的RAM角色、标签、密钥对和实例自定义数据。

  1. 创建标签。
    具体操作,请参见创建或绑定标签
  2. 创建密钥对。
    具体操作,请参见创建SSH密钥对
  3. 创建实例RAM角色。
    具体操作,请参见创建可信实体为阿里云服务的RAM角色。您也可以视情况选用已有的RAM角色,在伸缩配置中选择实例RAM角色时,请确保实例RAM角色的权限策略允许伸缩组内的实例扮演该RAM角色,否则伸缩配置无法弹出实例。例如,RAM角色AliyunECSImageExportDefaultRole用于授权导出镜像,允许当前用户的所有ECS实例扮演该RAM角色,其信任策略如下:
    {
        "Statement": [
            {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                    "Service": [
                        "ecs.aliyuncs.com"
                    ]
                }
            }
        ],
        "Version": "1"
    }
    说明 ecs.aliyuncs.com表示允许当前用户的所有ECS实例扮演该RAM角色。
  4. 生成实例自定义数据。
    具体操作,请参见ECS实例自定义数据概述。本文中,创建了一个Shell脚本,实现在实例首次启动后向/root/output10.txt文件写入字符串Hello World. The time is now{当前时间}。脚本示例如下:
    #!/bin/sh
    echo "Hello World.  The time is now $(date -R)!" | tee /root/output10.txt
    脚本经过Base64编码后内容如下:
    IyEvYmluL3NoDQplY2hvICJIZWxsbyBXb3JsZC4gIFRoZSB0aW1lIGlzIG5vdyAkKGRhdGUgLVIpISIgfCB0ZWUgL3Jvb3Qvb3V0cHV0MTAudHh0 

步骤二:应用配置项

按照以下步骤创建伸缩组和伸缩配置,并在伸缩配置中应用步骤一中创建的配置项。

  1. 创建伸缩组,并在创建成功后查看伸缩组详情。
    具体操作,请参见配置伸缩组
    创建伸缩组时,请注意以下配置项:
    配置项说明
    组内最小实例数设置为1,表示在启用伸缩组后即会自动创建一台ECS实例。
    组内实例配置信息来源选择从零开始创建的方式。
    网络类型选择专有网络类型。
    专有网络选择已创建的专有网络ID。
    选择交换机选择对应虚拟交换机。
  2. 创建伸缩配置,并在创建成功后启用配置。
    具体操作,请参见创建伸缩配置(ECS实例)
    创建伸缩组时,请注意以下配置项:
    配置项说明
    基础配置镜像选用公共镜像中的Ubuntu 16.04 64位位。
    系统配置标签选择步骤一:创建配置项中创建好的标签。
    登录凭证选择密钥对方式。
    密钥对选择步骤一:创建配置项中创建好的密钥对。
    高级选项(实例RAM角色&实例自定义数据cloud-init) > 实例RAM角色选择步骤一:创建配置项中创建好的实例RAM角色。
    高级选项(实例RAM角色&实例自定义数据cloud-init) > 实例自定义数据输入步骤一:创建配置项中准备的实例自定义数据脚本。
  3. 启用伸缩组。
    具体操作,请参见启用伸缩组

步骤三:验证自定义配置效果

由于创建伸缩组时指定组内最小实例数为1,在启用伸缩组后即会自动创建1台实例,保证伸缩组满足最小实例数的限制。

  1. 查看自动创建出的实例。
    具体操作,请参见查询实例列表
  2. 云服务器ID/名称列中,单击实例ID,查看实例详情。
    下图为实例详情,可见伸缩配置中的实例RAM角色和标签配置已生效。查看实例详情
  3. 使用SSH密钥对登录实例。
    具体操作,请参见通过密钥认证登录Linux实例
    下图为登录成功的效果,表示伸缩配置中的SSH密钥对配置已生效。使用密钥对成功登录实例
  4. 运行以下命令,查看/root/output10.txt文件内容。
    cat /root/output10.txt
    下图为文件内容,表示伸缩配置中的实例自定义数据配置已生效。自定义数据配置生效
    说明 本文使用的Shell脚本比较简单,您可以根据自己的需求定制脚本,在实例启动时自动实现更多功能。