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/
■使用する言語
よくある質問 - AWS Lambda |AWS
https://aws.amazon.com/jp/lambda/faqs/
> ネイティブでは、Java、Go、PowerShell、Node.js、C#、Python、Ruby のコードをサポートしています。
これまでLambdaを使用するときは、Node.jsを使用してきた。
ただし長期の保守を考えるなら、Goを使用するのも有効かもしれない。
このファイル内の「ロードバランサー → Basic認証」にNode.jsを使用したコードがあるが、この短いコードでもバージョン差異による調整が必要だったことがある。
AWS Lambda Node.js runtime の EoL に疲れたので Go にしていっている話 - KAYAC Engineers' Blog
https://techblog.kayac.com/lambda-node-to-go
■LambdaでWebアプリケーション
ECSとRDSをやめて、AWSコストを9割削減しました
https://zenn.dev/beenos_tech/articles/lambda-sqlite-application
アプリケーションをLambdaに、データベースをEFSに置く…というものらしい。
通常のPHPアプリケーションが動くものなのか。
以下は基礎知識になりそうなものメモ。
引き続き確認しておきたい。
Apache+PHPサーバーのWebサイトをAWS Lambdaで動かす #lambda - Qiita
https://qiita.com/shouki-s/items/954bc9dac0e9144509cd
AWSのlambdaでlaravelを動かす #PHP - Qiita
https://qiita.com/Taichi-yzrh/items/26a5e71da5ef449b4788
Lambda Web Adapter でウェブアプリを (ほぼ) そのままサーバーレス化する Lambda Web Adapter - 変化を求めるデベロッパーを応援するウェブマガジン | AWS
https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/
【レポート】コンテナだけどサーバーレス! AWS Lambda の最新機能をご紹介 #AWSSummit | DevelopersIO
https://dev.classmethod.jp/articles/awssummit2021-lambda-container-support/
【AWS入門者】だれでもできるLambda関数でDockerを利用 | アールエフェクト
https://reffect.co.jp/aws/lambda_docker
LambdaでWEBアプリケーションをホストしたい - NRIネットコムBlog
https://tech.nri-net.com/entry/hosting_a_web_application_with_lambda
Lambda からアクセスする DB に SQLite を使ってみる
https://note.milldea.com/posts/lambda-efs-sqlite-sample