AWS Lambdaに作成した関数の整理をしたいと思いました。
Lambda関数が10個を超えたら、AWS管理コンソールでペチペチクリックの繰り返しが42歳にはキツイ(´Д`;)
自分の端末にAWS Cliをインストールするのが困難な環境のため、
CloudShellでS3に一括エクスポートを行います。
利用手順
- export_lambda_to_s3.shの保存先バケット名をテキストエディタで編集する
- Windowsでファイル編集した後は、忘れずにUTF-8 + 改行コードはLFにして保存してください。
- AWSマネージドコンソールにログインする
- 保存用のS3バケットを作成する(マネージドコンソールで操作)
- export_lambda_to_s3.shをS3バケットにアップロードする(マネージドコンソールで操作)
- CloudShellを起動する(マネージドコンソールで操作)
- 以下のコマンドでS3からexport_lambda_to_s3.shを取得する(CloudShellで操作)
aws s3 cp s3://[利用手順No.3で作成したバケット名を指定]/export_lambda_to_s3.sh .
- 以下のコマンドでexport_lambda_to_s3.shに対するファイル実行権限設定を行う(CloudShellで操作)
chmod 777 export_lambda_to_s3.sh
- 実行権限はお使いの状況に合わせて適宜変更してください。
- 以下のコマンドでexport_lambda_to_s3.shを実行する。(CloudShellで操作)
./export_lambda_to_s3.sh
S3バケット構成例
バケット名
> lambda
スクリプトコード例
- ファイル名:export_lambda_to_s3.sh
#!/bin/bash
# S3バケット名とフォルダ名を設定
S3_BUCKET="保存したいS3バケット名を指定してください"
S3_FOLDER="保存したいS3バケットのフォルダ名を指定してください"
# 指定されたリージョン内のすべてのLambda関数のリストを取得
lambda_functions=$(aws lambda list-functions --query 'Functions[].FunctionName' --output text)
# 各Lambda関数をエクスポートしてS3にアップロード
for LAMBDA_FUNCTION_NAME in $lambda_functions; do
# Lambda関数のコードのURLを取得
aws lambda get-function --function-name $LAMBDA_FUNCTION_NAME --query 'Code.Location' --output text > lambda_function_url.txt
# Lambda関数の定義をYAML形式でダウンロード
aws lambda get-function --function-name $LAMBDA_FUNCTION_NAME --output yaml > $LAMBDA_FUNCTION_NAME.yaml
# Lambda関数コードのダウンロード
wget -O lambda_function.zip -i lambda_function_url.txt
# S3バケット内の指定されたフォルダにLambda関数のZIPファイルとYAMLファイルをアップロード
aws s3 cp lambda_function.zip s3://$S3_BUCKET/$S3_FOLDER/$LAMBDA_FUNCTION_NAME/$LAMBDA_FUNCTION_NAME.zip
aws s3 cp $LAMBDA_FUNCTION_NAME.yaml s3://$S3_BUCKET/$S3_FOLDER/$LAMBDA_FUNCTION_NAME/$LAMBDA_FUNCTION_NAME.yaml
# 一時ファイルの削除
rm lambda_function_url.txt lambda_function.zip $LAMBDA_FUNCTION_NAME.yaml
done