Auto Scaling
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

在 Auto Scaling 组扩展时获取 CloudWatch Events

使用 Auto Scaling 自动扩展应用程序时,知道 Auto Scaling 何时启动或终止 Auto Scaling 组中的 EC2 实例会很有用。可以将 Auto Scaling 配置为在 Auto Scaling 组扩展时将事件发送到 Amazon CloudWatch Events。

有关更多信息,请参阅 Amazon CloudWatch Events 用户指南

Auto Scaling 事件

Auto Scaling 支持在发生以下事件时向 CloudWatch Events 发送通知:

EC2 实例启动生命周期操作

由于生命周期挂钩,Auto Scaling 已将实例移至 Pending:Wait 状态。

事件数据

以下是此事件的示例数据。

{
  "version": "0",
  "id": "12345678-1234-1234-1234-123456789012",
  "detail-type": "EC2 Instance-launch Lifecycle Action",
  "source": "aws.autoscaling",
  "account": "123456789012",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "us-west-2",
  "resources": [
    "auto-scaling-group-arn"
  ],
  "detail": { 
    "LifecycleActionToken":"87654321-4321-4321-4321-210987654321", 
    "AutoScalingGroupName":"my-asg", 
    "LifecycleHookName":"my-lifecycle-hook", 
    "EC2InstanceId":"i-12345678", 
    "LifecycleTransition":"autoscaling:EC2_INSTANCE_LAUNCHING" 
  } 
}

EC2 实例启动成功

Auto Scaling 已成功启动实例。

事件数据

以下是此事件的示例数据。

{
  "version": "0",
  "id": "12345678-1234-1234-1234-123456789012",
  "detail-type": "EC2 Instance Launch Successful",
  "source": "aws.autoscaling",
  "account": "123456789012",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "us-west-2",
  "resources": [
      "auto-scaling-group-arn",
      "instance-arn"
  ],
  "detail": {
      "StatusCode": "InProgress",
      "Description": "Launching a new EC2 instance: i-12345678",
      "AutoScalingGroupName": "my-auto-scaling-group",
      "ActivityId": "87654321-4321-4321-4321-210987654321",
      "Details": {
          "Availability Zone": "us-west-2b",
          "Subnet ID": "subnet-12345678"
      },
      "RequestId": "12345678-1234-1234-1234-123456789012",
      "StatusMessage": "",
      "EndTime": "yyyy-mm-ddThh:mm:ssZ",
      "EC2InstanceId": "i-12345678",
      "StartTime": "yyyy-mm-ddThh:mm:ssZ",
      "Cause": "description-text",
  }
}

EC2 实例启动失败

Auto Scaling 未能启动实例。

事件数据

以下是此事件的示例数据。

{
  "version": "0",
  "id": "12345678-1234-1234-1234-123456789012",
  "detail-type": "EC2 Instance Launch Unsuccessful",
  "source": "aws.autoscaling",
  "account": "123456789012",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "us-west-2",
  "resources": [
    "auto-scaling-group-arn",
    "instance-arn"
  ],
  "detail": {
      "StatusCode": "Failed",
      "AutoScalingGroupName": "my-auto-scaling-group",
      "ActivityId": "87654321-4321-4321-4321-210987654321",
      "Details": {
          "Availability Zone": "us-west-2b",
          "Subnet ID": "subnet-12345678"
      },
      "RequestId": "12345678-1234-1234-1234-123456789012",
      "StatusMessage": "message-text",
      "EndTime": "yyyy-mm-ddThh:mm:ssZ",
      "EC2InstanceId": "i-12345678",
      "StartTime": "yyyy-mm-ddThh:mm:ssZ",
      "Cause": "description-text",
  }
}

EC2 实例终止生命周期操作

由于生命周期挂钩,Auto Scaling 已将实例移至 Terminating:Wait 状态。

事件数据

以下是此事件的示例数据。

{
  "version": "0",
  "id": "12345678-1234-1234-1234-123456789012",
  "detail-type": "EC2 Instance-terminate Lifecycle Action",
  "source": "aws.autoscaling",
  "account": "123456789012",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "us-west-2",
  "resources": [
    "auto-scaling-group-arn"
  ],
  "detail": { 
    "LifecycleActionToken":"87654321-4321-4321-4321-210987654321", 
    "AutoScalingGroupName":"my-asg", 
    "LifecycleHookName":"my-lifecycle-hook", 
    "EC2InstanceId":"i-12345678", 
    "LifecycleTransition":"autoscaling:EC2_INSTANCE_TERMINATING" 
  } 
}

EC2 实例终止成功

Auto Scaling 已成功终止实例。

事件数据

以下是此事件的示例数据。

