Python 使用AWS Lambda统计正在运行和已停止的Ec2实例
如何使用boto3和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
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函数没有被分配调用SNSpublish()
命令的权限。这是我的脚本,它按计划停止ec2实例,我还有另一个脚本也按计划启动ec2。上面的脚本给出了已停止和正在运行的实例的数量,我希望在触发下面的脚本时得到通知。发布功能放在哪里?导入boto3区域='us-east-1'实例=['i-053']ec2=boto3.client('ec2',region_name=region)def lambda_处理程序(事件,上下文):ec2.stop_实例(instanceId=instances)打印('Instance Stopped:'+str(实例))