【发布时间】:2021-07-18 05:29:24
【问题描述】:
在下面的示例中,我们可以看到 lambda 函数的代码,该函数根据 cpu 利用率在 cloudwatch 中创建警报。
import boto3
import collections
from datetime import datetime
import calendar
def lambda_handler(event, context):
client = boto3.client('cloudwatch')
alarm = client.put_metric_alarm(
AlarmName='CPU Alarm',
MetricName='CPUUtilization',
Namespace='AWS/EC2',
Statistic='Average',
ComparisonOperator='GreaterThanOrEqualToThreshold',
Threshold=70.0,
Period=10,
EvaluationPeriods=1,
Dimensions=[
{
'Name': 'InstanceId',
'Value': '{instance_id}'
}
],
Unit='Percent',
ActionsEnabled=True,
AlarmActions=['arn:aws:sns:us-east-1:xxxxxxxxxxxx:CloudWatch'])
我很难理解如何在 terraform 中创建它。有人可以帮忙吗?关键是我需要它工作,以便在实例启动后立即创建警报,这就是触发 lambda 的事件。
我“认为”我的 .tf 文件看起来像这样...?
resource "aws_cloudwatch_metric_alarm" "CPU Alarm" {
alarm_name = "CPU Alarm"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "1"
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = "10"
statistic = "Average"
threshold = "70"
alarm_description = "This metric monitors ec2 cpu utilization"
insufficient_data_actions = []
}
我很想让它工作,这样每个启动的实例都会创建一个特定的指标来监控其 CPU。有没有人这样做过并且能够提供帮助...
谢谢。
【问题讨论】:
-
那么您在 TF 中创建的这个警报应该会触发您有问题的 lambda 函数?
-
Lambda 函数将在 tf 中创建,并且 lambda 将由 EC2 中的“运行”状态触发。 lambda 函数创建 cpu 警报。
-
您是否正在管理您想要使用 Terraform 创建警报的 EC2 实例?如果是,您不能将
aws_cloudwatch_metric_alarm与for_each结合起来创建所需的警报吗? -
我同意 yvesonline 所说的。如果 EC2 实例是由 Terraform 创建的,那么应该可以让 Terraform 创建 CW 警报。如果 EC2 实例是以其他方式创建的,并且您确实需要 Lambda 来配置 CW 警报,那么我建议查看可以触发 Lambda 的 EC2 状态更改事件。它位于最新文档中的 AWS EventBridge 下。这将允许您在启动实例时触发您的函数(使用实例 ID 和状态)。
标签: amazon-web-services aws-lambda terraform amazon-cloudwatch