share facebook facebook facebook twitter twitter menu hatena pocket slack

2020.11.02 MON

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

高橋 修一

WRITTEN BY 高橋 修一

これはなに?

全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のままキーワード検索する

高橋 修一

高橋 修一

社内サービスの開発を主にやっています。大阪オフィス所属。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。