Linodeのメリットが得られやすいユースケースとは?

佐藤裕行氏(以下、佐藤):後半は、Linodeのユースケースについて、少し岡本さんと話を進めていきたいと思うんですけども。今回はアプリケーションの負荷試験にフォーカスして、デモなども見せていきます。

その前に、負荷試験以外のサービスでいうと、こういうのに向いているとか、こういうのに向いてそうなところって、なにか感覚として持ってたりしますか?

岡本英輝氏(以下、岡本):前半に続いて、ちょっと転送量コストの話ばっかりになってしまうんですけど、やはりアウトバウンド転送量を大きく消費するようなアプリケーションに非常に向いてると思っていて。映像の配信であったり、音楽の配信であったり、そういったものにはすごく向いてるんじゃないかなと思います。

もしくは音声通話やビデオ会議、そういったデータ通信量が多く発生しやすいものは、他社との比較ですごくコストメリットが出やすいのかなと思いますね。ただ、それに限らずなんですけど、なんでも普通の汎用的に使える仮想マシンではあるので、なんにでも使えるとは思います。

佐藤:ありがとうございます。私も転送料の安さは魅力的なのと、インスタンスそのものが安いのとディスクも付与されていてるし、SSDで高速なので、他のハイパースケーラーに比べるとまだサービス数が少ないんですけれど、そこが気にならなければ広く使えるかなってのが、個人的な感想です。

今回取り上げるユースケースはアプリケーション負荷試験というところで、Linodeのメリットが出やすい分野なので、他クラウドへの負荷テストというところで紹介したいと思います。ではちょっと、こちらは岡本さんに実際のデモを交えて説明してほしいので、画面をお渡しします。

ロードテストツール「k6」を使った結果をGrafanaで可視化してみる

岡本:はい。ちょっとすみません、そこのタイトルに「他クラウド」とあるんですが、この後たぶん佐藤さんのほうから「なぜ他クラウドに対しての試験環境か」という話があると思うので、私は今日はLinode to Linodeでテストをお見せしたいなと思っています。

ふだんみなさんいろんな理由から負荷試験のツールを選んでいると思うんですが、私のほうでも今日使うツールを少し紹介します。今からお見せするデモはこういう構成になっていて、両側ともLinodeの東京リージョンを使っています。

今日は負荷試験の対象となるアプリのほうについてはあまり本格的に触れないので、右側は軽く見てもらえればなと思うんですけども、LinodeのマネージドKubernetesのLKEで構築したクラスタがあって、その中でマイクロサービスのWebアプリケーション、Sock Shopと呼ばれている有名なマイクロサービスのデモのアプリケーションが動いています。

その手前にLinodeのロードバランサー、「ノードバランサー」と呼ぶんですけども、レイヤ7のロードバランサーがここにいて、左側の負荷をかけるソースのほうも、同じLinodeの東京リージョンでLinodeのインスタンスを立ち上げました。

ご存じの方もいらっしゃると思うんですが、k6と呼ばれているロードテストのツールがあるのでそれを使って、試験結果をGrafanaで可視化するような感じでいきたいなと思っています。なので、その結果がInfluxDBに蓄積されている感じですね。

そんな構成で今日お見せしたいと思いますが、k6ってどれだけ有名なのかわからないんですが、私は便利なので使っています。

あと、このSock Shopがどういうアプリケーションなのか、ほんとに簡単にお見せします。ノードバランサーがあって、ノードバランサーのPodがこれですね。こんな感じの靴下屋さんのアプリケーションがあって、裏ではこれ用にマイクロサービスが何個かに分かれて動いてる感じのアプリケーションになっています。

今日のこのお話しする内容についてはQiitaに記事を書いているので、その記事を見ながらお話しできればなと思っています。この「k6を使った負荷テスト環境をLinodeに10分で構築する」というタイトルで書いているので、もし今日の話を聞いて興味がある方は、ぜひ検索して読んでみてください。

StackScriptを使えば負荷試験環境を10分で構築できる

岡本:今日ぜひ強調したいのは、この「10分で構築」というところでして。普通に考えるとなんで10分で構築できるの? って思うんじゃないでしょうか。Linodeが持っているStackScriptと呼ばれている機能を使うと、10分で構築できます。

