我们已宣布
在 Amazon CloudWatch 中使用警报操作
此 Node.js 代码示例演示:
如何根据 CloudWatch 警报自动更改 Amazon EC2 实例的状态。
情景
利用警报操作,您可以创建自动停止、终止、重启或恢复 Amazon EC2 实例的警报。当不再需要某个实例运行时,您可使用停止或终止操作。使用重启和恢复操作可以自动重启这些实例。
本示例使用一系列 Node.js 模块来定义 CloudWatch 中的警报操作,这些操作触发 Amazon EC2 实例的重启。这些 Node.js 模块使用 SDK for JavaScript,通过 CloudWatch
客户端类的以下方法来管理 Amazon EC2 实例:
有关 CloudWatch 警报操作的更多信息,请参阅《Amazon CloudWatch 用户指南》中的创建停止、终止、重启或恢复实例的警报。
先决条件任务
要设置和运行此示例,您必须先完成以下任务:
-
安装 Node.js。有关安装 Node.js 的更多信息,请参阅 Node.js 网站
。 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅从共享凭证文件加载 Node.js 中的凭证。
-
创建一个 IAM 角色,其策略授予描述、重启、停止或终止 Amazon EC2 实例的权限。有关创建 IAM 角色的更多信息,请参阅《IAM 用户指南》中的创建向 AWS 服务委派权限的角色。
在创建 IAM 角色时,使用以下角色策略。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:Describe*", "ec2:Describe*", "ec2:RebootInstances", "ec2:StopInstances*", "ec2:TerminateInstances" ], "Resource": [ "*" ] } ] }
通过创建全局配置对象然后为代码设置区域,来配置 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'});
创建并在警报上启用操作
创建文件名为 cw_enablealarmactions.js
的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 CloudWatch,请创建 AWS.CloudWatch
服务对象。
创建 JSON 对象以保存用于创建警报的参数,将 ActionsEnabled
指定为 true
,并为警报将触发的操作指定 ARN 数组。调用 AWS.CloudWatch
服务对象的 putMetricAlarm
方法,这会在警报不存在时创建警报,在警报存在时更新警报。
在 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 上的此处
禁用警报上的操作
创建文件名为 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 上的此处