AWS Python boto3-通过ID获得实例运行时间



我正在尝试查找实例已使用python boto3库进行AWS的分钟数。我找不到直接做到这一点的方法。我可以使用以下方式获得机器的状态:

ec2 = boto3.resource('ec2')
instance = ec2.Instance(instance_id)
status = instance.state['Name']
print(status)

但是我要寻找的是一个简单的指标:实例正在运行的分钟数。请注意,这不是实例的正常运行时间,因为它在停止时会重置。

这是您可以尝试的想法。查询CloudTrail数据的" RunInstance"," Stopinstance"one_answers" StartInstance"计算实例的总运行时间。

这是我创建的脚本。https://gist.github.com/sudharsans/990dbb67f397d79556dbc02e5835e5e5e5ec

样本输出:

i-0xxxxxfcd40ebd6a1 user 0:09:21.263278
i-xxxxxx502450c96aa yser 84 days, 15:13:37.651975
i-xxxxxxfcdf27ec894 yser 6 days, 15:43:52.191147
i-xxxxx386c630af322 user 13 days, 14:08:49.429469
i-xxxxxxxd41bf975eb test 21:37:59.67100

我最终创建了另一个每分钟运行的lambda函数,如果实例运行,它会增加存储在dynamodb中的值。这不是一个很好的解决方案,但这效果很好。

import boto3
import time
def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb', region_name='us-east-1', endpoint_url="https://dynamodb.us-west-1.amazonaws.com")
    table = dynamodb.Table('<table name>')
    response = table.scan()
    data = response['Items']
    for i in data:
        state = get_state(i['instance_id'])
        if (state=='running'):
            response = table.update_item(
                Key={
                'id': i['id']
                },
                UpdateExpression="set runTime = :r",
                ExpressionAttributeValues={
                ':r': i['runTime'] + 1,
                },
                ReturnValues="UPDATED_NEW"
            )
    return response
def get_state(instance_id):
    ec2 = boto3.resource('ec2')
    instance = ec2.Instance(instance_id)
    return instance.state['Name']

最新更新