StackScriptと言われても、たぶんみなさんわからないと思うので、ちょっと説明します。実はここにいる佐藤が、StackScriptは何かっていう記事も実はQiitaで書いているので、ぜひそれも検索して見てもらえればなと思います。

なんのことはない、OSの初回起動時にセットアップをするシェルスクリプトを登録しておいて、インスタンスの立ち上げと同時にそのシェルスクリプトをキックするというものになっています。今回、今日お見せする環境用にそのスクリプトを作っているので、結果として自分ではほとんど何も触らなくていいので、10分で構築できるというわけです。

実際はこんな感じになっていて、これは昔ながらの温かみのあるシェルスクリプトを私がせっせと書いたもので、無駄に途中でJSONとか流すので、やたら行数だけ多いんですが、まあ2,700行ぐらいのシェルスクリプトがあって、これが全部、今日使う負荷試験ツールk6であったり、結果を可視化するためのGrafanaなどの環境をデプロイしてくれます。

佐藤:2,700行もありますけど、これを作るのは大変だったんじゃないですか。

岡本:いや、これはそんなでもなくて。実は、このうちたぶん2,500行ぐらいは、このJSONをただ貼ってるだけなので、そんなに大変でもないです。

佐藤:そのJSONはGrafanaを作るためのJSON?

岡本:そうですね。補足ありがとうございます。これ自体は、別にLinodeとなんの関係もなくて、k6やGrafana、InfluxDBなどの設定ファイルをただベタ書きしてるだけのファイルです。

佐藤:なるほど。JSONの設定ファイルに書き込むためのベタ書きをベンって貼ってるだけってこと。

岡本:そうです、これ自体はただのシェルスクリプトですね。

佐藤:ああ、なるほど。なんか行数多いので大変かなと思ったんですけど、至って普通のbashのスクリプトなんですね。

岡本:そのとおりです。StackScriptは、ある程度既存のサンプルを見て、ああ、こういうふうに書けばいいんだなと、参考にしながら書けるので、実はこれ、自分で頭を使って書いてるとかはあんまりなくて。言い方アレですけど、コピペで済んじゃう。もちろんセキュリティなどを考えると、もちろんちゃんとレビューしたほうがいいんですが、まあそんなに難しくはないかなという感じですね。

このStackScript、この説明だけだったら単にシェルスクリプト1個流すのと同じでしょ、と思うかもしれませんが、私、1つ個人的にとても気に入っているところがあって。StackScriptのここなんですよね。この #<UDFって書かれているとか、これLinode特有のメタ表記でして、これ書いとくと、このシェルスクリプトで使う変数(パラメーター)をLinodeの管理UIのセットアップ画面でフォームから入力できるようにしてくれるんですね。

例えばLinuxのOSセットアップする時にsudoできるユーザーを何にしますかとか、GrafanaのダッシュボードにログインするパスワードなんかをWebフォームで入力できるようにしておいて、この「Deploy New Linode」のボタンを押すと、StackScriptをベースに新しい仮想インスタンスが立ち上がります。

ですので、誰か1人が、StackScriptを作れば、あとは、例えば社内の人が、Webフォームに必要な事項を入力するだけで、パラメーターを反映させた定型のインスタンスを半自動で簡単に構築できます。

Infrastructures as a Codeで全部やりたい人にはあんまり意味ない仕組みかもしれないですが、なんだかんだ言ってGUIでできるのはけっこう便利だったりするので、これはすごく個人的に気に入っている機能だったりします。

k6のインスタンス立ち上げ手順

岡本:では実際にk6のインスタンスを立ち上げていきたいと思います。

イメージはUbuntuの22を使って、リージョンは、今日は普通に東京からやりたいと思います。

Linodeのプランには、共有CPUのもの、メモリが多いもの、GPUつきのものなどがありますが、今回はDedicated (専有)CPUの16GBRAMのインスタンスを立ち上げようかなと思っています。これが月額の上限費用120ドルですね。メモリは16GB積んで、ストレージは320GBあって、トランスファー(転送量)が6TB込みなので、けっこういいんじゃないかなと思います。

rootのパスワードも先ほどのと全部同じにしてしまって、あとはSSHキーですね。私は別の画面から自分の鍵を登録しているんですが、今日はこれを使わないので、放っておきます。あとはバーチャルLANもちょっと今日は使わないので、放っておいて。あとはPrivate IPも、今回はリージョン内の通信はしないので、いったんチェックを外しておきます。というところで、この設定で、Linodeのインスタンスを作成します。

