Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用AWS Lambda统计正在运行和已停止的Ec2实例_Python_Amazon Web Services_Amazon Ec2_Aws Lambda_Boto3 - Fatal编程技术网

Python 使用AWS Lambda统计正在运行和已停止的Ec2实例

Python 使用AWS Lambda统计正在运行和已停止的Ec2实例,python,amazon-web-services,amazon-ec2,aws-lambda,boto3,Python,Amazon Web Services,Amazon Ec2,Aws Lambda,Boto3,如何使用boto3和AWS Lambda函数计算特定区域中运行和停止的EC2实例数?以下是一些代码,用于检索实例列表并计算停止的和运行的实例数: 导入boto3 def lambda_处理程序(事件、上下文): ec2_resource=boto3.resource('ec2') instances=[instance.state[“Name”]例如ec2_resource.instances.all()中的实例 打印('Running:',instances.count('Running'))

如何使用boto3和AWS Lambda函数计算特定区域中运行和停止的EC2实例数?

以下是一些代码,用于检索实例列表并计算停止的
和运行的
实例数:

导入boto3
def lambda_处理程序(事件、上下文):
ec2_resource=boto3.resource('ec2')
instances=[instance.state[“Name”]例如ec2_resource.instances.all()中的实例
打印('Running:',instances.count('Running'))
打印('Stopped:',instances.count('Stopped'))
调用
ec2\u resource.instances.all()
检索所有实例的列表,并且有一个
state
属性包含状态的
Name

这将在Lambda函数的默认区域中运行。如果要更改区域,请按如下方式指定区域名称:

ec2_resource=boto3.resource('ec2',region_name='ap-Southast-2')

更新:如何通过SNS获得通知

如果您希望通过SNS获得通知,有两种选择:

  • 让Lambda功能使用命令通过Amazon SNS直接向您的手机发送短信,或
  • 让Lambda函数使用
    publish(TopicArn=xxx)
    命令向Amazon SNS主题发送消息,然后通过首选方法(如电子邮件、短信)订阅SNS主题

请注意,实例的启动/停止需要一分钟左右的时间,因此如果您将其与启动/停止实例的代码结合使用,发出这些命令后,计数不会立即准确。

请更具体地说明您迄今为止尝试了什么或问题所在。当我测试该脚本时,该脚本似乎工作正常,但如何在该脚本运行时通过SNS获得通知?我有一个启动和停止EC2实例的lambda脚本,我想要一个lambda函数在触发停止和启动lambda函数时自动计数并通知我已停止和正在运行的EC2实例的数量。我已经创建了带有预定规则和SNS主题的CloudWatch事件,但仍然没有收到任何通知。我还将SNS主题作为触发器添加到每个lambda函数中,但这似乎不起作用。如果您有任何建议,我将不胜感激。我不明白您为什么要添加SNS作为Lambda函数的触发器——这似乎有点倒退,因为它会在SNS收到消息后触发Lambda,但您似乎想要相反的结果。我在回答中添加了一些细节。我的问题是,如何将您编写的此函数(运行和停止状态函数)连接到我拥有的停止和启动EC2 lambda函数,以及如何在EC2由lambda停止和启动时通过SNS将此确切的EC2计数函数作为电子邮件发送?这篇文章(TopicArn=xxx)对我来说不太管用。我想我可怜的python技能在这里对我没有好处。同时,cloudwatch事件规则对我也不起作用。我怀疑你有很多概念混在一起,这会混淆你的目标。如果现有Lambda函数停止和启动实例,则可以将此代码添加到该函数中。(您是否自己编写了停止/启动函数?)您应该尝试调试为什么
publish()
不起作用——首先,手动向控制台中的主题发送消息,以确认您收到了电子邮件。然后,尝试使用
publish()
命令,查看它是否给出错误消息。可能是Lambda函数没有被分配调用SNS
publish()
命令的权限。这是我的脚本,它按计划停止ec2实例,我还有另一个脚本也按计划启动ec2。上面的脚本给出了已停止和正在运行的实例的数量,我希望在触发下面的脚本时得到通知。发布功能放在哪里?导入boto3区域='us-east-1'实例=['i-053']ec2=boto3.client('ec2',region_name=region)def lambda_处理程序(事件,上下文):ec2.stop_实例(instanceId=instances)打印('Instance Stopped:'+str(实例))