

适用于 JavaScript 的 AWS SDK v2 已终止支持。建议您迁移到 [适用于 JavaScript 的 AWS SDK v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/)。有关更多详情和如何迁移的信息，请参阅本[公告](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)。

# 在 Amazon CloudWatch 中使用警报操作
<a name="cloudwatch-examples-using-alarm-actions"></a>

![\[JavaScript code example that applies to Node.js execution\]](http://docs.aws.amazon.com/zh_cn/sdk-for-javascript/v2/developer-guide/images/nodeicon.png)

**此 Node.js 代码示例演示：**
+ 如何根据 CloudWatch 警报自动更改 Amazon EC2 实例的状态。

## 情景
<a name="cloudwatch-examples-using-alarm-actions-scenario"></a>

利用警报操作，您可以创建自动停止、终止、重启或恢复 Amazon EC2 实例的警报。当不再需要某个实例运行时，您可使用停止或终止操作。使用重启和恢复操作可以自动重启这些实例。

本示例使用一系列 Node.js 模块来定义 CloudWatch 中的警报操作，这些操作触发 Amazon EC2 实例的重启。这些 Node.js 模块使用 SDK for JavaScript，通过 `CloudWatch` 客户端类的以下方法来管理 Amazon EC2 实例：
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatch.html#enableAlarmActions-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatch.html#enableAlarmActions-property)
+ [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatch.html#disableAlarmActions-property](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatch.html#disableAlarmActions-property)

有关 CloudWatch 警报操作的更多信息，请参阅《Amazon CloudWatch 用户指南》**中的[创建停止、终止、重启或恢复实例的警报](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingAlarmActions.html)。

## 先决条件任务
<a name="cloudwatch-examples-using-alarm-actions-prerequisites"></a>

要设置和运行此示例，您必须先完成以下任务：
+ 安装 Node.js。有关安装 Node.js 的更多信息，请参阅 [Node.js 网站](http://nodejs.org)。
+ 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息，请参阅[从共享凭证文件加载 Node.js 中的凭证](loading-node-credentials-shared.md)。
+ 创建一个 IAM 角色，其策略授予描述、重启、停止或终止 Amazon EC2 实例的权限。有关创建 IAM 角色的更多信息，请参阅《IAM 用户指南》**中的[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

在创建 IAM 角色时，使用以下角色策略。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "cloudwatch:Describe*",
            "ec2:Describe*",
            "ec2:RebootInstances",
            "ec2:StopInstances*",
            "ec2:TerminateInstances"
         ],
         "Resource": [
            "*"
         ]
      }
   ]
}
```

------

## 
<a name="cloudwatch-examples-using-alarm-actions-configure-sdk"></a>

通过创建全局配置对象然后为代码设置区域，来配置 SDK for JavaScript。在此示例中，区域设置为 `us-west-2`。

```
// Load the SDK for JavaScript
var AWS = require('aws-sdk');
// Set the Region 
AWS.config.update({region: 'us-west-2'});
```

## 创建并在警报上启用操作
<a name="cloudwatch-examples-using-alarm-actions-enabling"></a>

创建文件名为 `cw_enablealarmactions.js` 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 CloudWatch，请创建 `AWS.CloudWatch` 服务对象。

创建 JSON 对象以保存用于创建警报的参数，将 `ActionsEnabled` 指定为 `true`，并为警报将触发的操作指定 ARN 数组。调用 `putMetricAlarm` 服务对象的 `AWS.CloudWatch` 方法，这会在警报不存在时创建警报，在警报存在时更新警报。

在 `putMetricAlarm` 的回调函数中，成功完成时，将创建一个包含 CloudWatch 警报名称的 JSON 对象。调用 `enableAlarmActions` 方法以启用警报操作。

```
// Load the AWS SDK for Node.js
var AWS = require("aws-sdk");
// Set the region
AWS.config.update({ region: "REGION" });

// Create CloudWatch service object
var cw = new AWS.CloudWatch({ apiVersion: "2010-08-01" });

var params = {
  AlarmName: "Web_Server_CPU_Utilization",
  ComparisonOperator: "GreaterThanThreshold",
  EvaluationPeriods: 1,
  MetricName: "CPUUtilization",
  Namespace: "AWS/EC2",
  Period: 60,
  Statistic: "Average",
  Threshold: 70.0,
  ActionsEnabled: true,
  AlarmActions: ["ACTION_ARN"],
  AlarmDescription: "Alarm when server CPU exceeds 70%",
  Dimensions: [
    {
      Name: "InstanceId",
      Value: "INSTANCE_ID",
    },
  ],
  Unit: "Percent",
};

cw.putMetricAlarm(params, function (err, data) {
  if (err) {
    console.log("Error", err);
  } else {
    console.log("Alarm action added", data);
    var paramsEnableAlarmAction = {
      AlarmNames: [params.AlarmName],
    };
    cw.enableAlarmActions(paramsEnableAlarmAction, function (err, data) {
      if (err) {
        console.log("Error", err);
      } else {
        console.log("Alarm action enabled", data);
      }
    });
  }
});
```

要运行示例，请在命令行中键入以下内容。

```
node cw_enablealarmactions.js
```

此示例代码可在 [GitHub 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/cloudwatch/cw_enablealarmactions.js)找到。

## 禁用警报上的操作
<a name="cloudwatch-examples-using-alarm-actions-disabling"></a>

创建文件名为 `cw_disablealarmactions.js` 的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 CloudWatch，请创建 `AWS.CloudWatch` 服务对象。创建一个包含 CloudWatch 警报名称的 JSON 对象。调用 `disableAlarmActions` 方法以禁用此警报的操作。

```
// Load the AWS SDK for Node.js
var AWS = require("aws-sdk");
// Set the region
AWS.config.update({ region: "REGION" });

// Create CloudWatch service object
var cw = new AWS.CloudWatch({ apiVersion: "2010-08-01" });

cw.disableAlarmActions(
  { AlarmNames: ["Web_Server_CPU_Utilization"] },
  function (err, data) {
    if (err) {
      console.log("Error", err);
    } else {
      console.log("Success", data);
    }
  }
);
```

要运行示例，请在命令行中键入以下内容。

```
node cw_disablealarmactions.js
```

此示例代码可在 [GitHub 上的此处](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javascript/example_code/cloudwatch/cw_disablealarmactions.js)找到。