すると、こんな感じでプロビジョニングが始まるので、これで今、裏でOSのセットアップと、あとは先ほどのStackScriptが走っています。実際にはたぶん10分もかからなくて、5分ぐらいあれば全部セットアップが終わります。

ある程度マシンが立ち上がってしばらく経つと、ここの画面にCPU使用率やネットワーク使用率などが出たり、あとはネットワークのコンフィグレーションがここで確認できたり、ストレージがどのようなディスクかが見えたりなど、諸々このダッシュボードに出てくる感じですね。あ、今ブート中ですね。

佐藤:じゃあもうそろそろ「Launch Lish Console」が起動できますかね。

岡本:はい。

佐藤:私これ便利かなと思っていて。

岡本:実は、私はほとんどこれを使ったことがないです。あー、はいはい。コンソールが見られるんですね。

佐藤:これは使ったことなかったですか?

岡本:一応なんかリンクをクリックして開いたことはあるんですけど、いいやと思ってすぐ消しちゃったんで、あんまりちゃんとは使ってないですね。

佐藤:いちいちSSHするのが面倒な時には、普通にコンソールをベンっとたたいて、ここで作業できたりするんで。ブラウザだけでチャチャッと作業を完結したい時には、これは便利でしたね。

岡本:あー、これttyのターミナルにつながってるんですね。

佐藤:そうですそうです。

岡本:なるほど。

佐藤:なので今起動中、という感じもここで見られます。

岡本:なるほど、確かに。あんまり使ってませんでした。

Linodeのサーバーは負荷試験のユースケースに適している理由

佐藤:起動待ちでStackScriptがもうすぐ動作するので、(その前に)いったんちょっと画面もらってもいいですか。

岡本:どうぞ。

佐藤:今、負荷試験環境のサーバーを立ち上げてますけども、Linodeはアウトバウンド転送料がものすごく安いんです。何を言いたいかというと、例えばAWSからAWSに負荷試験をかけたりする場合、実際のところパブリッククラウド内のネットワークの帯域を使っているので、実環境に合わせた負荷試験になっているかというと、やはりちょっと違っていて。本当なら外部から負荷試験したほうが適切なのに...ということがけっこうあるのではないでしょうか。

でも、外部から負荷試験をやる場合、アウトバウンド転送の費用が気になるし、インスタンスにかかる経費もなるべく抑えたいという気持ちが働くんじゃないかと思います。とりあえず負荷試験をして、終わったらサーバーインスタンス削除して費用抑えたいなというケースには、Linodeはけっこう適していて。

もちろん、グローバルで10リージョン以上でサーバーを立ち上げられますし、インターネットゲートウェイもありますし、この転送料も安いです。さらに、Linodeのサーバーは時間単位の課金ですので、使ったらインスタンスを削除して必要な時に自動化の仕組みで再構築して、を繰り返せば、経費をかなり安く抑えられるところが魅力です。負荷試験とかのユースケースには適しているということですね。

つまり、負荷のかかる試験環境のコンピューティングリソースのコストパフォーマンスがよいという点と、安価なアウトバウンドの転送料のコストがベストマッチしています。

アプリケーション開発では開発者がクイックに負荷試験できる状況が大事

岡本:Linodeを使うメリットの説明をしてもらう間に、起動できたみたいなのでログインしますね。

これでもう全部、k6も入っているし、Grafanaもひととおり入っている感じです。これを3000番ポートにつなぐと、もうGrafanaが準備されていて、先ほどのセットアップ時に出たadminとパスワードで、ログインできます。

GrafanaのダッシュボードもStackScriptによって全部用意されていて、こんな感じ。今まだ負荷試験をやってないのでデータは出てないんですが、ここでちょっと負荷試験を軽くやってみようかなと思っています。

まずk6というJavaScriptで、負荷試験のシナリオを書くことになっているので、一番シンプルなこんな感じのテストシナリオのスクリプトを書きます。本当にもうGETしてSleep1秒で寝るみたいなやつですね。これを先ほどのSock ShopというWebアプリケーションに負荷試験したいので、そのトップページをシナリオに組み込んで、ここから負荷試験をいよいよしていきます。

