Help us understand the problem. What is going on with this article?

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

これはなに?

全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`
dodone

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

② 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はけっこう時間がかかる。

cof123
AWS, GCP, Python, 2020 APN AWS Top Engineers
cloudpack
Amazon Web Services (AWS) の導入設計、環境構築、運用・保守をサポートするマネジドホスティングサービス
https://cloudpack.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away