全リージョンのLambdaランタイムを関数別に一覧化してファイルに吐き出すShellを作った

4 min read読了の目安(約3800字

Zenn初投稿です。
そして、定期的にやってくるLambdaのNode.jsのEOL面倒だよねーって思いつつ、Node.js使っている人です。


GW中の5/4にLambdaのNode.js v10のEOLの案内のメールが来ていたので、
仕事のアカウントとか、個人アカウントにあるNode.js v10.xの有無を
メールに載っていたCLI使って確認したら、
個人アカウントでバージョンの1つにNode.js v10.xがありました。
なるほど。コンソールだと、$LATESTしかわからんのだな(個々の関数行けばわかる)と思いつつ、
ふと、他の関数はどうなってるんだっけと(覚えていろよ事案)、CLIのランタイム指定変えて実行してみたところ、
v8.10とかv6.10とかあるやん・・・。
あれ、東京リージョン以外も意外とあるな・・・(覚えていろよ事案 その2)
ってことで、これは1回全リージョンのLambdaの一覧作らないとダメだなーって思った次第。


とりあえず、以下の2つのQiitaの記事を参考にして、全リージョンで使っているLambdaを関数別にファイルに吐き出すShellを作りました。

あ、リージョンと関数はソートしているので、jqが必須です。
プロファイルは指定していないので、profile=defaultか環境変数にチェックしたいアカウントのクレデンシャルをセットしてください。

lambda_functions_list_all_region.sh
#!/bin/bash
echo "Start!"
account_id=`aws sts get-caller-identity --output text --query "Account"`
echo "Account : ${account_id}"
region_list=$(aws ec2 describe-regions|jq -r '.[][].RegionName'| sort)
for region in ${region_list}
do
 echo "Region : ${region}"
 region_runtime_list_all=`aws --region ${region} lambda list-functions --function-version ALL | jq -cr '.[][]|.Runtime'`
 region_runtime_list=$(echo "$region_runtime_list_all" | sort -u)
 for runtime in ${region_runtime_list}
 do
   echo "Lambda Runtime : ${runtime}"
   aws lambda list-functions --region ${region} --output text --function-version ALL  --query "Functions[?Runtime=='${runtime}'].{ARN:FunctionArn, Runtime:Runtime}" > ${account_id}_${region}_${runtime}_Lambdalist.txt
 done
done
echo "finish!"

動作としては、

  1. リージョン情報取得
  2. 処理対象リージョンのLambda関数のランタイムを取得して、ソートおよび重複排除
  3. 再度ランタイム指定で関数のリストを取得して、APNとランタイムバージョンをファイルに書き出し

となっています。
2と3はまとめてもいいかなと思いつつ、並べ替えとか考えたらこっちでいいかなと。

./lambda_functions_list_all_region.sh 
Start!
Account : 123456789012
Region : ap-northeast-1
- Lambda Runtime : nodejs10.x
- Lambda Runtime : nodejs12.x
- Lambda Runtime : nodejs6.10
- Lambda Runtime : nodejs8.10
- Lambda Runtime : python3.6
- Lambda Runtime : python3.7
- Lambda Runtime : python3.8
Region : ap-northeast-2
Region : ap-northeast-3
- Lambda Runtime : nodejs12.x
Region : ap-south-1
Region : ap-southeast-1
Region : ap-southeast-2
Region : ca-central-1
Region : eu-central-1
Region : eu-north-1
Region : eu-west-1
Region : eu-west-2
Region : eu-west-3
Region : sa-east-1
Region : us-east-1
- Lambda Runtime : java8
- Lambda Runtime : nodejs6.10
- Lambda Runtime : python3.7
Region : us-east-2
Region : us-west-1
Region : us-west-2
- Lambda Runtime : python3.6
- Lambda Runtime : python3.8
finish!

こんな感じでファイルができます。
us-east-1にJavaのランタイムあるけど、記憶ないぞ・・・???(覚えてろ事案 その3)

123456789012_ap-northeast-1_nodejs10.x_Lambdalist.txt
123456789012_ap-northeast-1_nodejs12.x_Lambdalist.txt
123456789012_ap-northeast-1_nodejs6.10_Lambdalist.txt
123456789012_ap-northeast-1_nodejs8.10_Lambdalist.txt
123456789012_ap-northeast-1_python3.6_Lambdalist.txt
123456789012_ap-northeast-1_python3.7_Lambdalist.txt
123456789012_ap-northeast-1_python3.8_Lambdalist.txt
123456789012_ap-northeast-3_nodejs12.x_Lambdalist.txt
123456789012_us-east-1_java8_Lambdalist.txt
123456789012_us-east-1_nodejs6.10_Lambdalist.txt
123456789012_us-east-1_python3.7_Lambdalist.txt
123456789012_us-west-2_python3.6_Lambdalist.txt
123456789012_us-west-2_python3.8_Lambdalist.txt

ファイルの中身は、こんな感じになります。メールのCLIの出力そのままです。

cat 123456789012_ap-northeast-3_nodejs12.x_Lambdalist.txt
arn:aws:lambda:ap-northeast-3:123456789012:function:soracom-iot-button-publisher-dev-index:$LATEST	nodejs12.x
arn:aws:lambda:ap-northeast-3:123456789012:function:soracom-iot-button-publisher-dev-index:8	nodejs12.x

バージョンまで要らんよって場合は、--function-version ALL を外すと、$LATESTのみ持ってきます。


さて、一覧作れたし、いらないLambdaを整理するとしますか・・・。