「仮想ユーザーを何人ぐらいにしますか?」というところは、300人ぐらいにして一気に先ほどのSock Shopに負荷をかけたいと思います。

負荷がかかると、ほぼリアルタイムで、こういうふうにレスポンスタイムの最大値であったり、何秒ぐらいピークで経っているかが可視化されていくわけですね。

ここまでで約10分、慣れれば10分かかりません。やはり負荷試験はいろいろ準備が面倒くさいかなと思いがちですが、もちろん超々大規模な負荷試験する時は分散させなきゃいけないのでいろいろ(設定とかも)あるんですが、アプリケーション開発の最中で、クイックに開発者が負荷試験できるような環境をサクッと作りたいこともよくあるんじゃないかと思っていて。

こうやってLinodeを使えば、本当に5分ぐらいでパーッと負荷試験の環境ができるので、ちょっと自分の作ったサービスに軽く負荷をかけたらどういう挙動をするかを見てみようとか、そういうのができるかなと思っています。ちょっと時間を押しちゃってますが、私からのデモは以上になります。

佐藤:ありがとうございます。私もk6は知らなかったんですが、けっこうサクッと作れたんで、私でもできそうだなっていう感触でした。とてもわかりやすいデモでした。

LinodeのKubernetesエンジンのTerraformを紹介

佐藤:私からは、負荷試験というよりは、ちょっとTerraformの話を中心にお話ししたいなと思います。

先ほどは自動化をするためにStackScriptを利用していましたが、StackScript以外に、現在主流のテスト構築方法は何かというと、まあTerraformになるのかなと思います。

もちろんLinodeは、すべてのサービスがTerraformに対応していまして、データベースだったりとかDNSですね、あとはインスタンスを作るとか、ロードバランサー作る際にも対応しています。

もう1つのやり方としては、LinodeはKubernetesクラスタを立ち上げることができますので、Kubernetes上でクラスタを組んで、Locustという負荷試験サービスを行うという構成を組むこともできます。

こちらを実際に構築するとなると、先ほどと似たような手順になってしまうので、Terraformの紹介を兼ねてお話ししたいと思います。

Terraformは、私のほうでいくつかデモを作ってまして。例えばWebサーバーを立ち上げるためのTerraformのコードだったり、WordPressを1台立ち上げるためのTerraformだったり、マネージドDBを作ったり、あとはKubernetesを立ち上げたり、AkamaiのCDNをフロントにしてLinodeのオブジェクトストレージをバックエンドにして静的サイトを作るTerraformだったりを、GitHubで公開しています。今回はその中で、LinodeのKubernetesエンジンのTerraformを紹介していきたいと思います。

構築はそんなに難しくはなくて、LKEのファイルを見る限り、シンプルかつ本当にクラスタを立ち上げるだけなので、リソース宣言してKubernetesのバージョンを言って、名前を決めて、リージョンを決めて、タグを決めて、何台立ち上げるかを決めるだけです。Kubernetesのクラスタを作るのに、これしかスクリプトは書かなくてよいです。

今回はターミナルから簡単に宣言を実行してみます。ちょっと編集しますね。例えばvariablesの変数の中のKubernetesの台数、今回は3台で起動したいと思います。インスタンスタイプを決めないといけないので、インスタンスの一覧をCLIツールであるLinode-CLIを利用して確認してみます。linode-cli linodes typesと入力することで、起動できるインスタンスの種類が一覧化されて確認できます。

けっこうサーバーはいっぱいあるんですが、きれいな表になりました。今回は、せっかくなので一番でかい専有CPUのインスタンスであるg6-dedicated-64を3台上げてみます。 vimでvariable.rfにインスタンスタイプを入れて、Terraformでapplyすると、あとはクリエイトが走ります。ここで、画面をダッシュボードに戻しまして。私の環境であるKubernetesクラスタがあります。今トータルメモリがものすごいですね、192CPUの1TB超えメモリのクラスタが3台上がりました。

というところで、今3台起動中という感じです。こういう、どでかいインスタンスで負荷試験をかけることが可能です。

Kubernetesは、こんな感じで簡単に起動できて、あとはクラスタのエンドポイントが表示されるのと、ここにKubeconfigが出るので、このコンフィグをダウンロードすれば、Kubernetesの操作が可能になります。

