1

我正在嘗試創建一個關於我們的EC2實例的使用情況和利用率的報告。我想檢查過去X天內在我的環境中運行或已經運行的所有實例。作爲報告的一部分,我希望包括在縮放組擴展期間創建的實例,但隨後在組縮放時終止。獲取已終止的EC2實例的Ids

使用簡單的python腳本與boto3我可以獲取實例列表一區:

session = Session(aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, region_name=self.name) 
ec2 = session.resource('ec2') 
cloudwatch = session.resource('cloudwatch') 

通過列舉實例,使用下面的命令,我看不到幾個小時後終止情況下(可能是同一時間,你再看到他們在儀表盤):

ec2.instances.all() 

使用cloudw ATCH,當我使用下面的命令,我也看到了指標終止實例:

metric = cloudwatch.Metric('AWS/EC2', 'CPUUtilization') 
result = metric.get_statistics(
Dimensions=[{'Name': 'InstanceId', 'Value': instanceId}], 
     StartTime=timeRange.start, 
     EndTime=timeRange.end, 
     Period=300, 
     Statistics=['Average'], 
) # This returns a complete list of data points for the instance was live 

這意味着該指標確實存在終止的實例,但你必須有這些實例的ID,以獲取它們。 有沒有辦法檢索終止的實例ID?

回答

2

除非您啓用了CloudTrail,否則不會。您可以從CloudTrail儀表板獲取最近7天所需的信息。如果您需要超過7天的信息,則從S3存儲桶中獲取文件(如果已配置)。

CloudTrail會定期將您的活動存儲爲您存儲桶中的對象 - 請檢查您的CloudTrail配置中存儲桶名稱。數據存儲爲每天壓縮的json文件。編寫一個簡單的Python腳本來下載所需日期的文件並逐個加載json文件,查找TerminatedInstances事件。對於每個終止的實例,它有像實例id信息,誰終止它,在那裏,等時,

代碼片段:

for event in events: 
    if event['eventName'] == 'TerminateInstances': 
     inst_ids = [item['instanceId'] for item in event['requestParameters']['instancesSet']['items']] 
     print 'Terminated instance IDs:', inst_ids 
+0

感謝helloV。我以前從未使用CloudTrail,並且看到它記錄了API調用。它是否包含AWS調用?特別是 - 由於擴大/縮小政策而自動發生的行爲? – Avi

+0

是的。所有的API。我廣泛使用它。 – helloV

+0

非常感謝! ... – Avi