AWS Mobile Application Development

AWSのサービスをモバイルから使うにあたって調べた情報などまとめて行きます。

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
f:id:azumami:20161125151311p:plain

android-pic-tank-resize
f:id:azumami:20161125151327p:plain

Lambda関数の作成

Lambda管理画面から新規作成
f:id:azumami:20161125151519p:plain

「Blank Function」をクリック。
f:id:azumami:20161125151558p:plain

トリガーとなる条件を記載。「android-pic-tank」に「put」(アップロード)されたファイルが「jpg」という名前が入っていればファイヤー。
f:id:azumami:20161125151615p:plain

以下みたいな感じで、設定。「Lambda Function Code」の方に前のステップで作成したzipファイルを指定。
f:id:azumami:20161125153420p:plain

f:id:azumami:20161125153638p:plain

今の状態では、S3のデータの読み込み権限しかないので、S3に書き込めるポリシーをアタッチします。
f:id:azumami:20161125153648p:plain

「AmazonS3FullAccess」をアタッチ。
f:id:azumami:20161125153727p:plain
これを設定していない場合、以下の権限エラーが発生します。

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」にします。
f:id:azumami:20161125153817p:plain

確認画面で「enable」にした後、以下のように「disable」に設定できる状態であることを確認します。
f:id:azumami:20161125153848p:plain

S3の「android-pic-tank」バケットにファイルをアップロードします。
f:id:azumami:20161125153856p:plain

S3の「android-pic-tank-resize」に自動的に小さいファイルが作成されていることを確認します。
f:id:azumami:20161125153903p:plain

これで終了。うまくいかない場合は以下のようなテストを実行してみてエラーログなどを確認します。

Lambdaでのテスト

テストはまず以下のナビゲーションからテスト用のデータ設定をします。
f:id:azumami:20161125154336p:plain

テストデータ入力画面がでるので赤枠部分に値を設定します。「Save and Test」で実行します。
f:id:azumami:20161125155018p:plain

エラーでが出る場合というか出たのでタイムアウト値を変更します。

{
  "errorMessage": "2016-11-25T06:51:29.366Z 95e036c5-b2db-11e6-a945-f5f796929e8e Task timed out after 3.00 seconds"
}

10に設定。
f:id:azumami:20161125155250p:plain

設定後「test」ボタンで成功
f:id:azumami:20161125155406p:plain

LambdaxS3 を使う場合の注意点

トリガー設定を行うに当たって、S3の1つのバケット内に変換元ファイル、変換後ファイルをフォルダでわけるなどする場合は注意が必要です。トリガー設定の箇所でprefixでバケット配下のフォルダをチャント指定していないと、変換後に作成されたファイルの作成自体を検知して、無限ループが発生します。

ですので、設計として、バケット内のフォルダを複数階層にしない、バケットを複数もってそれぞれを変換元、変換先として用意したほうが安全です。知らないうちにクラウド破産になりかねません。

おしまい。