正直なところ、素のKubernetesしか上がらない感じなので、特になんかすごく機能があるかという感じでもないんですが、簡単にKubernetesを始められますし、しかもここに “Upgrade HA” ってあります。

今、コントロールプレーンはシングル構成なので、無料です。SLA99.99パーセントにしたいんであれば、60ドル払ってマルチクラスタにしてくださいねという感じになってます。つまり、Kubernetesのコントロールプレーンは、基本的には無料です。本番環境で使いたいんであればHA構成にしましょうね、というかたちです。なので、シングル構成でKubernetesを使う時に基本的にかかるのは、ここに起動したインスタンスの費用だけ、という感じですね。

特に追加料金がかからないところがいいところです。このように、Linodeはどのサービスをとっても、けっこうコスト面では親切設計になっています。

これを起動して構築すると、また10分ぐらいかかってしまって時間を押してしまうので、私のKubernetesの紹介は、このぐらいにしておきたいと思います。

情報技術ブログの紹介

というところで、これでデモのパートは終わって、資料に戻ります。

Linodeのユースケースはいろいろ想定できると思いますけど、インフラ費用を抑えられるというところと、コンピューティングリソースが必要なワークロードでもコストを抑えられるところ。ただ、やはり現状、用意されているサービスのバリエーションは多くないので、しっかりとターゲットを絞って利用してもらえれば、大きなメリットを得られると思います。

あとは、Qiitaの記事でも、AkamaiとかLinodeのタグで検索してもらえると、アカマイの人がけっこういっぱい書いているので、というか私がいっぱい書いているんですけど、ぜひ参考にしてほしいと思います。

というところで、Akamaiでは、今までは、クラウドコンピューティングとか、一般のアプリケーション開発者とのリレーションに、あまり積極的ではなかったところがありましたが、今後は、日本でも開発者になじみやすいように、Qiitaだったり、今回のようなConnpassだったり、開発者向けコミュニティの機会などに協賛したりして、どんどん情報発信をしていきたいなと思っているところです。

といったところで、ここで、いったん参加者からのご質問を見てみたいと思います。

現状Linodeを立ち上げられるインスタンスのOSはLinuxのみ

佐藤:(コメントを見て)「立ち上げられるインスタンスのOSはLinuxのみでしょうか。他のクラウドではWindows、Mac、その他OSのインスタンスが立てられますが、Linodeではいかがですか?」というところですが、Linodeは現状、基本的にはLinux系のOSしか上がりません。

「Create linode」のボタンを押して、Distributionの選択ボックスを見てみると、CentOSだったり、あとはDebian、Ubuntu、Fedoraなどですね。これらは起動できますが、Windows、Macなどの予定について岡本さん、なにか知っていますか。

岡本:いやー、ちょっとわからないですね。当分Linuxだけだと思いますが、すみません、予定はわからないですね。

佐藤:現状は、Linuxというところでご承知おきください。

日本語サポートが用意される可能性は高い

佐藤:次の質問です。(コメントを見て)「日本語での問い合わせサポートは今後検討していますか?」これ、私も内部でケースを挙げた気がしますが、現状はなかったと思います。岡本さん、ここもいかがですか?

岡本:日本語のサポートに関して、まだ予定は決まっていませんが、やはり日本のお客さまに使っていただく上では必須であることを重々理解しているので、今は英語だけですが、おそらくどこかのタイミングで用意される可能性が高いんじゃないかなと個人的には思っています。

インフラのコード化はTerraformがおすすめ

佐藤:続いては、「ブラウザからコンソールを触れるのはいいですね」というご感想ですね。プロキシがあって、直接SSHできない環境からはこのようにブラウザからコンソール操作ができるのは。私も確かに便利かなと思いました。

佐藤:続いて、「インフラのコード化は可能ですか?」というご質問です。

先ほどお見せしたTerraformが一番便利なインフラのコード化の手順で、あとはCLIも用意しているので、bashにCLIによる制御を書いて簡単なコード化もできます。私はTerraformをおすすめしたいと思います。

Linodeとの連携シナリオのアイデアは?

佐藤:次の質問です。「AkamaiのCDNのサービスを使っていますが、すぐに使えそうなLinodeとの連携シナリオのアイデアはありますか?」

