##背景
AWS上に個別のシステムをガシガシ開発していくと、あれ?この機能って先日構築したシステムでも作ったよな?的な事って多々あると思います。だったら、各システムが共通で利用する機能をまとめて、共通機能として提供すれば効率がいいんじゃね。と思い。その際に考えた事をつらつら書いていこうと思います。
##共通機能を開発する際に考えた事(考えないといけない事)
- 提供機能
- 何の機能をどこの範囲まで共通化するのか?
- データ保全とか非機能面も十分に検討し機能提供するべきだよね?
- 暗号化等、利用者により機能要件はまちまちだから、利用して頂けるであろう機能(汎用的な機能)にターゲットをしぼり提供する事になった場合、抜け落ちた機能や、要件に合わない機能は個々の利用者で実装してもらうの?
- この共通機能の障害で利用者側に影響を及ぼさない設計にしないといけないね。
- 利用者側のシステムとは疎結合が大原則。
- 利用者が増えたら共通機能はスケールするの?どの程度のユーザ数を見込むの?
- 誰に提供するのか?同一企業内のユーザのみなのか?関連企業まで含めるのか?
- どこから、どういった方式で提供するのか?実現性はあるのか?
- 提供機能のDRとかどうする?
- 共通機能を作ったは良いけど、利用してくれるユーザはどの程度いるのか?
- この共通機能を提供する事により、利用者にどのようなメリットをどの程度提供できるのか?
- 利用者側のメリットもそうだけど、開発者側(共通機能提供側)のメリットはどの程度あるのか?
- セキュリティ
- 複数システムから利用される機能だけど、利用者データの混濁とかセキュリティは大丈夫?
- 利用者の認証、認可は大丈夫?
- そもそも、共通機能の基盤そのもののセキュリティは大丈夫?
- 運用
- 共通機能の面倒は誰が見るの?運用設計もしっかりするべきだよね。作って、利用者に提供して終わりじゃないよね。
- 共通機能を提供したは良いけど、責任分界点はあやふやになってないよね?
- 機能を提供する分けだからSLAって定めた?
- 共通機能で問題が発生した場合、障害対応手順や利用者側へのエスカレーション方法って定まっている?
- 共通機能で利用しているAWSサービスにアップデートが入った場合等、その検証や影響範囲の確認ってどうやってする?提供機能に影響のない方法でできるの?
- 個々システムから監査対応のために、ログ提供依頼等あれば対応できる状態?
- 共有機能を提供した後は、それ以降、この共通機能をあてにして、個々のシステムを開発していく事になるから、利用者側への利用手順や前提、制約などの条件を漏れなく伝えないといけない。
- 利用者側、共通機能提供側で負担するコストって整理できている?
##まとめ
複数システムに提供する共通機能であるが故に考えないといけない事は多々あります。また、各システムの機能の一部を担うという意味では、障害等が発生すると影響が広範囲に及ぶ事が予想され、慎重に緊張感を持って検討したいものです。