クラウドネイティブとは何か | 株式会社ROBON
はじめに2019年に株式会社ROBONを設立するにあたって、これから時代のソフトウェアのアーキテクチャはどうあるべきかを考えました。既にクラウドネイティブという言葉はあったと思いますが、私にはそ...
https://www.wantedly.com/companies/company_5181558/post_articles/897217
当社ではクラウドネイティブなシステムを開発しています。
上記のように「使いたい時」「使いたい場所で」「使いたいだけ」上手にコンピューティングリソースを使うため、「ゼロからコールドスタートが当たり前」の要素のみで構成されたシステムを開発しよう。「ゼロからコールドスタート」ならネイティブコードにコンパイルされる言語(Go言語)によるFaaS(AWS Lambda)が良さそうだ。
となりましたが、当然、次は「どうやって開発するの?」ということになります。
開発環境だけでなく、テスト環境もステージング環境も本番環境に近いことが大切です。
なぜなら、開発環境で動いたものは本番環境でも同じように動いて欲しいし、本番環境で発生した問題は開発環境でも再現して欲しいからです。
ですから、その他の条件が許すならば、開発もテストも本番環境と同じ種類のCPUを搭載し、同じ種類のOSの上で、同じ種類のミドルウェアを使った環境で行うのがベストだと思います。これまではローカルPCと本番サーバーや本番クライアントがスケールは違えど、近い構成だったのでローカルPCに開発ツールをインストールして開発環境にできました。
さて、AWS Lambdaは、どんな環境で動いているのでしょうか。
Go言語の場合、Intel CPU上で動くAmazon Linuxが本番環境です。この環境が良いのですが、下記のとおり、Amazon Linuxはサポートが終了していますので、Amazon linux 2が候補になります。
AWS は、標準サポート期間の一部として、2020年12月31日まで Amazon Linux AMI のセキュリティ更新とバグ修正を提供します。新しいアプリケーションの開発は Amazon Linux 2で行うことを強くお勧めします。
これまでは、ファイルシステムやデータベースシステムやHTTPサーバーなどのミドルウェアと組み合わせてシステムを開発してきました。これも本番環境と同様のミドルウェアを用意して開発環境に導入してきました。
AWS Lambdaは、サーバーレスですし、よりクラウドネイティブであるためには、汎用リソースによって提供されるAWSサービスと組み合わせるのベストでしょう。AWSの提供するサービスというのは、基本的にWebAPIを経由して使用します。また、サービスを使用するための認可は、IAMロールを使用します。
以上から、Intel CPU上で動くAmazon Linux 2に適切なIAMロールを付与できる環境が本番環境に近い環境と言えます。
ごくごく普通の結論ですが、それは「Amazon EC2」です。EC2には、IAMロールを設定することができます。たった今コンパイルしてできたネイティブコードを新たにOS上で起動されたプロセスとして動作させようとする際に、そのプロセスにIAMロールを付与する方法を考えるよりも、EC2から他のAWSサービスへ要求を出す際にIAMロールを付与してもらう方が簡単です。
一方、開発効率を考えるとIDEも欲しいところです。何がベストかは宗教論争になるといけないので、本家ガイドの最初の候補だからという理由で(笑)Visual Studio Codeを使用することにしました。
VSCodeは、マルチプラットフォームなんですが、開発対象のシステムがどうしてもEXCELを使えないといけないとか(笑)いろいろな事情があって、Windows上のVSCodeをIDEにします。
おいおいEC2はどこへ行ったんだ?
EC2は、Windowsとは別に用意して、VSCodeのRemote Developmentという機能で、実際のソースコードや実行プロセスはEC2上ということができます。
当社では、様々なライフイベントを乗り越えて、永く働くことができるように、コロナ禍前からオフィスにはリソースを置かず、全てをクラウド上に置くことで、時間と場所に縛られない環境を作ってきました。
各エンジニアには、Amazon WorkSpacesのWindows環境が提供され、そこにインストールしたVSCodeから、開発プロジェクト毎、担当メンバー毎に別途提供されるAmazon Linux 2のEC2にRemote Developmentによって接続するという開発環境にたどり着きました。開発プロジェクトを異動する場合には、別のEC2を用意して、元々の開発プロジェクトのEC2は停止しておきます。緊急で戻る場合はEC2を起動するだけで開発環境を復元することができます。
まさに「使いたい時」「使いたい場所で」「使いたいだけ」のクラウドネイティブな開発環境ではないでしょうか。