如何使用boto3和AWS Lambda函数计算特定区域中正在运行和已停止的EC2实例的数量?
下面是一些获取实例列表并计算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收到通知,有两个选项:
- 让Lambda功能使用
publish(PhoneNumber='123')
命令,或 直接通过Amazon SNS发送短信到您的手机 - 让Lambda函数使用
publish(TopicArn=xxx)
命令向Amazon SNS主题发送消息,然后通过首选方法(例如电子邮件,短信)订阅该SNS主题。
请注意,实例启动/停止需要一分钟左右的时间,所以如果你把它和启动/停止实例的代码结合起来,在发出这些命令后计数不会立即准确。