これはなに?
全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が保存される
全リージョンに対して行う場合
全リージョンぐるぐる回すバージョンを書いてみました
download_code () {
local OUTPUT=$1
local REGION=$2
aws lambda get-function --function-name $OUTPUT --query 'Code.Location' --region $REGION | xargs wget -O ./lambda_functions/$OUTPUT-$REGION.zip
}
mkdir -p lambda_functions
for region in `aws ec2 describe-regions --query 'Regions[].RegionName' --region us-west-1 --output text`
do
echo $region
for run in $(aws lambda list-functions --region $region | cut -f 6 | xargs);
do
download_code "$run" "$region" &
done
echo "Completed Downloading all the Lamdba Functions! $region"
done
echo "finished"
lambda_functions/ 配下に「lambda_functions/{関数名}-{リージョン名}.zip」でダウンロードします。
② 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はけっこう時間がかかる。