こんにちはー!NTです!
今年もこの時期がやって参りました。
アドベントカレンダーということで連日みんなでカレンダーを書いております!
内容については、個人の判断で書いて貰ってるので技術的な内容に偏りすぎなくて良いかなとも思ってます。
早速ですが、最近業務でPython開発だけではなく、複数プロジェクト内で開発リーダー、開発リード、サービスが稼働しているシステム全体のアーキテクチャを考えたりしてます。
その中で最近あったトピックとして、タイトルにある通り技術ネタで行こうと思います。
まず初めに用語の説明をします。
AWS:Amazon Web Servicesの略で世界1位のクラウドコンピューティングサービス
EC2:Amazon Elastic Compute Cloudの略で要するにAWSが提供しているコンピューティングサービス
インスタンス:EC2というサービスで動いているクラウドの仮想サーバー
結構現場でAWS使っているよというところが多いと思いますが、
S3やLambdaやRDSに並んでEC2を使っている企業が多いと思います。
さて本題に戻りまして、先日現場業務で担当しているプロジェクト内であった出来事で
普段は本番環境としてフロントエンド側1台、バックエンド側3台のEC2を常時動かしているのですが、
ふと見てみると、EC2のコンソール画面でインスタンス(105)となっていた訳です。。。
イメージ図
え、、、これはやってしまったか??と手が止まりました。
と、不安を煽ってみましたが、
実はこの台数を実行したのは私でして、とある事情でバックエンド側で処理しているAI処理を行うために一時的に並列数100オーバーを実施していた訳でした。
起動している時間はCPUは、ほぼ100%張り付きでメモリはかなり余裕がありました。
とはいえ数年AWS触ってますが、さすがに3桁台数のEC2を動かしたことはなかったので、
内容確認しつつ、現場の経理担当の方にも見て貰いながら実行しましたww
こんな経験無いなーと思いつつ、ブログに書こうと思い書いている所存であります。
一口に100台と言ってもインスタンスタイプは性能重視で最新CPUを使用してましたが、
1台1台については、そこまでのスペックは必要ありませんでした。
合計スペック的には200vCPU, 400GB MEM, 5TB SSDくらいかなと思います。
こう書いてみると結構なスペックだったと認識しました。とはいえ常時ではなく24時間近く動かしていたのでこれだけで4万~5万くらいの請求で抑えられた計算になります。
今回はこのように状況に応じて一時的に大量の台数を増やす必要があるケースが極まれにあると思います。
プロジェクト内の前提として、全てコンテナ化を進めていたおかげでAWSコンソール画面で数字を変えるだけで実働しているインスタンスが柔軟に動いてくれたので良かったです。
ECSやAWS Batchなどで環境を作ることでこのような一時的な大量リソース使用が実現できました。
今後も試行錯誤しながらマシンリソースを使用していこうと思っているので、
それこそAI処理次第では、一時的に300台くらい動かすことも出てきそうなので、その際はまたブログ書こうと思います!
システム全体の構成を考える上で、冗長性はもちろん突発的なアクセスや処理も捌けるような
オートスケーリングを考えておくことは必須だと思います。
その点ではクラウドサービスを使用していれば使用できるリソースがほぼ無限なので、
その上で設計を進めて行くことをおすすめします。
※何個か前のブログでも書きましたが、AWSにはアカウント毎やリージョン毎に一定のクオータ(リミット)が決まっているのでそれを超える使用が想定される場合は事前に申請して承認してもらう必要があります。
ケースバイケースですが、よほどの緩和申請をしない限り自動対応で承認されることが多いです。
今回のEC2についても、プロジェクトで使用しているAWSアカウント内で同時に実行出来るEC2のvCPU数上限を640から1280とかに増やしておいたので必要に応じてもっとおかわりは可能でした。
今年もアドベントカレンダーも最後の方連投すると思いますので、
今のうちにネタ探ししておこうと思います!!