微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 terraform 创建 lambda 函数

如何解决使用 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。有没有人以前做过这件事并且能够提供帮助...

谢谢。

解决方法

为了实现目标,您必须创建和相互连接的元素很少。

  1. 创建 aws_cloudwatch_event_rule 以捕获进入运行状态的实例。可以使用以下规则:
{
  "source": ["aws.ec2"],"detail-type": ["EC2 Instance State-change Notification"],"detail": {
    "state": ["running"]
  }
}
  1. 设置 aws_lambda_permission 以便规则可以触发您的 lambda。

  2. 使用 aws_cloudwatch_event_target 将您的 lambda 函数设置为规则的目标。

  3. 您的函数在触发时会为实例创建警报

根据您的特定用例,如果实例从停止状态变为运行状态,也会触发该规则。您的lambda 应该对此负责,并检查实例是否存在现有警报。

其他可能性是使用 CloudTrial 试验捕获 API 调用 create-instance,然后设置警报。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?