在 Amazon CloudWatch 中使用警报操作 - AWS SDK for JavaScript

帮助我们改进AWS SDK for JavaScript版本 3 (V3) 文档,方法是使用反馈链接,或者在上创建议题或拉取请求GitHub.

这些区域有:AWS SDK for JavaScriptV3 API 参考指南详细描述了所有的 API 操作AWS SDK for JavaScript版本 3 (V3)。

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

在 Amazon CloudWatch 中使用警报操作

JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

  • 如何根据 CloudWatch 警报自动更改 Amazon EC2 实例的状态。

场景

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

在此示例中,使用了一系列 Node.js 模块来定义 CloudWatch 中的警报操作,这些操作触发 Amazon EC2 实例的重启。Node.js 模块使用适用于 JavaScript 的开发工具包,通过以下方法来管理 Amazon EC2 实例。CloudWatch客户端类:

有关 CloudWatch 警报操作的更多信息,请参阅创建警报以停止、终止、重启或恢复实例中的Amazon CloudWatch 用户指南.

先决条件任

要设置和运行此示例,您必须先完成以下任务:

  • 设置项目环境以运行这些 Node TypeScript 示例,然后安装所需的AWS SDK for JavaScript和第三方模块。按照上的说明操作GitHub.

  • 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅从共享凭证文件加载 Node.js 中的凭证

  • 创建一个 IAM 角色,其策略授予描述、重启、停止或终止 Amazon EC2 实例的权限。有关创建 IAM 角色的更多信息,请参阅创建向AWS服务中的IAM 用户指南.

重要

这些示例使用 ECMASCRIPT6 (ES6)。这需要 Node.js 版本 13.x 或更高版本。要下载并安装最新版本的 Node.js,请参阅。Node.js 下载内容。.

但是,如果你更喜欢使用 CommonJS 语法,请参阅JavaScript ES6/常用JS 语法

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

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

这些示例演示了如何使用 ECMASCRIPT6 (ES6) 导入/导出客户端服务对象和命令。

针对警报创建和启用操作

创建libs创建文件名为的 Node.js 模块cloudWatchClient.js. 将下面的代码复制并粘贴到其中,这将创建 CloudWatch 客户端对象。Replace领域使用您的AWSregion region。

import { CloudWatchClient } from "@aws-sdk/client-cloudwatch"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create an Amazon CloudWatch service client object. export const cwClient = new CloudWatchClient({ region: REGION });

这个代码是可用的GitHub 上的位置.

创建文件名为 enableAlarmActions.js 的 Node.js 模块。确保按前面所示配置开发工具包,包括下载 CloudWatch 客户端。

创建 JSON 对象以保存用于创建警报的参数,并指定ActionsEnabled如同true并为警报将触发的操作提供一系列 Amazon 资源名称 (ARN)。调用PutMetricAlarmCommand方法CloudWatch客户端服务对象,这会在警报不存在时创建警报,在警报存在时更新警报。

在适用于的回调函数中PutMetricAlarmCommand,在成功完成时,创建一个包含 CloudWatch 警报的名称的 JSON 对象。调用 EnableAlarmActionsCommand 方法以启用警报操作。

注意

ReplaceALARM_NAME用警报的名称,INSTANCE_ID将用 Amazon EC2 实例的 ID。

// Import required AWS SDK clients and commands for Node.js import { PutMetricAlarmCommand, EnableAlarmActionsCommand, } from "@aws-sdk/client-cloudwatch"; import { cwClient } from "./libs/cloudWatchClient.js"; // Set the parameters export const params = { AlarmName: "ALARM_NAME", //ALARM_NAME ComparisonOperator: "GreaterThanThreshold", EvaluationPeriods: 1, MetricName: "CPUUtilization", Namespace: "AWS/EC2", Period: 60, Statistic: "Average", Threshold: 70.0, ActionsEnabled: true, AlarmActions: ["ACTION_ARN"], //e.g., "arn:aws:automate:us-east-1:ec2:stop" AlarmDescription: "Alarm when server CPU exceeds 70%", Dimensions: [ { Name: "InstanceId", Value: "INSTANCE_ID", }, ], Unit: "Percent", }; export const run = async () => { try { const data = await cwClient.send(new PutMetricAlarmCommand(params)); console.log("Alarm action added; RequestID:", data); return data; const paramsEnableAlarmAction = { AlarmNames: [params.AlarmName], }; try { const data = await cwClient.send( new EnableAlarmActionsCommand(paramsEnableAlarmAction) ); console.log("Alarm action enabled; RequestID:", data.$metadata.requestId); } catch (err) { console.log("Error", err); return data; } } catch (err) { console.log("Error", err); } }; // Uncomment this line to run execution within this file. // run();

要运行示例,请在命令提示符处输入以下内容。

node enableAlarmActions.js

可以找到这个示例代码GitHub 上的位置.

禁用警报上的操作

创建libs创建文件名为的 Node.js 模块cloudWatchClient.js. 将下面的代码复制并粘贴到其中,这将创建 CloudWatch 客户端对象。Replace领域使用您的AWSregion region。

import { CloudWatchClient } from "@aws-sdk/client-cloudwatch"; // Set the AWS Region. const REGION = "REGION"; //e.g. "us-east-1" // Create an Amazon CloudWatch service client object. export const cwClient = new CloudWatchClient({ region: REGION });

这个代码是可用的GitHub 上的位置.

创建文件名为 disableAlarmActions.js 的 Node.js 模块。确保按前面所示配置开发工具包,包括下载 CloudWatch 客户端。创建一个包含 CloudWatch 警报的名称的 JSON 对象。调用 DisableAlarmActionsCommand 方法以禁用此警报的操作。

注意

ReplaceALARM_NAME警报名称。

// Import required AWS SDK clients and commands for Node.js import { DisableAlarmActionsCommand } from "@aws-sdk/client-cloudwatch"; import { cwClient } from "./libs/cloudWatchClient.js"; // Set the parameters export const params = { AlarmNames: "ALARM_NAME" }; // e.g., "Web_Server_CPU_Utilization" export const run = async () => { try { const data = await cwClient.send(new DisableAlarmActionsCommand(params)); console.log("Success, alarm disabled:", data); return data; } catch (err) { console.log("Error", err); } }; // Uncomment this line to run execution within this file. // run();

要运行示例,请在命令提示符处输入以下内容。

node disableAlarmActions.js

可以找到这个示例代码GitHub 上的位置.