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を検索していると、こんな記事を見つけました。

dev.classmethod.jp

なるほど!EC2 APIの DescribeRegions ActionでEC2がサポートされているリージョンの一覧を取得する、という方法です。
確かにAWSの公式情報を見てもEC2をサポートしていないリージョンは無いですし、AWSの全リージョンのリストを取得するのはこれでバッチリです。

aws.amazon.com

ちなみに、本日 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 に絞り、Linuxcolumn コマンドで見た目の整形をしています。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関数があることがわかりました😇