最近、AWSをフル活用して社内システムを作ったので、そのノウハウのご紹介を行っています。
現在はAWS Lambdaの使い方を紹介中です。
前回からまだまだ続いてLambda関数のコンソール画面を調査中です。
関数コード
関数コードは、Lamda関数を実行した時に叩くロジックの管理です。
リッチエディター形式になっていますが、こんな所で実装する人いるのかしら?
普通はローカルで開発してアップロードでしょ。。。
基本は手元で開発したソースをzipファイル等の形式に圧縮してアップロードすることで展開することになります。
アップロードはコツがいるみたいなので、後日検証。
「ハンドラ」という項目がありますが、これは「実行した時に最初にどのメソッドを叩くの?」ということを設定する所です。
これについても後日検証。
環境変数
環境変数は、その名の通り環境変数。
実行環境に応じてパラメータを変えたい時に使用すると便利なものです。
代表的なものとして、秘密情報でしょうか。
例えば「本番環境用のDB接続用パスワード」をGitHubにブチ混んでいてはマズいわけですよ。
そういう時はパスワードは環境変数から取得することで、ローカルではローカルの設定でDB接続し、本番では本番環境変数でDB接続出来ます。
コミットファイル中にはパスワードが存在しないので安心ということです。
項目「暗号化の設定」は、それを更に推し進めたもののようです。
「Lambdaの画面開いたらパスワード丸見えなんだけど?」というのを避けるため、Lambdaコンソールから見える文字列も暗号化しておいてくれるという物です。
そしてソース中で復元する時は、ちゃんと元の文字列になっています。
当然ですが、パスワードをログ出力していたらブチ怖しなのでご注意を。
タグ
タグは、Lambda関数の目印です。
「メールのフォルダ分け」と似たようなもので、Lambda関数が増えてくると探すのが大変になるから、タグをつけて整理出来るようにしておくというものです。
実行ロール
ロールとは権限を管理する機能です。
つまり「この関数はS3にアクセスして良い」というような実行権限を付与するための項目です。
正しく設定しなければもちろん動きません。
関数が増えてくると、こういう所もキチンと整備し、必要最小限の権限のみを付与することで、システムの保守性が上がるわけです。
基本設定
「基本設定」は寄せ集め項目なので、適当なネーミングにしたのでしょうね。。。
説明
関数についてコメントを書いておくもの。
メモリ
重要項目。
Lambdaではメモリを関数に任意でセットします。
ここで設定しているメモリを2倍にしたら、コストも2倍というシビアな項目です。
従って、Lambda関数はメモリ節約こそが大正義ということを意味します。
最近はサーバの性能が上がってメモリも十分に搭載されており、メモリの使用量なんか全く気にしなくてOKという開発が増えてきました。
しかしLambdaでそれは通用しません。
コスト削減のため、「メモリ節約」「処理速度向上」は極限まで追求しなければならないのです。
最小は128MB、最大は3GB。
タイムアウト
関数が開始から終了までに許容する時間です。
現状だと5分が上限です。
Lambdaは小さい処理を大量実行するモデルなので、一回の実行に何時間もかかるようなバッチは思想と合っていないので使用できません。
そういう時はLambdaを使わないという選択肢もありますが、私はデータの範囲を分けて関数を複数起動するなど、あくまで小さなバッチの集積体という思想に従った方が保守性の高いシステムになると思います。
なお、この画面で設定する値の値は5分ですが、ここで設定する値はLambdaのタイムアウト時間で、HTTPリクエストに対応するAPI Gatewayトリガーの最大時間は90秒だったりします。
なので、
「あれ??? タイムアウト時間を5分に設定しているのに、90秒でエラーになっちまうぞ!?」
ということが起きるんですよ。
これは罠です。
続く
関数のパラメータ解説はもう少し続きます。