既存の画像オブジェクトを軽量化するには
LightFile Lambda関数は、新たに作成された画像オブジェクトを自動で軽量化しますが、既存のファイルは別の方法で軽量化する必要があります。
既存の画像を軽量化する方法として、次の二つを紹介します。
-
スクリプトのみによる軽量化
UNIXのシェルスクリプトで軽量化します。手軽ですが進捗や結果がわかりにくいためオブジェクト数が少ない場合にお勧めします。 -
S3バッチオペレーションによる軽量化
AWSが提供するバッチ処理のサービスを利用します。大量のオブジェクトにも対応できますが、セットアップの手間がかかります。
このページでは、スクリプトのみによる軽量化を紹介します。
S3バッチオペレーションによる軽量化は、LightFile Lambda関数 » S3バッチオペレーションを参照ください。
UNIX向けLightFile Lambda関数 補助ツール
既存の画像オブジェクトを軽量化するスクリプトをGitHubにて提供しています。
このツールはUNIX系のOS(LinuxとmacOSで動作確認)で利用できるシェルスクリプトです。
LightFile Lambda関数ツールを開くスクリプトのみによる軽量化
LightFile Lambda関数ツールを任意のUNIX系OSでダウンロードしてください。EC2インスタンスでも結構です。
aws CLIコマンドのセットアップ
スクリプトではaws
マンドを利用します。最初にコマンドのインストールと、認証情報のセットアップを行ってください。
認証するIAMユーザーにはS3オブジェクトの読み書き
とLightFileをセットアップしたLambda関数の起動
の権限を最低限付与してください。
管理者相当のユーザーであればそのまますべての機能を利用できます。
設定ファイル(.env)の用意
このツールでは、各種設定を.env
ファイルに環境変数として記述します。
はじめに.env-example
ファイルを.env
としてコピーしてください。
.env
ファイルの環境変数BUCKET
に対象のバケット、環境変数LAMBDA
にセットアップしたLightFile Lambda関数名を記述してください。
特定のフォルダ(プレフィックス)以下のみを軽量化の対象とする場合は環境変数PREFIX
も記述してください。
オブジェクト一覧の作成
次のコマンドを実行すると、inventory.txt
ファイルにS3バケット内のオブジェクトがリストアップされます。
$ ./list.sh
default
以外のAWSプロファイルを指定する場合は、.env
に環境変数AWS_PROFILE
として記述するか、次のようにコマンドを実行します。
$ AWS_PROFILE=lightfile ./list.sh
生成されたinventory.txt
を開いて対象のオブジェクトがリストアップされているか確認してください。次の例のように1行に1オブジェクトずつ出力されます。
不要なオブジェクトはこのinventory.txt
から削除してください。
file1.jpg
file2.jpg
dir/file3.png
バッチ処理の実行
次のコマンドを実行すると、inventory.txt
に記述されたオブジェクトについてLightFile Lambda関数を実行します。
$ ./batch.sh
Lambda関数は10プロセス並列で実行されます。並列プロセス数は.env
ファイルの環境変数CONCURRENCY
で変更できます。
コマンドはあくまでLambda関数を起動するだけなので、実行したコンピューターに高い負荷はかかりません。負荷の状況と処理速度を見て値を調整してください。
コマンドの実行結果は、次の例のようにbatch.log
ファイルに出力されます。
{
"LogResult": "U1RBUlQgUmVxdWVzdElkOiBiYjVjMzc0Yi04ZTBlLTQ4(...略)",
"ExecutedVersion": "$LATEST",
"StatusCode": 200
}
{
"LogResult": "U1RBUlQgUmVxdWVzdElkOiA0MzI5NDA5MS1lMjM4LTQ5(...略)",
"ExecutedVersion": "$LATEST",
"FunctionError": "Handled",
"StatusCode": 200
}
ログファイルの可視化
batch.log
ファイルには、Base64エンコードされたLambda関数の実行ログが含まれます。
次のコマンドを実行すると、そのLambda関数の実行ログを復元して標準出力に書き出します。
$ ./log.sh
ファイルごとに正常に処理されたかを確認できます。
START RequestId: bb5c374b-8e0e-4858-baf6-62bea348ee3b Version: $LATEST 2019-06-30T12:13:59.729Z bb5c374b-8e0e-4858-baf6-62bea348ee3b [INFO]ファイルをスキップ: 拡張子はサポート対象外 END RequestId: bb5c374b-8e0e-4858-baf6-62bea348ee3b REPORT RequestId: bb5c374b-8e0e-4858-baf6-62bea348ee3b Duration: 330.13 ms Billed Duration: 400 ms Memory Size: 512 MB Max Memory Used: 101 MB
中断後の再開と繰り返し実行の影響について
軽量化済みのファイルには、処理済みであることが記録されます。処理済みのファイルはスキップされるため、バッチ処理を繰り返し実行しても影響はありません。
Lambdaの実行コストは要しますが、途中で中断した場合も再実行できます。