発表されたばっかりの AWS Lambda の Scheduled Event を使って Lambda をスケジュール実行してみる

AWS re:Invent で念願の Lambda の定期実行がサポートされました。

[【AWS発表】AWS Lambdaのアップデート – Python, VPC, 実行時間の延長, スケジュールなど](http://aws.typepad.com/aws_japan/2015/10/aws-lambda-update-python-vpc-increased-function-duration-scheduling-and-more.html)

API Gateway と組み合わせてサーバーレスのシステムが組めるようになったけど、
実際にサービス等で利用する場合には Lambda のスケジュール実行が出来なくと困ることが多いですが、
やっとサポートされました。

ということで、実際に試してみました。
手順としては、Lambda 実行用のロールを作成し、その後 Lambda を作成し、それに対して Scheduled Event を設定する流れです。

# Lambda 実行用ロール作成
Lambda の実行には、実行権限の付いたロールが必要なので作成します。
IAM から作成できます。

1. ロール名の設定  
入力して次のステップをクリック。ロール名はテキトーです。
![create_role_0.png](https://qiita-image-store.s3.amazonaws.com/0/40603/a2bd972a-bcc1-b3e5-ed27-8e0511aa4de9.png)

1. ロールタイプの選択  
AWS Lambda を選択。
![create_role_1.png](https://qiita-image-store.s3.amazonaws.com/0/40603/c4b14f00-1de2-b5af-d1b8-d3511b1b9a98.png)

1. ポリシーのアタッチ  
AWSLambdaBasicExecutionRole にチェックを入れて、次のステップをクリック。
![create_role_2.png](https://qiita-image-store.s3.amazonaws.com/0/40603/b9ac73cf-e6a3-8ee2-52e1-b40a5bcb4d93.png)

1. 確認画面  
問題なければ、ロールの作成をクリック。
![create_role_3.png](https://qiita-image-store.s3.amazonaws.com/0/40603/6c218d9d-3d38-30d4-415c-b9a8d237d4d1.png)
これでロールの作成は完了です。

# テスト実行用の Lambda の作成
1. Lambda のページを開く  
Get Started Now をクリック。
![create_lambda_0.png](https://qiita-image-store.s3.amazonaws.com/0/40603/d6d2f1a8-77e1-7a5d-2a8c-5a776c5ea9d9.png)

1. blueprint を選択  
今回はテストなので、hello-world を選択します。
![create_lambda_1.png](https://qiita-image-store.s3.amazonaws.com/0/40603/af784765-1230-487d-4354-fc901306c7e6.png)

1. Function の設定をします。  
Name に HelloWorldFunction を入力し、Role に作成したロールを選択。
実行するコードはテスト用に console に Hello World !!! と吐くだけに変更しました。
![create_lambda_2.png](https://qiita-image-store.s3.amazonaws.com/0/40603/7bfc6ee9-5733-1f1d-d351-d655c7e964ba.png)

1. 確認画面  
問題なければ、Create function をクリックして、function を作成します。    
![create_lambda_3.png](https://qiita-image-store.s3.amazonaws.com/0/40603/db34b1c0-2f21-9bae-143a-6412996a8734.png)

1. function 作成完了  
![create_lambda_4.png](https://qiita-image-store.s3.amazonaws.com/0/40603/054daca1-db4c-c068-1ec6-0f29b571ef89.png)

# Lambda に定期実行を設定
次に、作成した Function に対してスケジュール設定を行います。

1. Event sources タブを開く  
Add event source をクリック
![create_lambda_5.png](https://qiita-image-store.s3.amazonaws.com/0/40603/5ff100d0-d73b-9f25-ef55-21f73155ff1e.png)

1. event source を追加  
5 分間隔で実行するよう設定します。実際は、時間指定とかも出来ます。
Event souce type に Scheduled Event を選択。
Name にイベント名を入力。
Schedule expression に rate(5 minutes) を選択。
Enable event source は Enable now を選択。
Submit をクリックします。
![create_lambda_6.png](https://qiita-image-store.s3.amazonaws.com/0/40603/ef9c07ad-7353-c1b0-410b-5dcbd70c2019.png)

1. 作成した event source を確認  
![create_lambda_7.png](https://qiita-image-store.s3.amazonaws.com/0/40603/4fb7508a-b2a3-656f-8f9f-b2d41a80ea73.png)

# 実際に定期実行されるか、CloudWatch で確認
![create_lambda_8.png](https://qiita-image-store.s3.amazonaws.com/0/40603/7392f1de-65a3-fa3a-a0e8-180096fdf076.png)

ログに、Lambda で console に吐いた Hello World !!!! が表示されてますので、成功ですね。

# まとめ
とにかく簡単にサクッとスケジュール設定が出来ました。
最初にあげたように Web サービスや、アプリでサービスを行う際、殆どの場合スケジュール実行するようなタスクが絡んでくるので、今回の機能追加によって Lambda の有用性はかなり上がったかと思います。しかも元々かなり低価格ですし。

AWS API Gateway + AWS Lambda + ( CloudFront ) + DynamoDB + ( SPA or NativeApp ) のような構成でサービスも運営できちゃいます。
今回地味に、API Gateway も東京リージョンも対応したみたいなので、全てを東京リージョンで運営できますので、ドンドン Lambda を使っていこうと思いました。