

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用现有实例创建 Auto Scaling 组 AWS CLI
<a name="create-asg-from-instance"></a>

**重要**  
我们为尚未从启动配置迁移到启动模板的客户提供有关启动配置的信息。有关为自动扩缩组创建启动模板的更多信息，请参阅 [将自动扩缩组迁移到启动模板](migrate-to-launch-templates.md)。

如果这是您第一次创建 Auto Scaling 组，我们建议您使用控制台从现有 EC2 实例创建启动模板。然后使用启动模板创建新的 Auto Scaling 组。有关此步骤，请参阅 [使用 Amazon EC2 启动向导创建 Auto Scaling 组](create-asg-ec2-wizard.md)。

以下程序演示了如何通过如下方法创建 Auto Scaling 组：指定要用作启动其他实例基础的现有实例。创建 EC2 实例需要多个参数，例如 Amazon Machine Image (AMI) ID、实例类型、密钥对和安全组。Amazon EC2 Auto Scaling 还使用所有这些信息，以便在需要扩展时代表您启动实例。此信息存储在启动模板或启动配置中。

当您使用现有实例时，Amazon EC2 Auto Scaling 会创建一个 Auto Scaling 组，该组将根据同时创建的启动配置启动实例。Auto Scaling 组的名称与 Auto Scaling 组相同，并且包括来自已识别实例的某些配置详细信息。

以下配置详细信息会从已识别的实例复制到启动配置中：
+ AMI ID
+ 实例类型
+ 密钥对
+ 安全组
+ IP 地址类型（公有或私有）
+ IAM 实例配置文件（如果适用）
+ 监控（true 或 false）
+ EBS 优化（true 或 false）
+ 租期设置 (如果在 VPC (共享或专用) 中启动)
+ 内核 ID 和 RAM 磁盘 ID (如果适用)
+ 用户数据，如果指定 
+ Spot（最高）价格

VPC 子网和可用区将从已识别的实例复制到自动扩缩组自己的资源定义中。

如果已识别的实例位于置放群组中，则新 Auto Scaling 组将在与已识别实例相同的置放群组中启动实例。由于启动配置设置不允许指定置放群组，因此将置放群组复制到新 Auto Scaling 组的 `PlacementGroup` 属性。

