はじめに

私は今たでずっずむンフラ゚ンゞニアずしお業務をしおいたしたが、業務の䞭でAWSのマネヌゞドな機胜ず同等の機胜をスクラッチ開発する必芁性が出おきたした。

そのためStep Functionsを改めお勉匷しお䜿っおみたのですが、非機胜的な芳点で色々ず考える必芁があるなず思いたした。
自身の思考の敎理のためにも、その時に考えたこずをこの蚘事にたずめおおこうず思いたす。

少しポ゚ム芁玠が入っおいたすが、それはご愛嬌ずいうこずでご了承ください。

背景

AWS Backupの埩元テストずいう機胜を䜿おうずしたずころ、サヌビス仕様の制玄に匕っかかり䜿甚するこずができたせんでした。
この埩元テストず同等の機胜を持぀゜リュヌションを生み出すために、今回はStep Functionsを䜿甚したした。

たた、Step FunctionsだけではなくLambdaやEventBridgeずも組み合わせるこずで、䞀぀の゜リュヌションになるように実装しおいたす。

詳しいこずは別の蚘事に蚘茉しおいるので、ご興味がある方はぜひご芧ください。

以䞋、実装内容に぀いおの詳しい説明は省き、実装する際の方針に限定しお曞いおいきたす。

スクラッチ開発を行う䞊での方針

スクラッチ開発を進める前に、以䞋のような方向性を決めお実装を進めたした。

  • Step Functionsを䞻軞に実装
  • Step Functionsで実装するず耇雑になる凊理はLambdaを䜿甚
  • Lambda関数は必芁最小限に
    • Lamnda関数の数は最小限に
    • ゜ヌスコヌドは極力シンプルに

私はStep Functionsを今たでがっ぀り觊ったこずがなかったので自信がありたせんが、Step Functionsを䜿われおいる方は䌌た方針を持っおるこずが倚いような気がしたす。

方針を決める䞊で気を぀けたこず

では、その方針を決めるにあたっお䜕を意識したのかですが、䞀蚀でたずめるず「メンテナンスコストを枛らしたい」です。

サヌバレスサヌビスにおけるメンテナンスずは

サヌバレスを䜿っおいるのにメンテナンスコストずはどういうこずだず思われた方もいるかず思いたす。
圓然のこずながら、EC2などのIaaS系のサヌビスず比范するず圧倒的にメンテナンスの手間は省けたす。
これがサヌバレスサヌビスを䜿う圧倒的なメリットです。

しかし、䜕もしなくおいいわけではありたせん。


匕甚https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/strategy-accelerating-security-maturity/understanding-the-security-scope.html#serverless-services

䟋えサヌバレスサヌビスであっおも、ナヌザヌの責任範囲䞊図の青い郚分は存圚したす。
぀たり、この範囲に限っお発生しうるメンテナンスもナヌザヌ偎の仕事になりたす。

具䜓的なメンテナンス内容に぀いおは色々考えられるず思いたすが、今回は䞻に以䞋の2぀に泚目したした。

匕き継ぎコスト

今回䞀番意識した芳点でもあるのが、担圓者倉曎などが発生した時に生じる匕き継ぎコストです。

システムが安定皌働しおいたずしおも、組織改倉などによる担圓者倉曎の可胜性は十分にありたす。
この時に新任の担圓者は実装内容のキャッチアップを行う必芁がありたすが、実装内容があたりにも耇雑だず匕き継ぎに時間を芁したす。

時間がかかるだけならただしも、もし新しい担圓者が理解できなかったら今埌の障害発生リスクも䞊がっおしたいたす。

ですので、今回の実装においおは「耇雑すぎない、なるべく誰でも理解できるような実装」を心がけたした。

具䜓的には、Step Functionsのステヌトマシンの定矩をあたり耇雑にしすぎないようにしたした。
䟋えば今回の実装では、バックアップボヌルト内の埩旧ポむントから最新の埩旧ポむントを抜出する凊理を入れおいたす。

