■Lambda
AWSのLambdaってなんやねん
https://zenn.dev/mi_01_24fu/books/d91d10985a5a1a
※あらかじめ登録したコードを実行できる
※コードはイベントに応じて呼び出したり、API Gatewayから呼び出したりなどができる
Lambda → 今すぐ始める
設計図の選択
「hello-world」を選択(すぐに見つからなければ、フィルターで絞り込む)
トリガーの設定
何も変更せずに「次へ」をクリック
関数の設定
名前: hello-world
ランタイム: Node.js 6.10(必要に応じて変更する)
Lambda関数のコード: (必要に応じて変更する)
ロール: existing(必要に応じて新規に作成する)
既存のロール: lambda_basic_execution(必要に応じて新規に作成する)
「次へ」をクリック
確認
内容を確認して「関数の作成」をクリック
関数が作成されたら「テスト」をクリックしてテストする
「サンプルイベントテンプレート」は各サービスやイベントから呼び出された際の入力値となるサンプル
「Hello World」を選択し、「key1」の値を「Hello Lambda World!」に変更する
「保存してテスト」をクリック
実行結果として「成功」と「"Hello Lambda World!"」のログが表示されていれば成功
■S3にアップロードされたJpegとPNGのサムネイルを自動作成する例
チュートリアル: Amazon S3 での AWS Lambda の使用
http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html
デプロイパッケージの作成
フォルダ名は CreateThumbnail とした
ファイル名は指定通り CreateThumbnail.js とした
ZIP圧縮は CreateThumbnail に対してではなく、CreateThumbnail.js と node_modules に対して行う
Lambda関数の作成(公式の解説はCLIだが、コンソールから作成)
設計図の選択: ブランク関数
トリガーの設定: S3 → 画像をアップロードするバケットを選択し、イベントタイプは「Put」にし、サフィックスはjpgにする
関数の名前: CreateThumbnail
コード エントリ タイプ: .ZIP ファイルをアップロード(CreateThumbnail.zip)
ハンドラ: CreateThumbnail.handler
ロール: 既存のロールを選択
既存のロール: lambda_basic_execution
詳細設定 メモリ(MB): 1024
タイムアウト: 10秒
※LambdaにS3の書き込み権限が無い場合、権限を与えておく
「トリガー」で関数を有効化する
S3の指定のバケットに画像がアップロードし、サムネイル用のバケットに縮小画像が作成されているか確認する
アップロード時、権限など特に変更せずにデフォルト設定のままアップロードして大丈夫だった
AWS LambdaでのS3画像アップロードをトリガーとしたリサイズ(サムネイル作成) (1/2) ローカルPC上の準備
http://aws-mobile-development.hatenablog.com/entry/2016/11/25/152052
試すと「Cannot find module '/var/task/index'」のエラーが表示された場合、圧縮対象を間違っている可能性がある
CreateThumbnailフォルダを圧縮せずに、node_modulesとindex.jsを選択して圧縮し、createThumbnail.zipにリネームする必要がある
AWS LambdaでのS3画像アップロードをトリガーとしたリサイズ(サムネイル作成) (2/2) AWSコンソールでの作業
http://aws-mobile-development.hatenablog.com/entry/2016/11/25/155625
AWSコンソールでの作業手順。この手順の通り進めて大丈夫だった(最初はタイムアウトを設定していなかたので、タイムアウトのエラーになった)
解説通りトリガーを設定し、ポリシーをアタッチし、タイムアウトを10秒に設定した
この仕組みなら
「アプリからSDKで直接ファイルアップロード + サムネイル作成」
まで完全にAWS任せでできそう。負荷の心配も無さそう
■ブラウザから実行
※未検証
[アップデート]LambdaがHTTPSエンドポイントから実行可能になる、AWS Lambda Function URLsの機能が追加されました! | DevelopersIO
https://dev.classmethod.jp/articles/aws-lambda-function-urls-built-in-https-endpoints/
■ローカルでの動作確認
※未検証
本格的に開発するなら、環境の構築をしておくと良さそう
AWSがサーバレスアプリケーションのローカル開発とテストのための'SAM Local'をリリース
https://www.infoq.com/jp/news/2017/09/sam-local-beta
AWS Lambdaの開発をローカルで行う - サーバーワークスエンジニアブログ
http://blog.serverworks.co.jp/tech/2017/01/31/lambda-local/