【发布时间】:2021-05-30 01:09:47
【问题描述】:
如何使用 boto3 和 AWS Lambda 函数计算特定区域中正在运行和停止的 EC2 实例的数量?
【问题讨论】:
-
请更具体地说明您到目前为止所尝试的内容或问题所在。
标签: python amazon-web-services amazon-ec2 aws-lambda boto3
如何使用 boto3 和 AWS Lambda 函数计算特定区域中正在运行和停止的 EC2 实例的数量?
【问题讨论】:
标签: python amazon-web-services amazon-ec2 aws-lambda boto3
下面是一些检索实例列表并计算stopped 和running 实例数量的代码:
import boto3
def lambda_handler(event, context):
ec2_resource = boto3.resource('ec2')
instances = [instance.state["Name"] for instance in ec2_resource.instances.all()]
print('Running: ', instances.count('running'))
print('Stopped: ', instances.count('stopped'))
对ec2_resource.instances.all() 的调用检索所有实例的列表,并且有一个state 属性包含状态的Name。
这将在 Lambda 函数的默认区域中运行。如果您想更改区域,请指定区域名称,如下所示:
ec2_resource = boto3.resource('ec2', region_name='ap-southeast-2')
更新:如何通过 SNS 获得通知。
如果您想通过 SNS 收到通知,有两种选择:
publish(PhoneNumber='123') 命令通过 Amazon SNS 直接向您的手机发送 SMS 消息,或
publish(TopicArn=xxx) 命令向 Amazon SNS 主题发送消息,然后通过首选方法(例如电子邮件、短信)订阅 SNS 主题。请注意,实例启动/停止需要一分钟左右,因此如果将此与启动/停止实例的代码结合使用,发出这些命令后计数将不会立即准确。
【讨论】:
publish() 不起作用——首先,手动向控制台中的主题发送消息以确认您收到电子邮件。然后,尝试使用publish() 命令并查看它是否给出错误消息。可能是 Lambda 函数没有被分配调用 SNS publish() 命令的权限。