我正在尝试使用python boto3库为aws找到实例已启动的分钟数。我无法找到直接的方法来做到这一点。我可以使用以下方式获取机器的状态:
ec2 = boto3.resource('ec2')
instance = ec2.Instance(instance_id)
status = instance.state['Name']
print(status)
但我正在寻找的是一个简单的指标:实例运行的分钟数。请注意,这不是实例的正常运行时间,因为它会在停止时重置。
答案 0 :(得分:1)
这是一个你可以尝试的想法。查询“RunInstance的CloudTrail数据” “,”StopInstance“和”StartInstance“计算实例的总运行时间。
这是我创建的脚本。 https://gist.github.com/sudharsans/990dbb67f397d79556dbc02e5835e5ec
示例输出:
[0301/112442:INFO:console.cc(52)] [console.log()] IndexedDB.install
[0301/112442:INFO:console.cc(52)] [console.log()] InputEvent.install
[0301/112442:INFO:console.cc(52)] [console.log()] mathRound.install
[0301/112442:INFO:console.cc(52)] [console.log()] MediaKeys.install
[0301/112442:INFO:console.cc(57)] [console.info()] Using native EME as-is.
[0301/112442:INFO:console.cc(52)] [console.log()] MediaSource.install
[0301/112442:INFO:console.cc(57)] [console.info()] Using native MSE as-is.
[0301/112442:INFO:console.cc(52)] [console.log()] VideoPlayPromise.install
[0301/112442:ERROR:console.cc(62)] [console.error()] VTTCue not available.
[0301/112442:INFO:browser_module.cc(534)] Loaded WebModule
[0301/112442:INFO:console.cc(52)] [console.log()] Unload latency:
[0301/112442:INFO:console.cc(52)] [console.log()] load() failed:
[0301/112442:ERROR:console.cc(62)] [console.error()] Error code
答案 1 :(得分:0)
我最终创建了另一个每分钟运行的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']