不会从已识别实例中复制以下配置详细信息，
+ 存储：不会从已识别的实例中复制块储存设备（EBS 卷和实例存储卷）。相反，作为创建 AMI 的一部分而创建的块储存设备映射决定了使用哪些设备。
+ 网络接口数量：网络接口未从已识别的实例中复制。相反，Amazon EC2 Auto Scaling 会使用其默认设置创建一个网络接口，即主网络接口 (eth0)。
+ 实例元数据选项：不会从已识别的实例中复制元数据可访问、元数据版本和令牌响应跃点数限制设置。相反，Amazon EC2 Auto Scaling 会使用其默认设置。有关更多信息，请参阅 [配置实例元数据选项](create-launch-config.md#launch-configurations-imds)。
+ 负载均衡器：如果识别的实例适用一个或多个负载均衡器进行注册，则有关负载均衡器的信息不会复制到负载均衡器或新 Auto Scaling 组的目标组属性。
+ 标签：如果识别的实例有标签，标签不会复制到新 Auto Scaling 组的 `Tags` 属性。

## 先决条件
<a name="create-asg-from-instance-prerequisites"></a>

EC2 实例必须符合以下标准：
+ 实例不是其他 Auto Scaling 组的成员。
+ 实例处于 `running` 状态。
+ 用于启动实例的 AMI 必须仍然存在。

## 从 EC2 实例创建 Auto Scaling 组 (AWS CLI)
<a name="create-asg-from-instance-aws-cli"></a>

以下示例过程向您展示了如何使用 CLI 命令从 EC2 实例创建自动扩缩组。

此程序不会将实例添加到 Auto Scaling 组中。要连接实例，必须在创建 Auto Scaling 组之后运行 [attach-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/attach-instances.html) 命令。

开始之前，请使用 Amazon EC2 控制台或 [describe-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-instances.html) 命令查找 EC2 实例的 ID。

**将当前实例用作模板**
+ 使用以下[create-auto-scaling-group](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/create-auto-scaling-group.html)命令从 EC2 实例创建 Auto Scaling 组`i-123456789abcdefg0`。`my-asg-from-instance`

  ```
  aws autoscaling create-auto-scaling-group --auto-scaling-group-name {{my-asg-from-instance}} \
    --instance-id {{i-123456789abcdefg0}} --min-size {{1}} --max-size {{2}} --desired-capacity {{2}}
  ```

**验证 Auto Scaling 组已启动实例**
+ 使用以下[describe-auto-scaling-groups](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-auto-scaling-groups.html)命令验证 Auto Scaling 组是否已成功创建。

  ```
  aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name {{my-asg-from-instance}}
  ```

  以下示例响应显示该组的所需容量为 2，该组有 2 个正在运行的实例，启动配置命名为 `my-asg-from-instance`。

  ```
  {
    "AutoScalingGroups":[
      {
        "AutoScalingGroupName":"my-asg-from-instance",
        "AutoScalingGroupARN":"{{arn}}",
        "LaunchConfigurationName":"my-asg-from-instance",
        "MinSize":1,
        "MaxSize":2,
        "DesiredCapacity":2,
        "DefaultCooldown":300,
        "AvailabilityZones":[
          "us-west-2a"
        ],
        "LoadBalancerNames":[],
        "TargetGroupARNs":[],
        "HealthCheckType":"EC2",
        "HealthCheckGracePeriod":0,
        "Instances":[
          {
            "InstanceId":"i-34567890abcdef012",
            "InstanceType":"t2.micro",
            "AvailabilityZone":"us-west-2a",
            "LifecycleState":"InService",
            "HealthStatus":"Healthy",
            "LaunchConfigurationName":"my-asg-from-instance",
            "ProtectedFromScaleIn":false
          },
          {
            "InstanceId":"i-012345abcdefg6789",
            "InstanceType":"t2.micro",
            "AvailabilityZone":"us-west-2a",
            "LifecycleState":"InService",
            "HealthStatus":"Healthy",
            "LaunchConfigurationName":"my-asg-from-instance",
            "ProtectedFromScaleIn":false
          }
        ],
        "CreatedTime":"2020-10-28T02:39:22.152Z",
        "SuspendedProcesses":[ ],
        "VPCZoneIdentifier":"subnet-0abc1234",
        "EnabledMetrics":[ ],
        "Tags":[ ],
        "TerminationPolicies":[
          "Default"
        ],
        "NewInstancesProtectedFromScaleIn":false,
        "ServiceLinkedRoleARN":"{{arn}}",
        "TrafficSources":[]
      }
    ]
  }
  ```

**查看启动配置**
+ 使用以下[describe-launch-configurations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/describe-launch-configurations.html)命令查看启动配置的详细信息。

  ```
  aws autoscaling describe-launch-configurations --launch-configuration-names {{my-asg-from-instance}}
  ```

  下面是示例输出：

  ```
  {
    "LaunchConfigurations":[
      {
        "LaunchConfigurationName":"my-asg-from-instance",
        "LaunchConfigurationARN":"{{arn}}",
        "ImageId":"ami-234567890abcdefgh",
        "KeyName":"my-key-pair-uswest2",
        "SecurityGroups":[
          "sg-12abcdefgh3456789"
        ],
        "ClassicLinkVPCSecurityGroups":[ ],
        "UserData":"",
        "InstanceType":"t2.micro",
        "KernelId":"",
        "RamdiskId":"",
        "BlockDeviceMappings":[ ],
        "InstanceMonitoring":{
          "Enabled":true
        },
        "CreatedTime":"2020-10-28T02:39:22.321Z",
        "EbsOptimized":false,
        "AssociatePublicIpAddress":true
      }
    ]
  }
  ```

**终止实例**
+ 如果您不再需要实例，可终止它。以下 [terminate-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/terminate-instances.html) 命令可终止实例`i-123456789abcdefg0`。

  ```
  aws ec2 terminate-instances --instance-ids {{i-123456789abcdefg0}}
  ```

  终止 Amazon EC2 实例后，您无法重新启动实例。终止后，卷上的数据都不复存在，并且再也不能附加到任何实例。要了解有关终止实例的更多信息，请参阅《Amazon EC2 用户指南》**中的[终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)。