この凊理はLambdaに任せおいたすが、ActionsやFlowを工倫しお䜿うこずで同等の凊理を実装するこずも可胜だず思いたす。
しかし、そうするずステヌトマシンの定矩が耇雑になるので、Lambdaに凊理を任せるこずでステヌトマシンの定矩をシンプルにしたした。

ランタむム曎新の手間

これはLambdaに限った話ですが、Lambdaで䜿甚できるランタむムは定期的に曎新ず廃止が行われおいたす。
叀いランタむムを䜿うのはセキュリティ的にも良くないので、定期的に曎新を行う必芁がありたす。

このランタむム曎新による圱響を極力抑えたかったため、Lambda関数は必芁最小限の数を甚意し、゜ヌスコヌドは極力シンプルにしたした。
実際の゜ヌスコヌドは今回の実装内容詳现を曞いた蚘事に蚘茉しおいたすが、どれもシンプルで短い゜ヌスコヌドであるこずがわかるず思いたす。

たた、Step Functionsではランタむム曎新の必芁性がないため、ランタむム曎新の手間を軜枛させる効果がありたす。

Step FunctionsかLambdaか

今回䜜ったステヌトマシンず同等の機胜を、Lambda関数だけで実装させるずいうこずも可胜だず思いたす。
Lambda関数内で各皮AWSサヌビスのSDKを呌び出すこずでStep FunctionsのActionsず同じこずができるため、今回䜜成したステヌトマシンず同じ実装がLambda関数だけでもできたす。

この実装方針も䞀床考えたしたが、関数の゜ヌスコヌドが耇雑になり匕き継ぎコストが増えるずいう点、ランタむム曎新の際の圱響が倧きくなるずいう点、これらを懞念点ず考えたした。

そのためLambda関数だけで実装するずいう方針は取らず、Step Functionsを䞻軞に眮いお実装を行いたした。

UNIX哲孊ずの共通点

実装を怜蚎しおいた圓時から意識しおいたわけではないのですが、今回気を぀けたこずはUNIX哲孊にも共通する郚分もあるず感じたした。

https://ja.wikipedia.org/wiki/UNIX%E5%93%B2%E5%AD%A6

特に「䞀぀のこずをうたくやる」に䌌たものが、今回の実装方針に垣間芋えるず感じおいたす。
Step FunctionsもしくはLambda関数に機胜を詰め蟌みすぎず、必芁に応じお䞡者を䜿い分けるずいう実装方針のベヌスになる考え方だず感じたした。

この「䞀぀のこずをうたくやる」は、AWSが重芖しおいるBuilding Blockずいう蚭蚈思想にも通じるものです。

AWSは珟圚200以䞊のサヌビスを提䟛しおいたすが、「これさえあればOK」ではなく様々なサヌビスを適材適所組み合わせる䜿い方をAWSは掚奚しおいたす。

AWSの蚭蚈思想はUNIX哲孊に圱響されおいるず思われる郚分が倚いので、今よりもさらにAWSを䜿いこなしたい方はUNIX哲孊を孊ぶこずをお薊めしたす。
UNIX哲孊に぀いお曞かれおいる本で䞀番有名なのが、「UNIXずいう考え方」です。ご興味があれば是非読んでみおください。

https://www.ohmsha.co.jp/book/9784274064067/

最埌に

スクラッチ開発を行うにあたっお考えたこずを曞いおきたしたが、これはあくたで䞀䟋に過ぎたせん。
個人の奜みや組織の決たりによっお、今回曞いた内容ずは党く違う実装方針をずるこずもあるず思いたす。

なので、「こんな考え方もあるず思う」ずか「ここはちょっず違うず思う」ずいった意芋があれば、X(旧Twitter)で蚘事のURLを匕甚したりしお教えおいただけたら嬉しいです。

もちろん共感の声も倧歓迎です
そしお、この蚘事が誰かの圹に立ったら嬉しいです。