「ステュディオス」な生活

「ステュディオス」=何かを面白がり、熱中することにより生き生きしている状態。 日々の「ステュディオス」を求めて…

Severlessをやってみた

AWSでちょっとした処理を実行するのに Lambdaはとても便利。

これまで、ちょっとしたことをLambdaで実装したことはあったのだが、 ちょっとしたこと以上のコードをAWSコンソール上で書くのはなかなかつらい。

そこで、Serverless Frameworkを使ってみようと思った。

当初、Serverlessを使うメリットとして考えていたのは次のとおり。

  • ローカルの使い慣れたエディタでLambdaを実装できる。
  • Webpack + Babel プラグインを使えば、モダンなJavascriptの機能を使える。
  • デプロイも楽になりそう

試しに簡単なアプリケーションを書いてみた。

サンプルアプリのシナリオ

試してみる課題シナリオは次のとおりとした。

  1. Githubにプルリクを作ったり、プルリクにプッシュするとCodeBuildでビルドを実行する。
  2. プルリクには Github の Status APIで状態を通知する
  3. ビルドの開始をSlackにも通知する
  4. CodeBuild の処理終了をCloudWatch Eventで受け、その結果をGithub の Status APIで更新する
  5. 結果をSlackにも通知する。

作ってみたコードはこちら => HeRoMo/ServerlessSample: My First Serverless Application Sample

やってみて

やってみてどうだったのか?感想を以下に述べる。

関連リソースも一緒に定義可能

予備知識少なめで取り掛かったのでドキュメントを読みながら進めた。 最初はトリガーとなるAmazon SNS等は別に登録して用意しないといけないのかな?と思っていたのだが、 SNSを始め、API Gatewayなど、Lambdaをトリガーできるリソースは serverless.ymlの関数定義で一緒に定義できる。 これはとても便利。 また、Lambdaから他のAWSのリソース・サービスにアクセスするのに必要な権限もserverless.ymlでLambdaの実行ロールに追加できる。 とにかく、Lambdaの実行に必要なものがserverless.ymlで一元管理できるのが管理しやすくてよかった。 最初にデプロイした時、裏でCloud Formationのスタックが作成、実行されてちょっと驚いたが、こういうことなら納得。 Cloud Formationの定義記法で、Lambdaとは直接やり取りしない設定も定義できそうなのでCloud Formationも覚えねばと思った。

やはり async/await は便利

Webpack プラグインとbabelを追加して、ES2015 からNode6.10相当にトランスパイルするように設定した。 Lambdaを使う動機としてはAWSのサービス間の連携を開発するためのグルーコードとして便利というのもあると思う。 実際、AWSSDKは組み込みで動作するので適切な権限がLambdaの実行ロールに付与されていれば、別サービスにアクセスするのは それほど難しくない。 しかし、AWSの実態はHTTPベースのAPIなので、呼び出しはどうしても非同期となる。非同期を多用する必要がある場合には もう、async/awaitが使えないと辛い体になってしまっているので、これは助かった。 AWS SDKの関数は現状、コールバック式なので、早くPromiseを返すようになればと思う。

全般的な感想

前述したメリットはすべて享受できたと思う。 私はJSを書くときにはAtomエディタを使うことが多いが、やはり使い慣れたエディタだと実装しやすい。 webpackでビルドできると、babelでトラスアイルできるだけでなく、自由にnodeモジュールを使うこともできるので、 Github APIやSlack APIのライブラリを利用することができ、その点でも効率的に実装することができた。 デプロイもsls deployワン・コマンドで済むのはとても楽だった。

テンプレートも作った

今後別のアプリケーションを実装するのに便利なように、webpack+babelを設定したアプリケーションの雛形を作った。 ServerlessにはServerlessアプリをgithubから取ってきてそれをひな形に別のアプリを作成する機能が備わっている。 そこもよく考えられているなぁと感心した。

テンプレートはこちら。=> HeRoMo/sls-template: Serverless Framework application template