Open6

フルマネージドで楽に低コストに可用性も高く学習コストも低くしたい旅(コンテナ+MySQL)

Yusuke KawabataYusuke Kawabata

先日某所で「GCPになれてるとAWSもAzureもOracleもめんどくさい」という話になった。いまのクラウドは主要顧客である大企業向けに柔軟な設定変更ができる反面、ちょっとコンテナ動かしたいだけなのにインスタンスやネットワーク、権限、コスト管理グループなどを設定しないと使い始めることができないようになっているのだ。

アプリケーションにフォーカスしたい、複雑なネットワークも組まない、部署単位で予算案分もしない。本番コンソールにアクセスするのはおもに1人。動かすのはせいぜいHttpdとAppとDBだ。もちろん共有のキャッシュサーバやメールサーバがあるに越したことはないが、まずはHTTPSで独自ドメインを使ったアプリケーションをいかに楽に動かすかという観点で考えていきたい。

Yusuke KawabataYusuke Kawabata

しかしながら、楽をするといってもセキュリティと可用性をあまり犠牲にはしたくない。

たとえば4000円程度でメモリ4GBのVPSが借りられるのでdockerを起動するということはできるだろう。ただ、ホストOSのセキュリティのお守りや、インスタンス落ちた時にあわてて半年前の自分のやったことをhistoryもない中で再度くんで復旧できるだろうか。僕は無理だ。

Yusuke KawabataYusuke Kawabata

しかも、VPSだとSSLをLet's Encryptで取得して設定したり、nginxなりなんなりで組まないといけない。不便だ。
そこでVPSベンダーがやっているマネージドのk8sサービスを物色し始める。これらのVPSベンダーはマネージドMySQLもやっている場合が多いので、実はこのチョイスがいいのではないかと思い始めた。なお日本勢はさくらもニフクラもサービスをやめてしまったので海外勢となる。ほかにもあったら教えてほしい。

  • Digital Ocean (Cloudways)
  • Linode (Akamai)
  • Vultr

あたりをみてみる。変わり種としてkinstaもチェックしてみる。なぜなら僕がLaravel使いだからだ。PHPだと共用サーバでもいいじゃないかといわれ、その通りなのだが、占有にすると結構高いし、DBがHA構成じゃないし、コンテナベースだと楽ちんなCICDが組みにくいという問題もある。

Yusuke KawabataYusuke Kawabata

先にDB(MySQL)の話だが、できればHA構成に対応しているところが望ましい。HAになっていることも重要だが、そういった技術力があるところなら復旧もおおよそ自動化されているのではないかと思っている。自分でコンパネログインして前日のスナップショットから復旧みたいなことはやりたくないんじゃ。

しかしHA構成でも比較的安い。たとえばLinodeだと、Shared CPUのメモリ4GB構成を3Nodeくんでも月額140ドルくらいしか行かない。たぶんGCPの半額くらいじゃなかろうか。Vultrの近い構成でもCPUによるが160ドル程度であった。

【追記】そうでもなかった。Cloud SQLを占有1v CPU メモリ3.75GB、SSD100GB構成でHA有効にして$120だった

Yusuke KawabataYusuke Kawabata

いくつかのサービスを調べて分かったことがある。

基本的にはオートスケール(アウト)しない

いや、そもそも雑な設定でオートスケールするのCloudRunくらいで、Azure/Fargateもオートスケールポリシー設定しないといけないし、OCIもContainer Instanceだとスケールしないので、VPS系サービスに求めるのは違うのかもしれない。

何が言いたいかというと、コンテナが稼働するインスタンス(Pod)を意識しないといけないかどうかだ。おおむねいまのサービス群は意識しないとだめ。もちろん負荷に応じてミニマムの3Podから複数Podまで自動で増やせる設定があったり、なかったとしてもコンソールから簡単にポチポチして増やせるので、「アプリケーション側が負荷あがってきたな、ポチ」で終了ではある。

しかし、ゼロから無限(上限設定はできる)にスケールするから急にバズっても寝ていられるし、サービス開始時点ではPodをゼロ~にできるから数百円しかかからないよ。という世界ではないのが残念。

残念ではあるが、k8sのことを知らなくても行ける、という点では大丈夫そう。たとえば入ってくる通信のことをIngressと読んだり、インスタンスじゃなくてPodと読んだり最初は独自用語のことを悩むかもしれないけど、コントロールプレーンだってフルマネージドなのでロードバランサーくらいに思っておけば済むのは良い。

MySQLに至ってはそもそもスケールしない

コンテナと違ってデータベースは、基本的にスケール(アウト)しない。なのでリードレプリカを増やすか、スケールアップしか方法はないのだが、ここでも各社若干仕様が違った。

  • HA構成と呼んでおり、マスターにしかアクセスできないタイプ(基本これ)
  • 読み取り専用のリードレプリカが使えるもの(大手クラウドはこっちも対応)
  • そもそも複数台構成対応していないタイプ(kinstaとか)

Linodeはシングルまたは3 node HAの2択、Vultrは0~2個のレプリカ、kinstaはレプリカなしだった。

Yusuke KawabataYusuke Kawabata

Digital Oceanについては、サブブランドのCloudwaysも含めよくわからなかったのだが、Cloudwaysは各VPSのラッパーとして機能し、疑似マネージド環境を作れるSaaS/PaaSの模様。

Digital Ocean本体はk8sのマネージドサービスあり(コントロールプレーンのHAオプション$40)Podの自動スケールがあり、0にはできないがご予算に応じて3~13までスケールさせることができた。1Podあたり4GBインスタンスの場合24ドルなので、HAも併せて$104~といったところが現実的か。
MySQLも0~2個までのスタンバイノードを用意できて値段もメモリ4GB、スタンバイ2ノードで$180くらいだった。

※k8sは日本リージョンなかった。