2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS】大量のLambda関数の一括バックアップと復元ガイド

Posted at

前任者が作成した大量の不要なLambda関数(約50個)を整理しているのですが、そのまま削除するのも怖いので、一応バックアップをとることにしました。

Lambda関数のバックアップや復元は、SAM(Serverless Application Model)やCloudFormationを使用するのが一般的らしいのですが、個別のテンプレートをつくるのが面倒だったので、AWS CLIで関数のコードと設定を一括で扱う方法を試してみました。

バックアップ

lambda_functions.txt というファイルに全てのLambda関数名をリストアップします。

aws lambda list-functions --query 'Functions[*].[FunctionName]' --output text > lambda_functions.txt

次に、シェルスクリプトbackup_lambda.shを作成して各Lambda関数の設定とコードをダウンロードします。

backup_lambda.sh
while read function; do
  echo "Backing up $function"
  aws lambda get-function --function-name $function --query 'Configuration' > $function-config.json
  aws lambda get-function --function-name $function --query 'Code.Location' --output text | xargs wget -O $function.zip
done <lambda_functions.txt

このスクリプトは lambda_functions.txtにリストアップされた各Lambda関数に対して以下の処理を行います。

  • 関数の設定をJSON形式でダウンロードし、関数名をつけたJSONファイル($function-config.json)に保存
  • 関数のデプロイメントパッケージ(実行に必要なコードと依存関係のライブラリをまとめたもの)をダウンロードし、関数名をつけたZIPファイル($function.zip)に保存

これで一度にすべてのLambda関数のバックアップを取ることができます。

※バックアップの保存先は用途によって適宜選択します。復元時にすぐにオブジェクトへアクセスできるように、私はS3 Glacier Instant Retrievalを選びました。SSEは有効化しましたが、バージョニングやアクセスログは有効化していません(データの重要度やリスクの許容度を考慮した上で)。

復元

保存したコード(ZIP)と設定ファイル(JSON)を使用して、各関数を手動、もしくは自動で復元します。

個別関数の手動復元

  1. AWS Lambdaコンソールにログイン
  2. "関数の作成"をクリック
  3. "一から作成"を選択
  4. バックアップした設定ファイル(~.json)を参照して、関数名、ランタイム、ロールなどの設定を入力
  5. 関数の作成をクリック
  6. 新たに作成した関数のページに移動し、"関数コード"セクションで"アクション"->"ZIPファイルをアップロード"を選択し、バックアップしたZIPファイル(~.zip)をアップロード

シェルスクリプトによる複数関数の自動復元

複数のLambda関数を自動で復元したい場合にはシェルスクリプトをつかいます。

まずは、復元したいLambda関数の名前リスト(.txt)をつくります。

lambda-aaa
lambda-bbb
lambda-ccc

シェルスクリプトrestore_lambda.shを作成します。

restore_lambda.sh
while read function; do
    echo "Restoring $function"
    role=$(jq -r '.Role' $function-config.json)
    handler=$(jq -r '.Handler' $function-config.json)
    runtime=$(jq -r '.Runtime' $function-config.json)
    aws lambda create-function --function-name $function --handler $handler --runtime $runtime --role $role --zip-file fileb://$function.zip
done <lambda_functions.txt

シェルスクリプトに実行権限を付与します。

chmod +x restore_lambda.sh

シェルスクリプトを実行します。

./restore_lambda.sh
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?