はじめに
AWSを使用するに当たり適宜適当にlambdaの関数を作成していたら、いつの間にか管理がおろそかになってしまいました。。。
とりあえず AWS CLI を使えば現状あるものの一覧を取得できるみたいなのでトライしてみます。
手順
0. 事前準備
わたくしの環境
・ubuntu v20.04.1 LTS (Focal Fossa)
・aws-cli /2.1.3 Python/3.7.3 Linux/4.4.0-19041-Microsoft exe/x86_64.ubuntu.20
cliを使用するroleにはLambdaのListFunctionsとGetFunctionの権限を追加しておきましょう。
1. 関数の一覧を取得する
以下関数でlambda関数の一覧をcsvで取得できます。
aws lambda list-functions --region ap-northeast-1 | jq '.Functions[] | [ .FunctionName , .Runtime ]' | jq -rs' map([.[]])[]|@csv'< lambda-list.csv
'.Functions[] | [ .FunctionName , .Runtime ]'の中身を好きに設定することで他の情報も得ることができます。(Example : 'Output'の中身を好きに指定できます)
2. 関数名を指定して情報を取得する
以下コードで関数の情報を取得できます。
aws lambda get-function --function-name<関数の名前>
3. 関数名を指定してコードを取得する
さっき取得した情報の '.Code.Location' を使用してlambda関数のコードの中身を取得します。
url=$(aws lambda get-function --function-name<関数の名前>} | jq -r'.Code.Location')
curl -o lambda.zip ${url}
4. シェルスクリプトで全コード・情報取得自動化
最終的にこうなりました。
お好みでカスタマイズしてください。
人生初シェルスクリプトだったため、中々苦戦しました。
#!/bin/bash
aws lambda list-functions --region ap-northeast-1 | jq '.Functions[] | [ .FunctionName , .Runtime ]' | jq -rs' map([.[]])[]|@csv'> lambda-list.csv
while read row;do
funcName=`echo${row} | sed's/"//g' | cut-d , -f 1`funcType=`echo${row} | sed's/"//g' | cut-d , -f 2`mkdir${funcName}cd${funcName}
aws lambda get-function --function-name${funcName}>function.json
url=$(aws lambda get-function --function-name${funcName} | jq -r'.Code.Location')
curl -o lambda.zip ${url}
unzip lambda.zip
rm lambda.zip
cd ..
echo"${funcName}処理完了"done< lambda-list.csv
exit 0
終わりに
いかがだったでしょうか。
lambda関数の作成は乱雑になりがちだと思いますが、(もしかして自分だけでしょうか。。。)これを使えば一覧をサクッと取得できます。
そのうちlambda関数自体にローカルに保存するかどうかのフラグを立て、必要なものを必要に応じ管理できるよう改善していきたいと思います。
参考
・シェルスクリプト(bash)にてsedコマンドを使用して文字列からダブルクォーテーションを削除する方法
・bashでCSVを読み込み1行ずつループ処理する
・【AWS】lambda のめんどくさい棚卸しを楽にするワンライナー
・【備忘録】AWS CLI 便利オプション一覧