【アップデート】外部ライブラリ込みの Lambda Function のソースコードもマネジメントコンソールから閲覧・編集できるようになりました

2016.11.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、藤本です。

本日、AWS Lambda をご利用中の方には地味に嬉しいアップデートがありました。

Announcement: AWS Lambda enables code editing for deployment packages that include custom libraries

今まで Lambda Function は追加ライブラリがないという条件付きで、マネジメントコンソールからソースコードを作成、編集することができました。ライブラリを含めたい場合、ライブラリ込みのソースコードをパッケージ化(zip化)した上でアップロードする必要がありました。またソースコードを閲覧したい場合、API経由でダウンロードして、確認する必要がありました。正直面倒でした。

それが本日のアップデートによって、ライブラリ込みの Lambda Function も一度、ライブラリ込みでアップロードしてしまえば、マネジメントコンソールからソースコードを編集することが可能になりました。ライブラリを追加・削除したい場合は現在と変わらず zipファイルでアップロードする必要がありますが、ソースコードの編集することに比べれば機会は少ないでしょう。

Lambda_Management_Console 6

外部ライブラリ込みだということが分かりづらいキャプチャですが、以下のように「外部ライブラリ込みが含まれている、ライブラリを更新する時はアップロードして」というメッセージが表示されています。

This function contains external libraries. Uploading a new file will override these libraries.

既存の外部ライブラリ込みの Lambda Function もソースコードが閲覧・編集可能となっています。

制限として、アップロードする zipファイルが2MBを超える場合、ソースコードを閲覧・編集できません。以下のようなメッセージが表示されます。

The deployment package of your Lambda function "FUNCTION_NAME" is too large to enable inline code editing. However, you can still invoke your function right now.

Lambda_Management_Console

試してみる

それでは一応試してみましょう。今回は Python で試しました。Python の requests ライブラリを使って、Webリクエストするだけの Lambda Function です。

まずは Lambda Function のパッケージを作成します。Requests をインストールし、zip化します。

# pip install requests -t .
You are using pip version 7.1.0, however version 9.0.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting request
  Downloading request-0.0.12.tar.gz
:
Successfully built request get post setupfiles query-string public
Installing collected packages: setuptools, setupfiles, public, query-string, get, post, request
Successfully installed get post public query-string request setupfiles setuptools-24.0.2 requests-2.8.1

# ls
easy_install.py      post-0.0.0.dist-info          requests-2.11.1.dist-info
easy_install.pyc     public-0.0.0.dist-info        setupfiles
get-0.0.0.dist-info  query_string-0.0.0.dist-info  setupfiles-0.0.13.dist-info
lambda_function.py   request-0.0.0.dist-info       setuptools
pkg_resources        requests                      setuptools-28.7.1.dist-info

# vi lambda_function.py
import requests

def lambda_handler(event, context):
    response = requests.get("https://dev.classmethod.jp/")
    return 'HTTP Response status cude is %d' % response.status_code

# zip -rq lambda.zip .

マネジメントコンソールから Lambda Function を作成します。

Lambda_Management_Console

Blank Function から空の Lambda Function を作成します。Blank Function が出来たのも知らなかった。。今まで Blue Print を利用しない場合は、Skip を選択していたと思います。

Lambda_Management_Console_2

今回はテスト実行だけなのでトリガーは設定せずそのまま Next をクリックします。

Lambda_Management_Console 3

Code entry type にUpload a .zip fileを選択し、作成した zipファイルを選択します。

Lambda_Management_Console 4

確認画面で設定を確認したら、作成します。

Lambda_Management_Console 5

作成が完了したら、zipファイルでアップロードした場合もソースコードが表示され、編集可能となっています。

Lambda_Management_Console 6

今まではzipファイルでアップロードした場合、Upload a .ZIP fileUpload a .ZIP from Amazon S3の2択しかありませんでした。

AWS_Lambda8

実際に編集してみましょう。

編集前は Developers.IO のトップページにアクセスしており、テスト実行すると、200が返ってきています。

Lambda_Management_Console_9

存在しないページへのアクセスに変更し、テスト実行すると、404が返ってくるように変更されました。

Lambda_Management_Console_10

まとめ

いかがでしたでしょうか?

今まで Lambda Function を作成する時、zip化、アップロードがめんどくさく、ユーティリティライブラリを使いたいケースも外部ライブラリを利用しないようにコーディングしていました。今回のアップデートにより、外部ライブラリを使うのも大分気が楽になりました。