サーバーレス開発に必要な知識を体系化してみる
以前、サーバーレス開発としてAWSをLamdba周りを触ったので、自分なりに体系化して整理してみました。
AWSだとサーバーレス開発=Lambdaだと思っていましたが、試してみるといろいろな知識やサービスを利用します。
自分の知識の整理も兼ねて、サーバーレス開発に関する知識とその知識に対してAWSのサービスをマッピングしました。
自らの知識の整理なので、正しい説明よりも自分の言葉で書くようにしています。
プログラミングはPythonで行ったので、言語はPythonのみです。
※特に言語特有の内容はありません。
はじめにサーバーレス開発の知識のマインドマップと各要素の説明です。
次にAWSのサービスとサーバーレス開発の知識要素をマインドマップで紐づけました。
サーバーレス開発の知識のマインドマップ
各要素の説明
プログラミング
Python
プログラミング言語の一種。インデントを強制することで可読性を向上させる。科学技術系でも人気があり、各種パッケージが豊富。
パッケージ管理
特定の機能を再利用できるライブラリがパッケージとして公開されており、パッケージの追加、削除する仕組み。
pip
Pythonのパッケージ管理ツール。
開発環境
効率的にプログラミングを行うためのエディタや各種支援ツールが用意した環境。昨今はクラウドサービスとして提供されているものがある。
データベース
NoSQL
MySQLなどのリレーショナル・データベース以外の方式を指す。単純なデータ追加や参照などに特化したデータベースがあり、ドキュメント指向や列指向、グラフ特化など各方式に特化したプロダクトがある。
オブジェクトストレージ
ファイルの保存先。ファイルのフォーマットを問わず保存することができる。またストレージにアクセスするためのAPIが用意されていることがある。
サーバーレス
プログラマはサーバーの存在を意識せずコードを実行。書き方や実行時間などの制約はあるが、プログラマはサーバーの設定煩わしさやサーバー管理稼働を削減できる。
バージョン管理
ファイルの変更履歴管理。機能の追加やバグが修正などを変更差分を記録し、リリースの世代管理を行う。
Git
代表的なバージョン管理ツールの1つ。分散型バージョン管理の方式を利用している。
継続的インテグレーション(CI)
ソフトウエア開発プロセスを自動化することでソフトウェアの開発スピードを上げつつ、コードの品質を保証する取り組みを指す。
ビルド
ソースコードをコンピュータ上で実行可能な状態にすること。コンパイル以外にトランスパイルもビルド工程に含まれる。
テスト
プログラムの挙動の確認を行う。CIにおいては自動化されたテストを指す。
デプロイ
ビルドしたプログラムを本番環境やステージング環境に配布する工程。デプロイによって改修内容がサービスに反映される。CIにおいてはデプロイも自動化する。
起動方式
イベント通知方式
何かしらのイベント(ファイルのアップロード、ログの書き込みなど)をきっかけにプログラムを起動させる方式。イベント通知方式にはイベント発火と通知を管理する仕組みが必要。
定期実行方式
プログラムの実行する日時を設定し、実行する方式。実行時間を管理する仕組みが必要。
WebAPI
Webの通信で情報の取得や登録などの機能を提供する仕組み。WebAPIを用いることで見た目の処理とデータの処理を分けることができる。また近年はAIなどによる特別は機能がWebAPIとして提供されている。
REST
REST(REpresentational State Transfer)はWebサービスの設計モデルの一種。WebAPIのにおけるベストプラクティス的存在。データ取得はGETメソッド、データ登録はPOSTメソッドを使うなどのルールを決めている。
認証
WebAPIにおける認証。APIキーやOAuthなどを用いて不正アクセスを防ぐ。
ログ
実行結果やエラー内容などを書き出すこと。ログの内容とイベント通知方式と組み合わせ、エラー時の通知などを行う。
サーバーレス開発の知識とAWSのマインドマップ
それぞれの知識は概ね上のマインドマップで繋がります。
サーバーレス開発も単体サービスでは成り立たず、組み合わせて利用しくことがわかりました。
サーバーレスは変化が激しいので、これからも学んで行こうと思います。
マインドマップの作成ではChrome拡張のMindMap Tabを利用しました。