NEW: AWS environment review script
This commit is contained in:
parent
863b5c7480
commit
9ab4873613
93
aws/AwsEnvReview.py
Executable file
93
aws/AwsEnvReview.py
Executable file
@ -0,0 +1,93 @@
|
||||
#!/usr/bin/python3
|
||||
import boto3
|
||||
import jmespath
|
||||
import re
|
||||
from pprint import pprint
|
||||
from datetime import date
|
||||
|
||||
|
||||
def printTitle(title):
|
||||
print("=" * 20)
|
||||
print(title)
|
||||
print("=" * 20)
|
||||
return
|
||||
|
||||
|
||||
def printSubTitle(title):
|
||||
print(title)
|
||||
return
|
||||
|
||||
|
||||
def getAllRegions(myclient):
|
||||
return jmespath.search("Regions[*].RegionName", myclient.describe_regions(AllRegions=False))
|
||||
|
||||
def getAgeFromDate(inputDate):
|
||||
today = date.today()
|
||||
delta = today - inputDate.date()
|
||||
return delta.days
|
||||
|
||||
|
||||
sts = boto3.client("sts")
|
||||
aid = sts.get_caller_identity().get("Account")
|
||||
|
||||
printTitle("Ec2 service review")
|
||||
printSubTitle("[Cost saving] Instances stopped for over 14 days - Consider backing up instances and terminate them")
|
||||
client = boto3.client('ec2')
|
||||
regions = getAllRegions(client)
|
||||
print("Region", "AccountID", "InstanceId", "DaysStopped", sep=",")
|
||||
for r in regions:
|
||||
client = boto3.client('ec2', region_name=r)
|
||||
response = client.describe_instances()
|
||||
if len(response.get("Reservations")) > 0:
|
||||
for i in jmespath.search("Reservations[*].Instances[*]", response):
|
||||
if i[0].get("State").get("Name") == "stopped":
|
||||
print(r, aid, i[0].get("InstanceId"), getAgeFromDate(i[0].get("UsageOperationUpdateTime")), sep=",")
|
||||
|
||||
|
||||
printSubTitle("[Performance] Previous instance generation - Consider using current instance generation")
|
||||
client = boto3.client('ec2')
|
||||
regions = getAllRegions(client)
|
||||
print("Region", "AccountID", "InstanceId", "InstanceType", sep=",")
|
||||
for r in regions:
|
||||
client = boto3.client('ec2', region_name=r)
|
||||
response = client.describe_instances()
|
||||
if len(response.get("Reservations")) > 0:
|
||||
for i in jmespath.search("Reservations[*].Instances[*]", response):
|
||||
if re.search("^(t1|t2|m3|m1|m2|m4|c1|c2|c3|c4|r3|r4|i2)", i[0].get("InstanceType")) is not None:
|
||||
print(r, aid, i[0].get("InstanceId"), i[0].get("InstanceType"), sep=",")
|
||||
|
||||
|
||||
printSubTitle("[Cost saving] Unattached EBS volumes - Consider taking snapshot and delete volumes")
|
||||
print("Region", "AccountID", "VolumeId", "Size", "VolumeType", sep=",")
|
||||
for r in regions:
|
||||
client = boto3.client('ec2', region_name=r)
|
||||
response = client.describe_volumes(
|
||||
Filters=[
|
||||
{
|
||||
'Name': 'status',
|
||||
'Values': ['available']
|
||||
}
|
||||
]
|
||||
)
|
||||
for i in response.get("Volumes"):
|
||||
print(r, aid, i.get("VolumeId"), i.get("Size"), i.get("VolumeType"), sep=",")
|
||||
|
||||
printSubTitle("[Security] Unencrypted EBS volumes - Consider replacing volume with encrypted ones")
|
||||
print("Region", "AccountID", "VolumeId", "Size", "VolumeType", sep=",")
|
||||
for r in regions:
|
||||
client = boto3.client('ec2', region_name=r)
|
||||
response = client.describe_volumes(
|
||||
Filters=[
|
||||
{
|
||||
'Name': 'encrypted',
|
||||
'Values': ['false']
|
||||
},
|
||||
{
|
||||
'Name': 'status',
|
||||
'Values': ['in-use']
|
||||
}
|
||||
]
|
||||
)
|
||||
for i in response.get("Volumes"):
|
||||
print(r, aid, i.get("VolumeId"), i.get("Size"), i.get("VolumeType"), sep=",")
|
||||
|
Loading…
Reference in New Issue
Block a user