この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
みなさん、こんにちは!
AWS事業本部の青柳@福岡オフィスです。
最近、AWSに登録しているメールアドレス宛てに
[要対応] AWS Lambda における Python 2.7 のサポート終了
とか
[Action Required] AWS Lambda end of support for Python 2.7
とかのタイトルのメールが届いた方は多いのではないでしょうか。
Lambdaで作成した関数は未来永劫使い続けることができる訳ではなく、作成した時に使用した「ランタイム」のサポートが終了する日がいつか訪れます。
「ランタイムサポートポリシー - AWS Lambda」ページによると、記事執筆時 (2021年6月7日) 現在、以下のランタイムのサポート終了が予告されています。
- Python 2.7
- Ruby 2.5
- Node.js 10.x
サポート終了の通知を受け取ったら、まずは、対象のLambda関数を把握することが必要です。
もし、大量のLambda関数を作成して運用していたり、複数リージョンで運用していたりする場合、マネジメントコンソールから確認しようとすると、ページの切り替えやリージョンの切り替えを何度も行わなければならなかったりして、対象のLambda関数を洗い出すのは一苦労です。
そこで、全リージョンの全Lambda関数を一発でリストアップするスクリプトを作ってみました。
Lambda関数ランタイム一括出力スクリプト
スクリプトの内容はこんな感じです。
list-lambda-function-all-regions.sh
#!/bin/bash
declare -a REGIONS=($(aws ec2 describe-regions --output text --query "sort(Regions[].RegionName)"))
for REGION in "${REGIONS[@]}"
do
echo "${REGION}:"
aws lambda list-functions --region ${REGION} --output table --query "sort_by(Functions[].{Name:FunctionName,Runtime:Runtime},&Name)"
done
スクリプトを実行すると、こんな感じで出力されます。
$ ./list-lambda-function-all-regions.sh
ap-northeast-1:
-------------------------------------------
| ListFunctions |
+--------------------------+--------------+
| Name | Runtime |
+--------------------------+--------------+
| nodejs10-function-tokyo | nodejs10.x |
| nodejs12-function-tokyo | nodejs14.x |
| python27-function-tokyo | python2.7 |
| python36-function-tokyo | python3.6 |
| ruby25-function-tokyo | ruby2.5 |
| ruby27-function-tokyo | ruby2.7 |
+--------------------------+--------------+
ap-northeast-2:
ap-northeast-3:
-------------------------------------------
| ListFunctions |
+--------------------------+--------------+
| Name | Runtime |
+--------------------------+--------------+
| nodejs10-function-osaka | nodejs10.x |
| nodejs12-function-osaka | nodejs12.x |
| python27-function-osaka | python2.7 |
| python36-function-osaka | python3.6 |
| ruby25-function-osaka | ruby2.5 |
| ruby27-function-osaka | ruby2.7 |
+--------------------------+--------------+
ap-south-1:
ap-southeast-1:
ap-southeast-2:
ca-central-1:
eu-central-1:
eu-north-1:
eu-west-1:
eu-west-2:
eu-west-3:
sa-east-1:
us-east-1:
----------------------------------------------
| ListFunctions |
+-----------------------------+--------------+
| Name | Runtime |
+-----------------------------+--------------+
| nodejs10-function-virginia | nodejs10.x |
| nodejs12-function-virginia | nodejs14.x |
| python27-function-virginia | python2.7 |
| python36-function-virginia | python3.6 |
| ruby25-function-virginia | ruby2.5 |
| ruby27-function-virginia | ruby2.7 |
+-----------------------------+--------------+
us-east-2:
us-west-1:
us-west-2:
スクリプトの解説
解説するほどのスクリプトではありませんが、一応解説しておきます。
まず、冒頭のこの部分でAWSの全リージョンを取得して配列変数に格納します。
declare -a REGIONS=($(aws ec2 describe-regions --output text --query "sort(Regions[].RegionName)"))
aws ec2 describe-regions
コマンドをオプションを付けずに実行すると、以下のように出力されます。
$ aws ec2 describe-regions
{
"Regions": [
{
"Endpoint": "ec2.eu-north-1.amazonaws.com",
"RegionName": "eu-north-1",
"OptInStatus": "opt-in-not-required"
},
{
"Endpoint": "ec2.ap-south-1.amazonaws.com",
"RegionName": "ap-south-1",
"OptInStatus": "opt-in-not-required"
},
・・・
{
"Endpoint": "ec2.us-west-2.amazonaws.com",
"RegionName": "us-west-2",
"OptInStatus": "opt-in-not-required"
}
]
}
OptInStatus
はリージョンの「オプトイン」に関するステータスで、以下の種類があります。
opt-in-not-required |
オプトイン不要でデフォルトで利用可能なリージョン (ap-northeast-1やus-east-1など) |
not-opted-in |
オプトインが必要で、まだオプトインしていないリージョン (ap-east-1(香港)やeu-south-1(ミラノ)など) |
opted-in |
オプトインが必要で、オプトインを行ったリージョン |
aws ec2 describe-regions
コマンドをオプションを付けずに実行した場合に出力されるのは、ステータスがopt-in-not-required
またはopted-in
であるもの、すなわち「このAWSアカウントで利用可能なリージョン」のみが出力されます。
なお、aws ec2 describe-regions
コマンドに--all-regions
オプションを付けて実行するとステータスがnot-opted-in
であるものを含めて全てのリージョンが出力されます。
(今回は、利用可能でないリージョンについて調べる意味が無いので、オプションは付けません)
今回のスクリプトでは、出力フォーマットをtext
形式にした上で、出力結果をRegions[].RegionName
でフィルタリングしてリージョン名のみ抽出し、sort()
で並び替えています。
そうして得られた結果をdeclare -a
コマンドで配列変数に格納しています。
次に、for
文を使って配列変数REGIONS
に格納されたリージョン名を一つずつ取り出して、繰り返し処理を行います。
for REGION in "${REGIONS[@]}"
do
echo "${REGION}:"
aws lambda list-functions --region ${REGION} --output table --query "sort_by(Functions[].{Name:FunctionName,Runtime:Runtime},&Name)"
done
aws lambda list-functions
コマンドに--region
オプションを付けて実行することで、指定したリージョンの全Lambda関数を出力します。
出力フォーマットはtable
形式にしていますが、好みで他の形式を指定してもよいでしょう。
出力する項目もシンプルに「関数名」「ランタイム」のみとしていますので、必要に応じて変えてみてください。
対象Lambda関数を確認した後は・・・
AWSの案内に従って、ランタイムの移行など必要な対応を行いましょう。
「Python 2.7」のサポート終了については、下記の記事が参考になると思います。
ということで、「Lambda関数ランタイムのサポート終了」メールが届いたら、今回のスクリプトを使って時間を掛けずに対象Lambda関数をチェックしましょう!