AWS CloudShellでlambaの定義と関数を一括でs3にエクスポートする方法 の続きでして、、、
Lambda関数で利用しているLayerのコードをAWS管理コンソールでペチペチクリックの繰り返しが42歳にはキツイ(´Д`;)
自分の端末にAWS Cliをインストールするのが困難な環境のため、
CloudShellでS3に一括エクスポートを行います。
利用手順
- export_lambda_layer_to_s3.shの保存先バケット名をテキストエディタで編集する
- Windowsでファイル編集した後は、忘れずにUTF-8 + 改行コードはLFにして保存してください。
- AWSマネージドコンソールにログインする
- 保存用のS3バケットを作成する(マネージドコンソールで操作)
- export_lambda_layer_to_s3.shをS3バケットにアップロードする(マネージドコンソールで操作)
- CloudShellを起動する(マネージドコンソールで操作)
- 以下のコマンドでS3からexport_lambda_layer_to_s3.shを取得する(CloudShellで操作)
aws s3 cp s3://[Your-S3-Bucket-Name]/export_lambda_layer_to_s3.sh .
- 以下のコマンドでexport_lambda_layer_to_s3.shに対するファイル実行権限設定を行う(CloudShellで操作)
chmod 777 export_lambda_layer_to_s3.sh
- 実行権限はお使いの状況に合わせて適宜変更してください。
- 以下のコマンドでexport_lambda_layer_to_s3.shを実行する。(CloudShellで操作)
./export_lambda_layer_to_s3.sh
S3バケット構成例
バケット名
> lambda-layer
スクリプトコード例
- ファイル名:export_lambda_layer_to_s3.sh
#!/bin/bash
# S3バケット名とフォルダ名を設定
S3_BUCKET="保存したいS3バケット名を指定してください"
S3_FOLDER="保存したいS3バケットのフォルダ名を指定してください" # ここにフォルダ名を指定
# 指定されたリージョン内のすべてのLambda Layerのリストを取得
lambda_layers=$(aws lambda list-layers --query 'Layers[].LayerName' --output text)
# 各Lambda LayerをエクスポートしてS3にアップロード
for LAMBDA_LAYER_NAME in $lambda_layers; do
# 最新のLayerバージョンを取得
latest_version=$(aws lambda list-layer-versions --layer-name $LAMBDA_LAYER_NAME --query 'LayerVersions[0].Version' --output text)
# Lambda LayerのコードのURLを取得
aws lambda get-layer-version --layer-name $LAMBDA_LAYER_NAME --version-number $latest_version --query 'Content.Location' --output text > layer_code_url.txt
# Lambda Layerコードのダウンロード
wget -O layer_code.zip -i layer_code_url.txt
# S3バケット内の指定されたフォルダにLambda LayerのZIPファイルをアップロード
aws s3 cp layer_code.zip s3://$S3_BUCKET/$S3_FOLDER/$LAMBDA_LAYER_NAME/$LAMBDA_LAYER_NAME.zip
# 一時ファイルの削除
rm layer_code_url.txt layer_code.zip
done