Lambda”入”門!

佐野

佐野 2014年12月25日

AWSに「Lambda」というサービスができたので、
触れてみました。

とは言っても、それまでに色々と触れられている方もおられ、ブログ記事もいくつかあるようですが。
やや遅れを取ったとは思いますが、こんな私でも、どうにかして紐解いて使ってみたいとは思っております。

Lambdaを利用可能にするには、こちらで「プレビューにサインアップ」をする必要があります。
http://aws.amazon.com/jp/lambda/
住所氏名メールアドレスなどを入力する必要がありますが、登録してすぐ使えるわけではなく、
登録すると、申請用タスクに保存され、返事が返ってくるまで、しばらく待つ必要があります。

現在利用可能なリージョンは、オレゴン、バージニア、アイルランドの3カ国のみです。
また、IAMの子アカウントで動作させる事を推奨しているようです。

基本は「node.js」が入ったJavaScriptだそうでして。
と言っても、「node.js」自体も触れるのは初めてなのですが。

ともかく、AWS上で書いたコードで、色々な制御を行えるようなものですね。
まず、「Create a Lambda Function」をクリックすると、
規Lambda関数を作成できます。

20141222163856

まずは「Name」を自由に決めます。
自由にとは言っても、日本語のようなマルチバイトはバグると思いますので、
半角英数字にするとよいでしょう。

次に、「Code entry type」は、Lambdaコンソール上でコードを直接書くか、
zipファイルをアップロードするかを選択します。
実験しながら作成したいのなら、「Edit code inline」でよいでしょう。

「Code Template」ですが、初期状態では「S3 Get Object」になっており、
その下のエリアも、S3に関するサンプルコードが掲載されている事でしょう。
まずは、S3にファイルをアップロードしたときに動かす関数を作るのが
簡単かと思いますので、そのままの状態でよいでしょう。

20141222163901

「Handler name」は、プログラム実行のきっかけ、つまりトリガーが実行された際に、
実行を行う関数名を指定します。
初期状態では「handler」になっているはずですが、
同じくサンプルコードの5行目にも、
「exports.handler」となっている部分が存在します。
この「handler」となっている部分が、「Handler name」の項目と関連付いています。

「Role Name」では、権限を持ったIAMを選択します。
右にある「Create/Serect Role」ボタンをクリックすれば、
IAMのポリシーを作成、

「Advanced settings」では、関数を動かすためのメモリと、
タイムアウトになる時間を選択します。
特に処理に時間がかかるコードでもなければ、変更する必要はないでしょう。
本格的な処理を要するようになって、処理に時間を要するようになってから、
調整してみるとよいでしょう。
ただ、むやみに上げすぎると、料金が発生する、
または課金が必要になるかもしれませんが。

「Create Lambda function」ボタンで、Lambda関数が作成されます。

リスト上にLambda関数が表示され、
関数名をクリックすると、グラフが展開表示されます。

20141222171118

グラフの下にもボタンがあり、「Gonfigure event source」をクリックすると、
関数トリガーとなるS3バケットを設定する画面に切り替わります。

20141222195007

ここで注意が必要。選択可能なバケットは、
Lambdaを作成したと同じリージョンのバケットのみです。
あらかじめ、Lambdaと同じリージョンでバケットを作り、
選択肢に反映させる必要があります。
もちろん、Lambdaも日本リージョンでなければ、
既存の日本リージョンのバケットを利用する事もできませんし、
現在Lambdaも日本リージョンは存在しません。

「Invocation Role」では、Lambda作成時同様に、
IAMのポリシーを作成、または選択します。

これで、選択したS3にファイルをアップロードされた時に走るLambda関数が出来上がります。

20141222201148

右にあるのが、実際にコードを記載するボックスです。
Google Apps Scriptのコンソール程ではありませんが、色分けされてなかなか扱いやすいです。

左にあるのが、トリガー起動時にトリガーの基になった物の情報のサンプルです。
例えばS3にファイルをアップロードしたときをトリガーにした場合、
アップロードしたファイルの名前などの情報が、連想配列として格納され、
左ボックスのような形式で出力されます。
コードをテストで起動させた場合に、左ボックスの連想配列が
サンプルとして出力されるようになります。

具体的には、

exports.handler = function(event, context) {
    //ここにコードを記載
}

関数の中にコードを記述していくのですが、「event」の仮引数に、
テスト動作時には左ボックスのサンプルが格納され、
本番トリガー起動時には、S3の場合アップロードされたファイル情報が格納されます。
ただし注意が必要で、ファイルの中身や、ファイル自体をオブジェクトとして格納される事はありません。

ともかく、今は長々とした説明になりましたので、ひとまずはここで終了とします。
次回は実際に、サンプルになるようなものを書ければと思っています。