如何解决使用 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 应该对此负责,并检查实例是否存在现有警报。
其他可能性是使用 CloudTrial 试验捕获 API 调用 create-instance
,然后设置警报。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。