AWS Lambda 関数の特定のランタイムを全リージョンから取得するAWS CLIコマンド

AWS

2024.4.26

Topics

概要

AWS から Lambda 関数のランタイム EOL についてお知らせが来ているかと思います。
このお知らせの内容に対象となる Lambda 関数を取得する AWS CLI のコマンドがありますが、リージョンを指定する必要があります。
リージョンごとに、コマンドを実行するのは手間なのですべてのリージョンの結果をまとめて取得する方法をご紹介します。

[Action Required] AWS Lambda end of support for Python 3.8

Hello,
We are contacting you as we have identified that your AWS Account currently has one or more AWS Lambda functions using the Python 3.8 runtime.
We are ending support for Python 3.8 in Lambda on October 14, 2024. This follows Python 3.8 End-Of-Life (EOL) which is scheduled for October, 2024 [1].
As described in the Lambda runtime support policy [2], end of support for language runtimes in Lambda happens in several stages. Starting on October 14, 2024, Lambda will no longer apply security patches and other updates to the Python 3.8 runtime used by Lambda functions, and functions using Python 3.8 will no longer be eligible for technical support. Also, Python 3.8 will no longer be available in the AWS Console, although you can still create and update functions that use Python 3.8 via AWS CloudFormation, the AWS CLI, AWS SAM, or other tools. Starting February 28, 2025, you will no longer be able to create new Lambda functions using the Python 3.8 runtime. Starting March 31, 2025, you will no longer be able to update existing functions using the Python 3.8 runtime.
We recommend that you upgrade your existing Python 3.8 functions to the latest available Python runtime in Lambda before October 14, 2024.
End of support does not impact function execution. Your functions will continue to run. However, they will be running on an unsupported runtime which is no longer maintained or patched by the AWS Lambda team.
This notification is generated for functions using the Python 3.8 runtime for the $LATEST function version. The following command shows how to use the AWS CLI [3] to list all functions in a specific region using Python 3.8, including published function versions. To find all such functions in your account, repeat this command for each region:
aws lambda list-functions --region us-west-2 --output text --query "Functions[?Runtime=='python3.8'].FunctionArn"
A list of your affected Lambda functions is available in the 'Affected resources' tab of your AWS Health Dashboard.
From 180 days before deprecation, you can also use Trusted Advisor to identify all functions using the Python 3.8 runtime, including published function versions [4].
If you have any concerns or require further assistance, please contact AWS Support [5].
[1] https://devguide.python.org/versions/
[2] https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html
[3] https://aws.amazon.com/cli/
[4] https://docs.aws.amazon.com/awssupport/latest/user/security-checks.html#aws-lambda-functions-deprecated-runtimes
[5] https://aws.amazon.com/support

結論

結論としては以下のコマンドを実行すれば取得できます。

for region in `aws ec2 describe-regions --query 'Regions[].RegionName' --output text`;do aws lambda list-functions --region ${region} --output text --query 'Functions[?Runtime==`python3.8`].[FunctionArn]';done

なお、Runtimeの値を変えれば別のランタイムも検索できます。
ランタイム一覧は以下ドキュメントにあるIdentifierを指定します。

Lambda runtimes – AWS Lambda

実行結果は以下の通りです。
※cloudshell から実行してます

[cloudshell-user@ip-10-134-21-136 ~]$ for region in `aws ec2 describe-regions --query 'Regions[].RegionName' --output text`;do aws lambda list-functions --region ${region} --output text --query 'Functions[?Runtime==`python3.8`].[FunctionArn]';done
arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXXX:function:test
arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXXX:function:test2

コマンドの内容

以下 2 つをいい感じに組み合わせているワンライナーです。

  • リージョン一覧
  • 特定のランタイム一覧

リージョン一覧

describe-regionsコマンドを実行することでリージョン一覧が取得できます。
describe-regions — AWS CLI 2.15.40 Command Reference

名前以外は不要なのでクエリでリージョン名だけ出力してます。

コマンド単体実行結果

[cloudshell-user@ip-10-138-184-123 ~]$ aws ec2 describe-regions --query 'Regions[].RegionName' --output text
ap-south-1      eu-north-1      eu-west-3       eu-west-2       eu-west-1       ap-northeast-3  ap-northeast-2  ap-northeast-1  ca-central-1    sa-east-1       ap-southeast-1  ap-southeast-2  eu-central-1    us-east-1       us-east-2       us-west-1       us-west-2

このリージョン一覧をregion変数に渡して for 文で回してます。

特定のランタイム一覧

続いてが、list-functionsというコマンドで Lambda 関数の一覧を取得します。
list-functions — AWS CLI 2.15.40 Command Reference

公式ドキュメントや AWS お知らせにある AWS CLI をほぼそのまま活用します。
AWS お知らせ以外にも、以下ドキュメントにも載っています。
Lambda runtimes – AWS Lambda

コマンド単体実行結果

[cloudshell-user@ip-10-138-184-123 ~]$ aws lambda list-functions --region ap-northeast-1 --output text --query 'Functions[?Runtime==`python3.8`].[FunctionArn]'
arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXXX:function:test
arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXXX:function:test2

結果ごとに改行をつけたかったので、以下の通り変更しています。

'Functions[?Runtime==`python3.8`].FunctionArn'
↓
'Functions[?Runtime==`python3.8`].[FunctionArn]'

なお、本コマンドでは、リストの上限数については考慮してないためご注意ください。

Lambda は呼び出しごとに最大 50 個の関数を返します。

まとめ

定期的にランタイムのお知らせは来るため、一覧を取得できる方法を知っていれば、対象を簡単に探すことができます。

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Cold-Airflow

2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら