AWS Lambdaで動いているRedash Slack botをServerless FrameworkからAWS SAMに移行しましたよ
はじめに
こんにちは。レンティオでエンジニアをしている櫻井です。
今回は、私たちが社内で活用しているツールの継続的改善について紹介します。
具体的には、AWS Lambda上で動作しているRedash Slack botをServerless FrameworkからAWS SAM(Serverless Application Model)に移行しました。
このツールはOSSとして以下のリポジトリで公開しています。
Redash Slack botとは
レンティオでは、データ分析のためのBIツールとしてRedashを活用しています。
このRedashで作成したクエリやダッシュボードを社内で気軽に共有できるしくみとして、Redash Slack botを開発して運用しています。
このbotについては、過去の記事でも紹介していますので、詳細はそちらをご覧ください。
移行の背景
これまでRedash Slack botは、Serverless Framework V.3を使って構築・運用していました。しかし、Serverless Framework V.4から有償化されたことをきっかけに移行を検討することになりました。
長らく手をつけていませんでしたが、Lambda環境で使用しているNode.jsをバージョンアップするタイミングでServerless CLI実行時のログにwarningが増え始めたため移行することにしました。
(おそらくServerless Framework V.3のメンテナンスが終了したため、それ以降リリースされたNode.jsバージョンを指定した時に存在しないバージョンとみなされてバリデーションエラーが発生するようになった)
移行先にAWS SAMを選んだ理由は以下です。
- Serverless Frameworkを使っているのはこのツールだけで、ライセンス料を支払って使い続けるほど開発チームがServerlessに依存していなかった
- 社内向けの比較的シンプルなツールであるためAWS CDKを使うほど複雑な構成ではなかった
- チーム内の別のプロダクトですでにAWS SAMでの開発実績があった
移行作業
実際に行った移行作業の内容は以下の通りです:
sam init
コマンドを実行してテンプレートからプロジェクトを作成- テンプレートから自動生成された不要なファイルを削除
-
既存実装を移植
- 既存の
serverless.yml
をもとにtemplate.yaml
を作成 - Lambdaで動作させるJavaScriptのソースコードは変更せずそのまま移植
- 環境変数の管理方法を変更
- Serverless Framework構成ではdotenvを使用していたが、SAMではそのまま使えないため
samconfig.yaml
で渡すパラメータとして管理するように変更
- Serverless Framework構成ではdotenvを使用していたが、SAMではそのまま使えないため
- DockerでLambdaの実行環境をエミュレートする必要がなくなったため関連ファイルを修正・削除
- 既存の
移行のメリット
移行のしやすさ
予想していたよりも簡単に移行できました。
Serverless FrameworkとAWS SAMはどちらもLambdaベースのサーバーレスアプリケーションを構築するためのフレームワークなので、基本的な考え方は同じです。
設定ファイルの記法の違いはあるものの、コア機能はスムーズに移行できました。
AWS公式エコシステムへの統合
AWS上で動作するアプリケーションをAWS公式のフレームワークで管理できるメリットは大きいです。
Serverless Frameworkではserverless.yml
で定義した内容がAWS上でどのような構成に展開されるのか理解するためには、ビルド時に生成されるCloudFormationテンプレートを読む必要があります。
一方、SAMのテンプレートファイルはCloudFormationテンプレートと直接対応している部分が多いので、Serverless Frameworkのようにフレームワーク固有の知識を深く学ぶ必要がありません。AWS CloudFormationの知識がそのまま活用できるため、学習コストが低減されます。
開発環境の改善
過去記事で今後の課題に挙げていたローカルでのテスト手法も改善できました。
SAMではsam local
コマンドを使ってローカルでの実行が簡単にできるようになり、以前のようにDockerでLambdaの実行環境を独自にエミュレートする必要がなくなりました。
実行環境についてはSAMが管理してくれるのでメンテナンス性が向上しました。
さらに、ディレクトリ構成もわかりやすくなりました。
アプリケーションコードとレイヤを明確に分離でき、プロジェクト全体の見通しが良くなりました。
おわりに
今回の移行はサーバーレスアプリケーションの開発フレームワークの選択肢を見直す良い機会となりました。
社内ツールであっても継続的に改善し、開発者体験を向上させることは重要です。
Serverless Frameworkも優れたツールですが、AWS環境に特化したアプリケーションであればSAMを選択することで多くのメリットが得られることを実感しています。
採用情報
レンティオでは絶賛、エンジニアを募集しています!
プロダクトの開発だけでなく、プロダクトを取り巻く開発者体験の向上や社内業務の効率化に興味がある方をぜひお待ちしています。
Discussion