{
  "version": "0",
  "id": "12345678-1234-1234-1234-123456789012",
  "detail-type": "EC2 Instance Terminate Successful",
  "source": "aws.autoscaling",
  "account": "123456789012",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "us-west-2",
  "resources": [
    "auto-scaling-group-arn",
    "instance-arn"
  ],
  "detail": {
      "StatusCode": "InProgress",
      "Description": "Terminating EC2 instance: i-12345678",
      "AutoScalingGroupName": "my-auto-scaling-group",
      "ActivityId": "87654321-4321-4321-4321-210987654321",
      "Details": {
          "Availability Zone": "us-west-2b",
          "Subnet ID": "subnet-12345678"
      },
      "RequestId": "12345678-1234-1234-1234-123456789012",
      "StatusMessage": "",
      "EndTime": "yyyy-mm-ddThh:mm:ssZ",
      "EC2InstanceId": "i-12345678",
      "StartTime": "yyyy-mm-ddThh:mm:ssZ",
      "Cause": "description-text",
  }
}

EC2 实例终止失败

Auto Scaling 未能终止实例。

事件数据

以下是此事件的示例数据。

{
  "version": "0",
  "id": "12345678-1234-1234-1234-123456789012",
  "detail-type": "EC2 Instance Terminate Unsuccessful",
  "source": "aws.autoscaling",
  "account": "123456789012",
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "us-west-2",
  "resources": [
    "auto-scaling-group-arn",
    "instance-arn"
  ],
  "detail": {
      "StatusCode": "Failed",
      "AutoScalingGroupName": "my-auto-scaling-group",
      "ActivityId": "87654321-4321-4321-4321-210987654321",
      "Details": {
          "Availability Zone": "us-west-2b",
          "Subnet ID": "subnet-12345678"
      },
      "RequestId": "12345678-1234-1234-1234-123456789012",
      "StatusMessage": "message-text",
      "EndTime": "yyyy-mm-ddThh:mm:ssZ",
      "EC2InstanceId": "i-12345678",
      "StartTime": "yyyy-mm-ddThh:mm:ssZ",
      "Cause": "description-text",
  }
}

创建 Lambda 函数

使用以下过程可创建 Lambda 函数来处理 Auto Scaling 事件。

创建 Lambda 函数

  1. 通过以下网址打开 AWS Lambda 控制台:https://console.amazonaws.cn/lambda/

  2. 如果您是首次使用 Lambda,则会看到一个欢迎页面;请选择 Get Started Now;否则,请选择 Create a Lambda function

  3. Select blueprint 页面上,为 Filter 键入 hello-world,然后选择 hello-world 蓝图。

  4. Configure triggers 页面上,选择 Next

  5. Configure function 页面上,执行以下操作:

    1. 键入 Lambda 函数的名称和说明。

    2. 编辑 Lambda 函数的代码。例如,以下代码仅记录事件:

      Copy
      console.log('Loading function'); exports.handler = function(event, context) { console.log("AutoScalingEvent()"); console.log("Event data:\n" + JSON.stringify(event, null, 4)); context.succeed("..."); };
    3. 对于 Role,选择 Choose an existing role(如果您现在具有要使用的角色),然后从 Existing role 中选择您的角色。或者,要创建新角色,请为 Role 选择其他选项之一,然后按照说明执行操作。

    4. (可选)对于 Advanced settings,进行所需的任何更改。

    5. 选择 Next

  6. Review 页面上,选择 Create function

将事件路由到 Lambda 函数

使用以下过程将 Auto Scaling 事件路由到 Lambda 函数。

将事件路由到 Lambda 函数

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在导航窗格上,选择 Events

  3. 选择 Create rule

  4. 对于 Event selector,选择 Auto Scaling 作为事件源。默认情况下,规则将应用于您的所有 Auto Scaling 组的所有 Auto Scaling 事件。或者,您可以选择特定的事件或特定的 Auto Scaling 组。

  5. 对于 Targets,选择 Add target。选择 Lambda function 作为目标类型,然后选择 Lambda 函数。

  6. 选择 Configure details

  7. 对于 Rule definition,键入规则的名称和描述。

  8. 选择 Create rule

要测试您的规则,请更改 Auto Scaling 组的大小。如果您已对 Lambda 函数使用示例代码,则它会将事件记录到 CloudWatch Logs。

测试您的规则

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

  2. 在导航窗格上,选择 Auto Scaling Groups,然后选择您的 Auto Scaling 组。

  3. Details 选项卡上,选择 Edit

  4. 更改 Desired 的值,然后选择 Save

  5. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  6. 在导航窗格上,选择 Logs

  7. 选择 Lambda 函数的日志组(例如,/aws/lambda/my-function)。

  8. 选择日志流以查看事件数据。此时将显示数据,类似以下内容:

     在 CloudWatch Logs 中查看 Auto Scaling 的事件数据。