EC2とECSのレコードを全てCSVに出力する
投稿日:
環境
- Linux Mint 20 Ulyana
- aws-cli/2.0.41
- jq 1.6
前回の続きです。
前回AWS Route53のレコードをCSVに出力するシェルスクリプトを作ったので、同様にEC2・ECSの情報を出力するシェルスクリプトを作ってみます。
EC2
以下のようなシェルです。
region一覧は固定で持っているので、今後増減があった場合は手動で修正が必要です。
#!/bin/bash
#region一覧
regionList=(
us-east-2
us-east-1
us-west-1
us-west-2
af-south-1
ap-east-1
ap-south-1
ap-northeast-3
ap-northeast-2
ap-southeast-1
ap-southeast-2
ap-northeast-1
ca-central-1
cn-north-1
cn-northwest-1
eu-central-1
eu-west-1
eu-west-2
eu-south-1
eu-west-3
eu-north-1
me-south-1
sa-east-1
)
echo '"AvailabilityZone", "Name", "PublicDnsName","PublicIpAddress","PrivateDnsName","PrivateIpAddress"'
for region in ${regionList[@]}; do
EC2List=`aws ec2 describe-instances --region ${region} --output json --query 'Reservations[].Instances[]'`
EC2ListLen=`echo $EC2List | jq length`
for i in $( seq 0 $(($EC2ListLen - 1)) ); do
EC2=`echo $EC2List | jq .[$i]`
avZone=`echo $EC2 | jq -c -r '.Placement.AvailabilityZone // ""'`
priDns=`echo $EC2 | jq -c -r '.PrivateDnsName // ""'`
priIp=`echo $EC2 | jq -c -r '.PrivateIpAddress // ""'`
pubDns=`echo $EC2 | jq -c -r '.PublicDnsName // ""'`
pubIp=`echo $EC2 | jq -c -r '.PublicIpAddress // ""'`
Tags=`echo $EC2 | jq -c -r '.Tags'`
TagsLen=`echo $Tags | jq length`
name='None'
for j in $( seq 0 $(($TagsLen - 1)) ); do
tag=`echo $Tags | jq .[$j]`
key=`echo $tag | jq -c -r '.Key'`
if [ "$key" = "Name" ]; then
name=`echo $tag | jq -c -r '.Value // ""'`
break
fi
done
echo "\"${avZone}\",\"${name}\",\"${pubDns}\",\"${pubIp}\",\"${priDns}\",\"${priIp}\""
done
done
このシェルではEC2のドメインやIPアドレスを取得していますが、そこは必要に情報に置き換えても良いです。
ECS
以下のようなシェルです。
#!/bin/bash
echo '"ClusterArns", "IPAddress"'
ClusterArnsList=`aws ecs list-clusters --output json --query 'clusterArns'`
ClusterArnsListLen=`echo $ClusterArnsList | jq length`
for i in $( seq 0 $(($ClusterArnsListLen - 1)) ); do
clusterArns=`echo $ClusterArnsList | jq .[$i]`
clusterArns=${clusterArns//\"/}
TaskArnsList=`aws ecs list-tasks --cluster $clusterArns --output json --query 'taskArns'`
TaskArnsListLen=`echo $TaskArnsList | jq length`
for j in $( seq 0 $(($TaskArnsListLen - 1)) ); do
taskArns=`echo $TaskArnsList | jq .[$j]`
taskArns=${taskArns//\"/}
Tasks=`aws ecs describe-tasks --cluster ${clusterArns} --tasks ${taskArns} --output json --query 'tasks'`
TasksLen=`echo $Tasks | jq length`
for k in $( seq 0 $(($TasksLen - 1)) ); do
task=`echo $Tasks | jq .[$k]`
TaskDetails=`echo $task | jq -c -r '.attachments[].details'`
TaskDetailsLen=`echo $TaskDetails | jq length`
for l in $( seq 0 $(($TaskDetailsLen - 1)) ); do
taskDetail=`echo $TaskDetails | jq .[$l]`
name=`echo $taskDetail | jq -c -r '.name'`
if [ "$name" = "privateIPv4Address" ]; then
ipaddress=`echo $taskDetail | jq -c -r '.value'`
break;
fi
done
echo "\"${clusterArns}\",\"${ipaddress}\""
done
done
done
こちらもECSのIPアドレスを出力しています。必要な情報に差し替えてください。