AWS LambdaでのS3画像アップロードをトリガーとしたリサイズ(サムネイル作成) (2/2) AWSコンソールでの作業
AWS LambdaでのS3画像アップロードをトリガーとしたリサイズ(サムネイル作成) (1/2) ローカルPC上の準備 - AWS Mobile Application Developmentに続き、AWS LambdaのS3への画像ファイルアップロード後にリサイズを行うファンクションの作成です。
[目次]
AWS S3 bucketの作成
加工前の画像が入るファイルのバッケットを「android-pic-tank」とし、加工後のファイルを「android-pic-tank-risize」として作成します。
・android-pic-tank
・android-pic-tank-resize
Lambda関数の作成
Lambda管理画面から新規作成
「Blank Function」をクリック。
トリガーとなる条件を記載。「android-pic-tank」に「put」(アップロード)されたファイルが「jpg」という名前が入っていればファイヤー。
以下みたいな感じで、設定。「Lambda Function Code」の方に前のステップで作成したzipファイルを指定。
今の状態では、S3のデータの読み込み権限しかないので、S3に書き込めるポリシーをアタッチします。
「AmazonS3FullAccess」をアタッチ。
これを設定していない場合、以下の権限エラーが発生します。
2016-11-28T01:01:33.431Z 3296e5ca-b506-11e6-95d7-b790461b4b89 Unable to resize android-pic-tank/604fb235-s.jpg and upload to android-pic-tank-resize/resized-604fb235-s.jpg due to an error: AccessDenied: Access Denied
Lambdaの関数設定画面に戻って、トリガーを「enable」にします。
確認画面で「enable」にした後、以下のように「disable」に設定できる状態であることを確認します。
S3の「android-pic-tank」バケットにファイルをアップロードします。
S3の「android-pic-tank-resize」に自動的に小さいファイルが作成されていることを確認します。
これで終了。うまくいかない場合は以下のようなテストを実行してみてエラーログなどを確認します。
Lambdaでのテスト
テストはまず以下のナビゲーションからテスト用のデータ設定をします。
テストデータ入力画面がでるので赤枠部分に値を設定します。「Save and Test」で実行します。
エラーでが出る場合というか出たのでタイムアウト値を変更します。
{ "errorMessage": "2016-11-25T06:51:29.366Z 95e036c5-b2db-11e6-a945-f5f796929e8e Task timed out after 3.00 seconds" }
10に設定。
設定後「test」ボタンで成功
LambdaxS3 を使う場合の注意点
トリガー設定を行うに当たって、S3の1つのバケット内に変換元ファイル、変換後ファイルをフォルダでわけるなどする場合は注意が必要です。トリガー設定の箇所でprefixでバケット配下のフォルダをチャント指定していないと、変換後に作成されたファイルの作成自体を検知して、無限ループが発生します。
ですので、設計として、バケット内のフォルダを複数階層にしない、バケットを複数もってそれぞれを変換元、変換先として用意したほうが安全です。知らないうちにクラウド破産になりかねません。
おしまい。