ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

こんな使い方があったの!? Lambda コンソールのカスタマイズ

こんにちは。
カスタードとチョコレートと生クリームのシュークリームだと思って食べた後に絶賛していたら、実は全部同じ味だった。というエピソードを持つ味覚オンチの尾谷です。

突然ですが、あなたは味変 (あじへん) しますか?
ラーメンだと途中で胡椒を入れたり、辛子味噌を入れたり、焼肉だと醤油だれ、味噌だれ、塩胡椒などで味を変えるとたくさん食べれますよね。
僕も味変が大好きです!味覚オンチですが。

Lambda のコンソールを味変してみよう!」ということで、今日は AWS Lambda のコンソールに関するいろいろなカスタマイズについてご紹介します。

本記事の内容

・テーマ

ついつい VSCode や Cloud9 にシェアを取られて開発エディタとしてはマイナーな存在の
Lambda コンソールをカスタマイズして使いやすくする
方法をご紹介します。
この機会に Lambda コンソールを好きになってもらえたら嬉しいです。

本記事の主な対象の方

  • Lambda コンソールが使いづらいなと感じている方
  • SAM Build や Amplify といったローカルでコーディングするツールは使っているがオンラインで Lambda を編集した経験のない方
  • Lambda レイヤーを使いたい!と思っている方

アジェンダ

なぜ Lambda コンソールを使わないのか?

Lambda コンソールは、3MB を超えるコードをアップロードするとソースコードが読めなくなったり、一定時間後にサインアウトしてしまったりと、オンラインのツールならではの弱点があります。また、デフォルトの背景は白色なので長時間の閲覧は疲れる、フォントが見づらい、編集画面が狭いなど、UI デザイン的な部分においても、VSCode や Cloud9 などの洗練されたエディタがプログラマーに好まれる印象があります。

これらの弱点をカバーできる機能をご紹介していきます。

3MB を超えたコードの編集ができない

Lambda 関数でライブラリを使うとき、Zip ファイルでアップロードしますが、ライブラリのサイズが 3MB を超えると以下のようなメッセージが表示されて、コードが編集できなくなります。

Lambda 関数「hoge」のデプロイパッケージが大きすぎて、インラインコード編集を有効にできません。ただし、関数を呼び出すことはできます。

例えば、Requests は Python で書かれている Apache 2 Lisensed ベースの HTTPS ライブラリですが、Python 標準の urllib2 モジュールと異なり、インストールしないと利用できません。

request は使える。requests はインストールが必要

Lambda 関数で利用するには、

  1. ローカルで Requests をインストール
  2. コードに含める
  3. コードを丸ごと Lambda コンソールにアップロード

といった作業を行いますが全体の容量が 3MB を超えるためコンソールで表示ができなくなります。そこで、Requests を Lambda レイヤーに入れます。

Lambda レイヤーとは

Lambda レイヤーは 2018 年 11 月 29 日 に発表された、Lambda 関数で使用できるライブラリとその他の依存関係をパッケージ化して参照させる機能です。

aws.amazon.com

レイヤーを使用すると、編集中のコードに埋め込まなくて良くなりコードのサイズを削減できますし、同じような関数を作成する際に効率的にコードがデプロイできます。

例) Requests をインストールしてみる

インストール手順はこちらの情報を元にしています。

requests-docs-ja.readthedocs.io

まず、test_requests ディレクトリを作り、その中に python ディレクトリを作成します。

  mkdir -p test_requests/python
  cd test_requests

ディレクトリ名は python にする必要があります。
Lambda コンソールのウインドウで説明すると、[Deploy] 時に、以下の部分に追加されるイメージでして

正確に書くと、Python 3.8 以降の Lambda 関数は Amazon Linux 2 で稼働し、/opt/python/ 配下にコードが配置されます。
なので、ディレクトリ名は python にする必要があります。

Lambda ランタイム - AWS Lambda

次に、作成した python ディレクトリの下で、requests をインストールします。

pip install -t python requests

そして、ディレクトリごと zip にまとめます。

zip -r requests_layer.zip python

これをレイヤーに追加します。

あとは、Lambda 関数のページで [レイヤーの追加] ボタンから追加すれば、import して使えるようになります。

一定時間が経過するとサインアウトしてしまう

普段、読み取り専用の IAM ユーザーで AWS マネジメントコンソールを操作して、編集が必要な場合のみ IAM ロールでスイッチロールする運用をされている場合や、クロスアカウントスイッチロールで運用されているケースだと、Lambda をデプロイしようとした際に突然 403 エラーが表示されることがあります。
この状態になると [テスト] も空振りします。

ブラウザをリロードしたり、サインアウト → サインインすると改善しますが、ロールのセッション時間が影響しているかも知れません。

例えば、上記の設定だと 1 時間に一度ロール情報を再読み込みしないといけません。
最大 12 時間まで延長可能ですので、セキュリティ管理者様とご相談されては如何でしょうか。

編集画面が狭い

Lambda コンソールは、これまで説明してきた Lambda レイヤー以外にも搭載するメモリー容量、タイムアウト、デバッグ、モニタリングなど数々の機能があるゆえにエディタ範囲が極端に狭いです。

コーディングする際は、拡大アイコンをクリックして全体表示に切り替えて、

Environment と書かれたタブをクリックしてウインドウを最小化してください。かなり広くご利用いただけます。

テーマを変更する

フォントが見づらい、編集画面が狭いなど、UI デザイン的な部分においても変更が可能です。
歯車アイコンをクリックして、Themes を選択すると変更できます。

Cloud9 の標準テーマに慣れている方は、Jett を設定してみてください。

フォントサイズが小さい

文字が小さくてお悩みの場合は是非大きくしてください。
右下の歯車アイコンをクリックして、Font Size を変更できます。
キーボードショートカットは、[-] キーと [^] が割り当てられています。

vim じゃないと気分が乗らない

歯車アイコンをクリックして、KEYBINDINGS から KeyboardMode: を Vim にしてください。
[H] [J] [K] [L] キーで移動できます。[X] キーで 一文字ずつ削除ができます。
ただ、[U] でアンドゥが出来ず、ここは [Command] + [Z] です。

デバッグ関連

モニタリングタブにある [CloudWatch のログを表示] ボタンをクリックすると、素早くロググループにアクセスできて便利です。 (Lambda Edge の場合は、Edge サーバーのログを参照しないといけないので、このボタンからは参照できません。)

[CodeGuru でプロファイルを表示する] ボタンをクリックすると、AWS CodeGuru が開いてコーディングに関する指摘を確認できます。

まとめ

如何でしたでしょうか。
Lambda コンソールは目立たない存在ですが、いろいろアップデートされてかなり「味変」できる存在に進化しています。

不味いラーメンだなと思っても味変すると絶妙な味になることがありますよね。
この記事を読んで知らない機能があれば、この機会に触ってみてはいかがでしょうか。

引用元ドキュメント

Creating and sharing Lambda layers - AWS Lambda
Lambda コンソール - AWS Lambda