やはりオブジェクトストレージをオリジンとしたAkamai CDN経由での(動画やアップデートファイルなどの)静的コンテンツの配信はすぐできるのかなと思います。例えば、現在AWSのS3を使っている場合、LinodeのオブジェクトストレージはAWS互換のAPIを持っているので、AWSのコマンド等もそのまま使ってコンテンツコピーもできます。これが一番簡単なシナリオというか、アイデアになります。

岡本:あとはあれですかね。私もQiitaで記事で書いているので、もしかしたらご存じかもしれませんが、Akamaiをお使いであればリアルタイムのログ配信のDataStream 2という機能があります。

このログを可視化できる「Kibana」とかを10分で立ち上げられるStackScriptを用意しています。今Akamaiをお使いの方は、やはりログをリアルタイムに見られたらいろいろ便利かなと思うので、ぜひAkamaiのログの可視化にも使ってみてください。

佐藤:ありがとうございます。

英語のハードルさえ乗り越えれば手厚いサポートが受けられる

佐藤:続いてのご質問です。「負荷試験以外にLinodeが適応しているケースありますか?」というところですが、こちらは先ほどもちょっと会話をしましたが、「インフラ費用を抑えられる」というところと「サービスの種類がシンプルなのでそれに適したかたちでシステムを構築できること」が大前提になるかなと思います。

続いてのご質問です。「チャットやメールで問い合わせできますか? 英語だとそのほうがやりやすいです」(24時間対応で)チャットやメールで問い合わせが可能です。またケースの問い合わせの場合、Webブラウザ上でケースを開くという選択ができます。Webブラウザから問い合わせフォームがあって、そこでやりとりをすれば、きちんとエビデンスも残ります。私も英語で何回かやりとりしましたが、機械翻訳を使った拙い英語でも伝わったので、特に心配する必要はないかなと思います。

岡本:ここに関して、もし英語でもかまわないのであればすごくおすすめです。Linodeは海外で開発者サポートの評判がとてもいいんですね。サポートエンジニアがすごく優秀で、すごく親身になって相談に乗ってくれます。

私も社員であることを特に言わずに問い合わせをしたことがあるのですが、詳しい人がすぐ出てきてくれてすごく丁寧に対応してくれるので、英語のハードルを乗り越えられるのであれば、すごくよいサポートが受けられるという印象があります。

Linodeの課金は1時間単位

佐藤:次の質問です。「何時間単位で課金されますか?」。Linodeは1時間単位の課金です。

岡本:ここ短くしたいですよねー、へへ(笑)。使い方にもよりますけど、1時間はちょっと長いですよね。

佐藤:そうですね。ちょっと長いですね。個人的には1分が希望ですね。

岡本:そうですね、1分。

佐藤:ちょっと内部で要望を上げましょうか。

岡本:あはははは(笑)。そうですね。

検証環境等でも100ドルあればLinodeの使用が可能

佐藤:最後に、「Akamai Meetup」は、Connpass上でこれからも継続していく予定ですので、まだ参加されていない方、グル―プのメンバーになっていない方にもご紹介の上、今後とも参加頂ければと思います。Linodeの話題も取り上げていきます。参加者には、$100分のLinodeのトライアルクーポンも用意しています。また、Akamaiとの連携シナリオや、技術者向けの情報も発信していきたいと思っています。

というところで今回は以上とさせていただきたいと思いますが、岡本さん、最後になにかありますか?

1年後ぐらいに「ただのIaaSじゃないぞ」というところを見せたい

岡本:そうですね。たぶん今日見た方は、「Akamaiは安くてシンプルなLinodeというIaaSを買収したんだな」という印象を持たれたんじゃないかなと思っています。それはそのとおりでぜひ使っていただきたいのですが、一方で世界中に超分散のCDNを持った会社がこういった会社を買収するのにはやはり意味があります。

今日時点でのLinodeは“安い”ところが売りですが、私たちもいろいろ考えているので、「ただのIaaSじゃないぞ」というところを1年後、2年後にはお見せできたらいいなと思っています。ぜひ今後も注目していただければなと思います。

佐藤:ありがとうございます。というところで、本日の「Akamai Meetup」第2回目は終了とさせていただきたいと思います。ご視聴いただきありがとうございました。