Lambda Functionで任意のパラメータを受け取る

今回は前回の続きで、Lambda Functionに変更を加え、更新をAWS CLIから行ってみた際のログを晒します。
本当はAPI Gatewayのお話を書きたかったのですが、まずは順番にこのレベルから記事化することにしました。

Lambda Functionで任意のパラメータを受け取る

前回作成したサンプルコードを書き換えましょう。
具体的にはclient#post()で渡していた文字列を、handlerの第一引数から取得するように変更を行いました。
event.tweetが存在すればそれを利用し、存在しなければこれまで通り"I Love Twitter"とつぶやきます。

# vim index.js
var Twitter = require('twitter');

var client = new Twitter({
  consumer_key: 'xxxxxxxxxxxxxxxxxxxxxxxxx',
  consumer_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  access_token_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  access_token_secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
});

exports.handler = function(event, context) {
    var tweet = (event.tweet) ? event.tweet : 'I Love Twitter';
    client.post('statuses/update', {status: tweet},  function(error, tweet, response) {
        if (error) {
            context.done(null, error);
        }
        console.log(tweet);
        console.log(response);
        context.succeed();
    });
};

パラメータは、以下のようなjson文字列を受け取る想定で実装しています。

{
    "tweet" : "I Love Twitter"
}

Lambda Functionを更新

Lambda Functionはzip化してアップロードしていますので、今回修正を行ったindex.jsをzipに再圧縮してください。
その後、以下のコマンドでLambda Functionを更新しましょう。
※Lambdaのバージョニング機能やエイリアスを利用する場合は今回のコマンドでは事足りません。(publishオプションや、update-aliasサブコマンド等を利用します)

# aws lambda update-function-code --function-name lambda-twitter --zip-file fileb://lambda-twitter.zip
{
    "CodeSha256": "fnKOjOt+Am3dva1WCbL6/h+HatgAwsKo36Fl9S1DHow=",
    "FunctionName": "lambda-twitter",
    "CodeSize": 1273734,
    "MemorySize": 128,
    "FunctionArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:lambda-twitter",
    "Version": "$LATEST",
    "Role": "arn:aws:iam::xxxxxxxxxxxx:role/lambda-exec-role",
    "Timeout": 3,
    "LastModified": "2016-04-24T14:18:37.816+0000",
    "Handler": "index.handler",
    "Runtime": "nodejs",
    "Description": ""
}

Lambda Functionを実行

それでは更新が反映されていることを確認するため、Lambda Functionを実行してみましょう。
今回は実行時にLambda Functionに渡したいパラメータ (--payload) を指定します。

# aws lambda invoke --function-name lambda-twitter --payload '{ "tweet" : "I Love AWS" }' output.txt
{
    "StatusCode": 200
}

無事、変更が反映されましたね。

f:id:demiglacesource:20160424235225j:plain

まとめ

Lambda Functionの更新をAWS CLIから行ってみました。
次回こそは、API Gateway(Lambda Function実行)に関する記事を書きたいと思います!