🚀

サポートが終了しているランタイムを使用してるLambda関数を抽出するツールを作りました

2022/10/23に公開

最初に

Lambdaでnodejs12.xのサポートが2022年11月14日(フェーズ2は2022年12月14日)に終了します。
サポートが終了すると該当ランタイムを使用した関数の作成・更新ができなくなるため、バージョンアップ対応をする必要があります。
Lambda関数はシステムの本番環境の中でゴリゴリ使われているものから、ツールを使用した際に裏側で自動的に作成されるもの(AWS copilot CLIなど)まで、様々な用途で使われるため、環境によっては対象を抽出するだけでもちょっと大変かなと思います。
そのためサポートが終了している/するランタイムを抽出するためのCLIツールを作りました。

Lambdaのランタイムのサポート終了に関して

ランタイムのサポート終了には2つのフェーズが存在します。

  • フェーズ1
    • セキュリティパッチ等の更新を停止
    • 該当のランタイムでの関数の作成ができなくなる
    • テクニカルサポート対象外になる
  • フェーズ2
    • 該当のランタイムでの関数の作成または更新ができなくなる
    • フェーズ2が開始されるのはフェーズ1の開始から30日以上経過した後

作ったもの

https://github.com/kishii4726/lambda-runtime-checker

使い方

サポート終了したランタイムを使用しているLambda関数を抽出

deprecatedオプションでサポートが終了している、もしくはサポート終了が予定されているLambda関数だけを抽出できます。

$ lambda-runtime-checker deprecated
References->https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
+---------------+------------+
| FUNCTION NAME |  RUNTIME   |
+---------------+------------+
| test1         | nodejs12.x |
+---------------+------------+
| test2         | ruby2.5    |
+---------------+------------+
| test4         | ruby2.5    |
+---------------+------------+

サポートが終了している/終了予定のランタイム一覧はAPIなどでは取れなそうなので、公式ドキュメントのDeprecated runtimesを参考にコード内で直接定義しています。

deprecated_runtimes := []string{
	"nodejs",
	"nodejs4.3-edge",
	"nodejs6.10",
	"nodejs8.10",
	"nodejs10.x",
	"nodejs12.x",
	"python2.7",
	"python3.6",
	"dotnetcore1.0",
	"dotnetcore2.0",
	"dotnetcore2.1",
	"ruby2.5",
}

全てのLambda関数のランタイムを表示

allオプションでアカウント内の全てのLambda関数のランタイムを確認できます。

$ lambda-runtime-checker all
+---------------+------------+
| FUNCTION NAME |  RUNTIME   |
+---------------+------------+
| test1         | nodejs12.x |
+---------------+------------+
| test2         | ruby2.5    |
+---------------+------------+
| test3         | python3.9  |
+---------------+------------+
| test4         | ruby2.5    |
+---------------+------------+
| test5         | python3.9  |
+---------------+------------+
| test6         | python3.8  |
+---------------+------------+

指定したランタイムを使用しているLambda関数を抽出

runtimeオプションで引数にランタイムを指定すると、アカウント内の指定されたランタイムのLambda関数を抽出できます。

$ lambda-runtime-checker runtime python3.9
+---------------+------------+
| FUNCTION NAME |  RUNTIME   |
+---------------+------------+
| test3         | python3.9  |
+---------------+------------+
| test5         | python3.9  |
+---------------+------------+

インストール

Mac(amd64)

$ LAMBDA_RUNTIME_CHECKER_VERSION=0.0.2
$ curl -OL https://github.com/kishii4726/lambda-runtime-checker/releases/download/v${LAMBDA_RUNTIME_CHECKER_VERSION}/lambda-runtime-checker_v${LAMBDA_RUNTIME_CHECKER_VERSION}_darwin_amd64.zip

$ unzip lambda-runtime-checker_v${LAMBDA_RUNTIME_CHECKER_VERSION}_darwin_amd64.zip lambda-runtime-checker

$ sudo cp lambda-runtime-checker /usr/local/bin

Mac(arm64)

$ LAMBDA_RUNTIME_CHECKER_VERSION=0.0.2
$ curl -OL https://github.com/kishii4726/lambda-runtime-checker/releases/download/v${LAMBDA_RUNTIME_CHECKER_VERSION}/lambda-runtime-checker_v${LAMBDA_RUNTIME_CHECKER_VERSION}_darwin_arm64.zip

$ unzip lambda-runtime-checker_v${LAMBDA_RUNTIME_CHECKER_VERSION}_darwin_arm64.zip lambda-runtime-checker

$ sudo cp lambda-runtime-checker /usr/local/bin

Linux

$ LAMBDA_RUNTIME_CHECKER_VERSION=0.0.2
$ curl -OL https://github.com/kishii4726/lambda-runtime-checker/releases/download/v${LAMBDA_RUNTIME_CHECKER_VERSION}/lambda-runtime-checker_v${LAMBDA_RUNTIME_CHECKER_VERSION}_linux_amd64.zip

$ unzip lambda-runtime-checker_v${LAMBDA_RUNTIME_CHECKER_VERSION}_linux_amd64.zip lambda-runtime-checker

$ sudo cp lambda-runtime-checker /usr/local/bin

Discussion