既存の画像オブジェクトを軽量化するには

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の実行コストは要しますが、途中で中断した場合も再実行できます。