AWSアカウント内の全リージョンのLambda関数リストを出力する
少し前になりますが、AWS Lambdaのランタイムのうち、Node.js 6.10のサポート終了がアナウンスされました。
4月30日にNode.js 6.10のサポートが終了になります - Forums
こういったアナウンスが出たときなどに、自分が関わっているLambda関数の全リストを確認したくなるのですが、複数のAWSアカウントを運用していると、全AWSアカウントの全リージョンをManagement Consoleでポチポチ確認するのは現実的ではありません。
せめて1つのAWSアカウントの全リージョンのLambda関数のリストくらいはパパっと取得したいものです。
というわけで、簡単なシェルスクリプトを書いてみました。
実行するには以下の条件を満たしている必要があります。
- Bash が実行できる
- AWS CLI がインストール済み
- ec2:DescribeRegions や lambda:ListFunctions が実行可能な権限を持ったIAMユーザ or IAMロールのクレデンシャルが設定済み
手元のPCや開発機で実行する前提で書いたので、第1引数にProfile名を渡せばAWS CLIを実行するときのprofileを変更できるようにしました。引数なしで実行すると、[default] profileを使用します。
AWSの全リージョンのリストを取得する
ちょくちょく新リージョンが開設されたりするので、スクリプト内にべた書きでリストアップするのもいかがなものか、と思ってWebを検索していると、こんな記事を見つけました。
なるほど!EC2 APIの DescribeRegions ActionでEC2がサポートされているリージョンの一覧を取得する、という方法です。
確かにAWSの公式情報を見てもEC2をサポートしていないリージョンは無いですし、AWSの全リージョンのリストを取得するのはこれでバッチリです。
ちなみに、本日 2019/04/18 時点だと大阪リージョンだけAWS Lambdaをサポートしていないようです。へぇー。
Lambda関数のリストを取得する
こちらはLambdaのAPIにずばり ListFunctions というActionがあり、これを利用します。
list-functions — AWS CLI 1.16.142 Command Reference
AWS CLI の--query オプションで出力内容を FunctionName、Runtime、LastModifiedそしてDescription に絞り、Linux の column
コマンドで見た目の整形をしています。column
コマンドで整形せずAWS CLI のTEXT出力形式のまま出力すればタブ区切りになるので、出力結果をExcelなどに展開する場合にはそのほうが都合がよいかもしれません。sort
もこのスクリプトの例ではFunctionaNameでソートをかけていますが、LastModified などでソートしてもよいでしょう。
これを、先の手順で取得したAWSの全リージョンに対して for 文内で順次実行しているだけです。
実行結果イメージ
このような感じで、リージョン毎に FunctionName、Runtime、Last Modified、Description をリスト表示します。
$ bash lambda-function-list.bash [eu-north-1] --------------------- [ap-south-1] --------------------- [eu-west-3] --------------------- [eu-west-2] FunctionName-A nodejs8.10 2018-07-24T09:41:13.364+0000 FunctionName-B nodejs6.10 2018-07-31T10:46:06.598+0000 Description-B FunctionName-C nodejs6.10 2018-10-24T03:02:12.718+0000 Description-C --------------------- [eu-west-1] FunctionName-D-in_eu-west-1 nodejs6.10 2019-02-07T11:25:14.242+0000 Description D FunctionName-E-in_eu-west-1 nodejs6.10 2019-02-07T11:21:40.267+0000 FunctionName-F-in_eu-west-1 nodejs6.10 2019-02-07T11:20:07.790+0000 Description F --------------------- [ap-northeast-2] --------------------- [ap-northeast-1] (以下略)
まとめ
実際に自分が関係しているいくつかのAWSアカウントで実行したところ、結構わさわさNode.js 6.10のLambda関数があることがわかりました😇