こちらのGitHubリポジトリを内容で自分の端末からデプロイしてみました。
コマンド一発でAWSリソースが無事デプロイできました。
実行したコマンドは以下です。
serverless deploy
deployコマンドのオプションでリージョンを指定しなかったため、us-east-1リージョンにデプロイされていました。
マネジメントコンソールでLambda関数が見つけきれずちょっと焦りましたが、マネジメントコンソールをap-northeast-1からus-east-1に切り替えたらLambda関数が見つかりました。
今回のserverless.ymlでは以下のようにfunctionsで二つ指定しているのでLambda関数も二つ作成されていました。 serverless.ymlのfunctionsがそのままLambdaの関数単位でデプロイされるみたいです。
functions: rateHandler: handler: handler.run events: # Invoke Lambda function every minute - schedule: rate(1 minute) cronHandler: handler: handler.run events: # Invoke Lambda function every 2nd minute from Mon-Fri - schedule: cron(0/2 * ? * MON-FRI *)
ちょっと公式ドキュメントも確認します。
以下の記述がありましたのでやっぱりfunctionsがそのままLambda関数になるようです。
If you are using AWS as a provider, all functions inside the service are AWS Lambda functions.
ついでにfunction内のeventsについても調べました。
Simply put, events are the things that trigger your functions to run.
eventは関数を実行するトリガーとのこと。
続いてこう書かれてました。
If you are using AWS as your provider, all events in the service are anything in AWS that can trigger an AWS Lambda function, like an S3 bucket upload, an SNS topic, and HTTP endpoints created via API Gateway.
S3バケットアップロード、SNSトピック、API Gatewayで作成されるHTTPエンドポイントなどでLambdaを実行することができるとのこと。実用性高そうです。
eventについては以下のドキュメントがありました。
今回のチュートリアルでは使ってないですが、S3のイベントも以下のように設定できるみたいです。
functions: users: handler: users.handler events: - s3: bucket: photos event: s3:ObjectCreated:* rules: - prefix: uploads/ - suffix: .jpg
決まったprefixに.jpgでオブジェクトがアップロードされたらLambdaが実行されるって感じだと思います。
公式ドキュメント読む方にかなり脱線してましたが、今回デプロイしたLambdaで出力したログはCloud Watch Logsで確認できました。
ちなみにPythonのコードは以下のようになっています。
import datetime import logging logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) def run(event, context): current_time = datetime.datetime.now().time() name = context.function_name logger.info("Your cron function " + name + " ran at " + str(current_time))
serverless frameworkの雰囲気がわかってきてかなり楽しいです。
あといくつかチュートリアル試してコード読んでみたいと思います。