From 122fe95f953aa539f5a671c3db911eda2cf322de Mon Sep 17 00:00:00 2001 From: KF Date: Fri, 19 Apr 2024 14:09:45 +0800 Subject: [PATCH] NEW: Initial release --- README.md | 12 ++++++++++++ aws-ec2-inventory.sh | 25 +++++++++++++++++++++++++ aws-ecs-inventory.sh | 16 ++++++++++++++++ aws-efs-inventory.sh | 16 ++++++++++++++++ aws-eks-inventory.sh | 18 ++++++++++++++++++ aws-elasticache-inventory.sh | 16 ++++++++++++++++ aws-elasticsearch-inventory.sh | 16 ++++++++++++++++ aws-elbv2-inventory.sh | 16 ++++++++++++++++ aws-emr-inventory.sh | 18 ++++++++++++++++++ aws-lambda-inventory.sh | 16 ++++++++++++++++ aws-logs-inventory.sh | 16 ++++++++++++++++ aws-rds-inventory.sh | 16 ++++++++++++++++ aws-route53-inventory.sh | 4 ++++ aws-s3-inventory.sh | 5 +++++ aws-subnet-inventory.sh | 16 ++++++++++++++++ run-inventory-scripts.sh | 7 +++++++ 16 files changed, 233 insertions(+) create mode 100644 README.md create mode 100755 aws-ec2-inventory.sh create mode 100755 aws-ecs-inventory.sh create mode 100755 aws-efs-inventory.sh create mode 100755 aws-eks-inventory.sh create mode 100755 aws-elasticache-inventory.sh create mode 100755 aws-elasticsearch-inventory.sh create mode 100755 aws-elbv2-inventory.sh create mode 100755 aws-emr-inventory.sh create mode 100755 aws-lambda-inventory.sh create mode 100755 aws-logs-inventory.sh create mode 100755 aws-rds-inventory.sh create mode 100755 aws-route53-inventory.sh create mode 100755 aws-s3-inventory.sh create mode 100755 aws-subnet-inventory.sh create mode 100755 run-inventory-scripts.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..1149cc6 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# aws-inventory +Scripts to collect AWS resource inventory in all regions. + +## Requirements +- bash +- awscli +- gnu parallel +- miller + +## Usage +Run run-inventory-scripts.sh which will invoke a collection of scripts. TSV is returned for visibility. +Individual script can be ran to produce inventory of specific service. CSV is returned for programatic use. diff --git a/aws-ec2-inventory.sh b/aws-ec2-inventory.sh new file mode 100755 index 0000000..de88b6b --- /dev/null +++ b/aws-ec2-inventory.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +function formatprint() { + cat - > /tmp/formatprint.tmp + echo "# $1 ($(cat /tmp/formatprint.tmp | wc -l))" + #cat /tmp/formatprint.tmp | sed -e 's/^/ /g' + cat /tmp/formatprint.tmp | column -t -s, | sed -e 's/^/ /g' + rm -f /tmp/formatprint.tmp +} + +function listEc2() { + aws --region=$1 ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, Tags[?Key==`Name`].Value[] | [0], PlatformDetails, InstanceType,PrivateIpAddress, Placement.AvailabilityZone]' --output json | jq -cr '.[][] | @csv' | tr -d '[\" ' +} + +export -f formatprint +export -f listEc2 + +# Generate inventory of ec2 in all regions + +echo "InstanceId,NameTag,OsPlatform,InstanceType,PrivateIp,AZ" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listEc2 $r +done + +sem --wait diff --git a/aws-ecs-inventory.sh b/aws-ecs-inventory.sh new file mode 100755 index 0000000..921684c --- /dev/null +++ b/aws-ecs-inventory.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function listRes() { + aws --region $1 ecs list-clusters | jq -cr '.clusterArns[]' | parallel aws --region $1 ecs describe-clusters --clusters {} | jq -cr '.clusters[] | [.clusterName, .runningTasksCount, .capacityProviders[0]] | @csv' | tr -d \" +} + +export -f listRes + +# Generate inventory of ec2 in all regions + +echo "ClusterName, TasksCount, CapacityProvider" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-efs-inventory.sh b/aws-efs-inventory.sh new file mode 100755 index 0000000..7dbd4d4 --- /dev/null +++ b/aws-efs-inventory.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function listRes() { + aws --region $1 efs describe-file-systems | jq -cr '.FileSystems[] | [.FileSystemId, .Name, .PerformanceMode, (.SizeInBytes.Value/1024/1024)] | @csv' | tr -d \" +} + +export -f listRes + +# Generate inventory in all regions + +echo "FilesystemId, Name, PerformanceMode, SizeMb" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-eks-inventory.sh b/aws-eks-inventory.sh new file mode 100755 index 0000000..165635c --- /dev/null +++ b/aws-eks-inventory.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +function listRes() { + aws --region $1 eks list-clusters --query clusters[] --output text | sed -e 's/\t/\n/g' | while read i; do + aws --region $1 eks describe-cluster --name $i | jq -cr '.cluster | [.name, .version] | @csv' | tr -d \" + done +} + +export -f listRes + +# Generate inventory of ec2 in all regions + +echo "ClusterName,ClusterVersion" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-elasticache-inventory.sh b/aws-elasticache-inventory.sh new file mode 100755 index 0000000..9aa82d2 --- /dev/null +++ b/aws-elasticache-inventory.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function listRes() { + aws elasticache --region $1 describe-cache-clusters | jq -cr '.CacheClusters[] | [.CacheClusterId, .CacheNodeType, .Engine, .PreferredAvailabilityZone] | @csv' | tr -d \" +} + +export -f listRes + +# Generate inventory of ec2 in all regions + +echo "ClusterId,NodeType,Engine,AZ" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-elasticsearch-inventory.sh b/aws-elasticsearch-inventory.sh new file mode 100755 index 0000000..a9f58a9 --- /dev/null +++ b/aws-elasticsearch-inventory.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function listRes() { + aws --region $1 opensearch list-domain-names | jq -cr '.DomainNames[] | [.DomainName, .EngineType] | @csv' | tr -d \" +} + +export -f listRes + +# Generate inventory of ec2 in all regions + +echo "DomainName, EngineType" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-elbv2-inventory.sh b/aws-elbv2-inventory.sh new file mode 100755 index 0000000..8b15c06 --- /dev/null +++ b/aws-elbv2-inventory.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function listRes() { + aws --region $1 elbv2 describe-load-balancers | jq -cr '.LoadBalancers[] | [.LoadBalancerName, .Scheme, .Type, .AvailabilityZones[0].ZoneName] | @csv' | tr -d \" +} + +export -f listRes + +# Generate inventory in all regions + +echo "LbName,Scheme,Type,AZ1" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-emr-inventory.sh b/aws-emr-inventory.sh new file mode 100755 index 0000000..f39f155 --- /dev/null +++ b/aws-emr-inventory.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +function listRes() { + aws --region $1 emr list-clusters --query Clusters[].Id --output text | sed 's/\t/\n/g' | while read i; do + aws --region $1 emr describe-cluster --cluster-id $i | jq -cr '.Cluster | [.Id, .Name, .ReleaseLabel, .Ec2InstanceAttributes.Ec2AvailabilityZone] | @csv' | tr -d \" + done +} + +export -f listRes + +# Generate inventory of ec2 in all regions + +echo "ClusterId,ClusterName,ReleaseLabel,AZ" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-lambda-inventory.sh b/aws-lambda-inventory.sh new file mode 100755 index 0000000..4f02686 --- /dev/null +++ b/aws-lambda-inventory.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function listRes() { + aws --region $1 lambda list-functions | jq -cr '.Functions[] | [.FunctionName, .Runtime, .Architectures[]] | @csv' | tr -d \" +} + +export -f listRes + +# Generate inventory in all regions + +echo "FunctionName, Runtime, Architecture" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-logs-inventory.sh b/aws-logs-inventory.sh new file mode 100755 index 0000000..d581e08 --- /dev/null +++ b/aws-logs-inventory.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function listRes() { + aws --region $1 logs describe-log-groups | jq -cr '.logGroups[] | [.logGroupName, .retentionInDays, .logGroupClass] | @csv' | tr -d \" +} + +export -f listRes + +# Generate inventory in all regions + +echo "LogGroup, Retention, Class" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-rds-inventory.sh b/aws-rds-inventory.sh new file mode 100755 index 0000000..b4d37ad --- /dev/null +++ b/aws-rds-inventory.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function listRes() { + aws rds describe-db-instances --region $1 | jq -cr '.DBInstances[] | [.DBInstanceIdentifier, .DBInstanceClass, .Engine, .AvailabilityZone, .MultiAZ] | @csv' | tr -d \" +} + +export -f listRes + +# Generate inventory of ec2 in all regions + +echo "InstanceId,InstanceClass,Engine,AZ,MultiAz" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/aws-route53-inventory.sh b/aws-route53-inventory.sh new file mode 100755 index 0000000..330974a --- /dev/null +++ b/aws-route53-inventory.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "ZoneName, IsPrivate, RecordCount" +aws route53 list-hosted-zones | jq -cr '.HostedZones[] | [.Name, .Config.PrivateZone, .ResourceRecordSetCount] | @csv' | tr -d \" diff --git a/aws-s3-inventory.sh b/aws-s3-inventory.sh new file mode 100755 index 0000000..7f5bb77 --- /dev/null +++ b/aws-s3-inventory.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# Generate inventory in all regions +echo "BucketName" +aws s3api list-buckets --query Buckets[].Name --output text | sed 's/\t/\n/g' diff --git a/aws-subnet-inventory.sh b/aws-subnet-inventory.sh new file mode 100755 index 0000000..e4076fb --- /dev/null +++ b/aws-subnet-inventory.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +function listRes() { + aws --region $1 ec2 describe-subnets | jq -cr '.Subnets[] | [.SubnetId, .VpcId, .CidrBlock, .AvailabilityZone] | @csv' | tr -d \" +} + +export -f listRes + +# Generate inventory in all regions + +echo "SubnetId,VpcId,CidrBlock,AZ" +aws --region=us-east-1 ec2 describe-regions --query Regions[].RegionName --output text | sed -e 's/\t/\n/g' | while read r; do + sem -j6 listRes $r +done + +sem --wait diff --git a/run-inventory-scripts.sh b/run-inventory-scripts.sh new file mode 100755 index 0000000..b35ebb2 --- /dev/null +++ b/run-inventory-scripts.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +for i in aws*.sh; do + echo "# $i" + bash $i | mlr --c2t cat | column -t + wait $! +done