S3バッチオペレーションで既存の画像オブジェクトを軽量化するには
S3バッチオペレーションは、AWSが提供するS3オブジェクトに対するバッチ処理サービスです。
セットアップに少し手間がかかりますが、S3バケット上の大量のオブジェクトに一斉にLambda関数を実行できます。
この機能を利用して既存の画像オブジェクトを軽量化する手順を紹介します。
S3バッチオペレーションではなく、簡易シェルスクリプトによる既存の画像オブジェクトの軽量化も紹介しています。LightFile Lambda関数 » 既存の画像を軽量化するにはを参照ください。
操作の流れ
初回はIAMロールの作成も伴い、多くの手順が必要です。このページでは次の手順を説明します。
- インベントリ(オブジェクト一覧)の準備
- 標準のS3インベントリ機能またはLightFile Lambda関数補助ツールで準備
- S3バッチオペレーションの実行
- ジョブの作成(前半)
- ジョブを実行するIAMロールの作成
- ジョブの作成(後半)
- ジョブの確認と実行
- ジョブの結果の確認
- ジョブのクローンと再実行
インベントリの準備
インベントリは処理対象のオブジェクト一覧です。S3バッチオペレーションの実行に必要な入力ファイルです。
S3バッチオペレーションは通常、S3インベントリ機能で一覧を出力することを想定していますが、S3インベントリは1日に1回の頻度で出力されます。はじめて設定する場合は出力までしばらく待つ必要があります。
すぐにインベントリを作成する場合は、弊社が提供する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.csv
ファイルにS3バッチオペレーション用にオブジェクトの一覧がCSVファイルとして出力されます。
$ ./csv.sh
生成されたinventory.csv
に対象のオブジェクトがすべて含まれるか確認してください。
このファイルを任意のS3バケットにアップロードしてください。処理対象となるS3バケットと同一でも結構です。
S3バッチオペレーションの実行
ジョブの作成(前半)
Amazon S3の管理画面を開き、左ペインのメニューからバッチオペレーション
を選択します。
ジョブの作成
ボタンを押してください。
上記のスクリプトで生成した場合は、マニフェストの形式CSV
を選択し、マニフェストオブジェクトへのパスとしてアップロードしたinventory.csv
を選択します。参照
ボタンから探すと便利です。
定期的に出力されるS3インベントリを利用する場合は形式をS3 インベントリレポート
、マニフェストオブジェクトとして生成されたmanifest.json
を選択してください。
設定ができたら次へ
ボタンを押します。
続いてオペレーションにAWS Lambda 関数を呼び出す
、Lambda関数にインストールしたLightFile Lambda関数を選択し、次へ
ボタンを押します。
完了レポートを生成する
にチェックを付けます。完了レポートはS3バケットに出力されるので、そのパスを指定します。
ジョブを実行するIAMロールの作成
ここで一旦、S3バッチオペレーションの管理画面を離れ、ジョブを実行するIAM ロールを作成します。
IAM ロールのポリシーテンプレートと IAM 信頼ポリシーを表示
を選択すると、現在の設定でS3バッチオペレーションを実行するためのIAM ロールポリシーが表示されます。
ポリシーテンプレートをそのままクリップボードにコピーします。
作業中の画面はそのままで、別のウィンドウやタブでIAMの管理画面を開いてください。
ロールの管理画面で、ロールの作成
ボタンを押します。
ユースケースから、S3
、S3 Batch Operations
を選択し、次のステップ
ボタンを押します。
この手順ではロールポリシーをインラインで指定します。次のステップ
ボタンを押します。
もちろんポリシーを作成してここで適用しても結構です。
ロールのタグを任意に指定し、次のステップ
ボタンを押します。
任意のロール名を設定し、ロールの作成
ボタンを押します。
作成したロールを開き、インラインポリシーの追加
を選択します。
JSON
タブを選択し、先ほどコピーしたポリシーテンプレートを貼り付けます。
ポリシーの確認
ボタンを押します。
ポリシー名を任意に入力し、ポリシーの作成
ボタンを押します。
これでS3バッチオペレーションのジョブを実行するロールが作成されました。
ジョブの作成(後半)
先ほどジョブを操作していたウィンドウまたはタブに戻ります。
IAM ロール
の再読込ボタンを押すと、プルダウンで先ほど作成したロールを選択できます。
次へ
ボタンを押します。
ジョブの内容を確認し、ジョブの作成
ボタンを押します。
ジョブの確認と実行
これでいよいよジョブを実行できる状態となりました。
ジョブの一覧で少し時間をおいてから再読込ボタンを押すと、作成したジョブのステータスが確認待ち
になります。
ジョブを選択して、確認して実行
ボタンを押します。
ジョブの内容が表示されます。確認したらジョブの実行
ボタンを押します。
再読込ボタンを押すとジョブの状況が一覧に更新されます。
完了するとステータスが完了
、一覧には処理が成功した割合と失敗した割合が表示されます。
なお、ここでは明示的なエラー(ダウンロードの失敗や変換の失敗)のみが失敗に分類され、それ以外(軽量化が正常に完了したケース・スキップされたケースなど)はすべて完了に分類されます。
以上でS3バッチオペレーションによる、既存オブジェクトへのLightFile Lambda関数の適用が完了しました。
ジョブの結果を確認するには
レポートの出力先として設定したS3バケットに実行ログが出力されます。
次の例のように、それぞれのファイルについて結果がCSVフォーマットで出力されます。
ideamans-lightfile-test,file1.jpg,,succeeded,200,,ファイルをスキップ: 軽量化の効果なし
ideamans-lightfile-test,file2.jpg,,succeeded,200,,軽量化が完了: 283.88 KB → 89.71 KB (-68%)
ideamans-lightfile-test,dir/file3.png,,succeeded,200,,ファイルをスキップ: 軽量化の効果なし
ジョブを再実行するには
ジョブは1回しか実行できません。同じ処理を再実行する場合は、ジョブをクローンして作成した新たなジョブを実行します。
ジョブを選択して、ジョブのクローン
ボタンを押します。
ジョブが作成された後で、確認して実行
する流れは上記と同じです。