👏
特定ランタイムを使用した Lambda バージョンの一括削除
これは何
サポート終了したランタイムを使用している Lambda バージョンがあったのでそれを一括削除するスクリプト
対応している Security Hub のルール
Lambda functions should use supported runtimes
[Lambda.2] This AWS control checks that the lambda function settings for runtimes, match the expected values set for the supported runtimes for each language. The supported runtimes this control checks for are: nodejs18.x, nodejs16.x, nodejs14.x, nodejs12.x, python3.8, python3.7, java11, java8, go1.x, dotnet6, dotnetcore3.1, ruby2.7
コード
削除するバージョンが含まれる関数名を指定して実行する
※ここも Security Hub 等から自動取得するようにすれば全自動でいける
import boto3
client = boto3.client('lambda')
target = "" # 削除する関数名
def lambda_handler(event, context):
re = client.list_versions_by_function(
FunctionName=target,
MaxItems=1000
)
versions = re['Versions']
for i in versions:
print(i["Version"])
print(i["Runtime"])
if i['Runtime'] == "python3.6": # 削除するランタイムバーゲン
response = client.delete_function(
FunctionName=target,
Qualifier=i['Version']
)
print(response)
おまけ(特定ランタイム以外の関数名の取得
判定している場所を反転させることで特定ランタイムを使用している関数名の取得も可能
import boto3
client = boto3.client('lambda')
def lambda_handler(event, context):
response = client.list_functions(
MaxItems=1000
)
functions = response['Functions']
for i in functions:
#print(i['FunctionName'])
#print(i['Runtime'])
#print(i['Version'])
versions = client.list_versions_by_function(
FunctionName=i['FunctionName'],
MaxItems=1000
)
versions_list = versions['Versions']
for j in versions_list:
if j['Runtime'] in ["python3.7", "python3.8", "python3.9", "python3.10"]:
continue
print(j['FunctionName'])
print(j['Version'])
Discussion