amazon-web-services - 使用 terraform 创建 lambda 函数
问题描述
在下面的示例中,我们可以看到 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。有没有人这样做过并能够提供帮助...
谢谢。
解决方案
您必须创建一些元素并相互关联才能实现您的目标。
- 创建aws_cloudwatch_event_rule以捕获进入运行状态的实例。可以使用以下规则:
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["running"]
}
}
设置aws_lambda_permission以便规则可以触发您的 lambda。
使用aws_cloudwatch_event_target将您的 lambda 函数设置为规则的目标。
您的函数在触发时将为实例创建警报。
根据您的特定用例,如果实例从停止状态变为运行状态,也会触发规则。您的lambda 应该考虑到这一点,并检查实例是否存在现有警报。
其他可能性是create-instance
使用 CloudTrial 试验捕获 API 调用,然后设置警报。
推荐阅读
- matlab - 任何有经验的 matlab 编码员可以建议提高我的代码效率的方法吗?
- django - 创建表单向导/表单集以回答表格中的问题并将其保存到另一个(调查)
- gradle - 无法通过 jmRun 将参数从 build.gradle 文件传递给 .jmx 文件
- javascript - WebSocket 的 fetch 的“credentials:'include'”或 XMLHttpRequest 的“withCredentials”是否有等价物?
- java - 如何使用每个可能的真假组合生成布尔数组
- c# - 从两个表中打印数据并获取与一个客户相关的所有项目
- node.js - 你如何使用 express 服务 css 文件?
- javascript - 如何在编译时从缓存参数中延迟“新功能”,等到它被使用
- sql - SQL中的增量下个月日期
- java - 如何操作http GET请求整数参数?