これはなに?

全Lambdaからコードをzipダウンロードしてきて、zipのまま検索しました。

  • ① 全Lambdaからコードをダウンロード
  • ② zipのまま検索(zipgrep使用)

の2つの手順で行います。

利用ケース

リポジトリ管理していない直書Lambdaなどが大量に存在するカオスな検証アカウントで特定キーワードを含むLambdaがないか調査するときに使用。
カオスなアカウントが出来上がらないようにするのがいいとは思うのですが、古の闇に手を突っ込む機会に恵まれました。

① 全Lambdaからコードをダウンロード

nemani/download_all_lambda_functions.sh
https://gist.github.com/nemani/defdde356b6678352bcd4af69b7fe529

これを使います。

前提条件

・wgetが必要
・cliのアウトプットをtextにしておく
・bashつかわないとだめかも
・中でaws clilつかっているのでプロファイルなどは設定しておく

使用中

・”Completed Downloading all the Lamdba Functions!”って出るけどバックグラウンドにタスク投げただけなので、全く終わってない
・数分またないとダウンロードが始まらないので数分待つ
・全てのバックグラウンドタスク終わったという合図がないのでダウンロードタスクが止まってzipの数が関数の数と一致したら完了と見做しました。

使用例

# この辺はデフォルトプロファイルなど常に設定しているなら不要
export AWS_DEFAULT_PROFILE=xxxxx
export AWS_DEFAULT_REGION=ap-northeast-1
export AWS_DEFAULT_OUTPUT=text
# 実行
bash download_all_lambda_functions.sh 

出力結果

lambda_functions/* に関数ごとにzipが保存される

備考

リージョンごとにとってくるので、ちょっとめんどい。
他のリージョン指定でとってくるときフォルダは分けたほうがいいかも。

for region in `aws ec2 describe-regions --query 'Regions[].RegionName' --region us-west-1 --output text`
do
 〜
done

で全リージョンをグルグル回してやっても良かったかも

② zipのまま検索(zipgrep使用)

使用例(HOGEHOGEを検索)

cd lambda_functions

for file in *.zip; do
    res=`zipgrep -n HOGEHOGE $file`
    if [ -n "$res" ]; then
        echo "x:$file";
        echo "$res";
    else
        echo "o:$file";
    fi
done

ボツ

最初は

find ./lambda_functions -name '*.zip' | xargs -I file zipgrep HOGEHOGE file

とかでやってたんですが、これだと、どのzipで検出したかわからなかったので前述のを流して確認しています。

出力結果例

キーワードに引っかかったlambdaを x:〜
引っかからなかったlambdaを o:〜
で出力しています。

x:aaaa-checker.zip
lambda_function.py:30:        target     = "HOGEHOGE",
o:bbbb-deleter.zip
o:cccc-notifier.zip
x:dddd-test.zip
lambda_function.py:21:       print("HOGEHOGE")",
...

備考

Lambda にライブラリや.env環境が同梱されているとgrepはけっこう時間がかかる。

元記事はこちら

全Lambdaからコードをzipダウンロードしてきて、zipのままキーワード検索する