Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Azureクラウドネイティブスタックで、すばやく最大限の価値を提供――サービス選択のポイントは? 【デブサミ2019】

【15-C-2】デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューション

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2019/03/20 12:00

 マイクロサービスや分散アプリ、DevOps、コンテナサービス、サーバレスなど、アーキテクチャや技術トレンドは刻々と変化し、エンジニアに求められる選択肢は多岐にわたっている。その一方で、Time to Market(サービスがリリースされるまでの時間)はどんどん短くなっているため、悩んでいるエンジニアも多い。そこでそれらの悩みを解決するCaaSやFaaS、DevOpsなど、Microsoft Azureが提供する、クラウドネイティブアプリケーション構築のためのプラットフォームについて、日本マイクロソフト Azure テクノロジーソリューションプロフェッショナルの川崎庸市氏が解説した。

日本マイクロソフト株式会社 Azureテクノロジースペシャリスト 川崎 庸市氏★肩書きはスライドを参考にしました。ママでよろしいでしょうか★
日本マイクロソフト株式会社 Azure テクノロジーソリューションプロフェッショナル 川崎 庸市氏

マネージドサービスの活用で「Time to Market」を実現する

 コンピューティングの進化とともに、アーキテクチャのトレンドは変化してきた。2010年からクラウドの時代となり、分散やDevOps、プラットフォームベースといったキーワードが注目を集め、アーキテクチャはモノリシックからマイクロサービスへと移行している。

 こうした変化の背景にあるのが、「Time to Market」、つまり「すばやく、効率的かつ安定的に市場に価値を届けるという目的を達成するためだ」と川崎氏は説明する。クラウドネイティブも、切り口は違えど目指すところは同じで、「Time to Market」を実現するためだという。経済産業省の調査によると、人口減少に伴い、IT関連産業への入職者数は2019年を減少していくという。だからこそ、「クラウドネイティブの技術を使って、効率的かつ安定的に市場に届けることが重要になる」と川崎氏は言う。

 IaaSやCaaS、PaaS、FaaSなど、現在、さまざまなマネージドサービスが登場している。数多くの選択肢を前に、どう選べば良いのか、頭を悩ませているエンジニアも多い。川崎氏は「各サービスの抽象度を意識して、選択してほしい」と語る。

 マネージドサービスにおいて、抽象度と相反する価値が自由度である。ベンダーの管理レベルが下がると自由度が上がるが、ベンダーの管理レベルが上がると、それだけ自由度は低くなり、抽象度は上がる。「ベンダーの管理レベルが上がるメリットは、いろいろなベストプラクティスやテクノロジーを使って管理が行われるため、開発やデプロイの迅速性、生産性が上がることだ」と川崎氏。もちろん、自由度が低く、ブラックボックスが増えるというデメリットはある。「学習カーブや制約度合い、アーキテクチャ・運用方式の変更最適化に伴うコストを考慮する必要はあるが、高付加価値を求めるのなら、CaaSやPaaS、FaaSを選択するのがおすすめだ」と言い切る。

 ではマイクロサービスの開発運用の複雑さをシンプルにするにはどんなプラットフォームを活用すれば良いのか。マイクロサービスアーキテクチャでは、複数のコンテナを連携する必要が生じるため、それを管理するオーケストレーション機能が必要になる。コンテナ・オーケストレーターの事実上の標準が、Kubernetesである。これは昨年12月に開催されたCNCFの主催イベント「KubeCon + CloudNativeCon North America 2018」で、サーベイに参加した企業の58%がKubernetesを本番環境で利用しているといった調査結果からもわかる。

 Kubernetesは多くのメリットをもたらす半面、自前でクラスタ構築・運用管理をするのはなかなか難しい。本番運用において欠かせないマスターの可用性設定などはその代表例だ。ノード、ストレージ層の考慮、etcdのデータバックアップや同期、API Serverのバランシング、その他のコンポーネントとの協調など、さまざまな作業が必要になる。「こういった作業はオフロードしたいはず。そこでぜひ、使ってほしいのがAzure Kubernetes Service(AKS)だ」と川崎氏は力強く語る。

AKSはKubernetesクラスタの構築や運用管理の複雑さをオフロードする
AKSはKubernetesクラスタの構築や運用管理の複雑さをオフロードする

 「Time to Market」を実現するサービスはAKSだけではない。AzureサービスにはAKSのほか、Visual StudioやVisual Studio Code、Azure DevOps、Azure Container Registry(ACR)といったサービスがある。これらのサービスを活用することで、「コンテナアプリのデリバリサイクル全体を効率化・簡略化できるようになる」と川崎氏は語る。

 例えばAzure DevOpsは次の通りさまざまな便利な機能を持つ。チームの垣根を越えて作業を計画、追跡や相談したりできる「Azure Boards」、あらゆるプラットフォーム、クラウドに対応したCI/CDを使用して、ビルド、テスト、デプロイができる「Azure Pipelines」、プライベートGitリポジトリの入手により、プル要求と高度なファイル管理で、優れたコードを協力してビルドできる「Azure Repos」、手動の探索的テスト ツールを使用することで、テストと公開が自信を持って行える「Azure Test Plans」、パッケージを作成、ホストした後、チームで共有、ワンクリックでCI/CDパイプラインに成果物を追加できる「Azure Artifacts」などがその代表例だ。

 さらにAzure DevOpsではこれらの機能のうち、ある程度の部分をテンプレート化して提供している。それが、「Azure DevOps Projects」である。「テンプレートはGitHubに載せている。興味のある人はぜひ、使ってほしい」(川崎氏)

オブザーバビリティを実現し、データストアに伴う複雑化を解決するサービス

 高まる抽象化、アプリケーションのマイクロサービス化に伴い、プラットフォームだけではなくアプリを含めた全体ステートの把握、つまりオブザーバビリティ(可観測性)が重要になっている。「可観測性はモニタリング、ロギング、トレーシング、ビジュアライゼーションといった要素で構成され、それぞれを実現するツールも登場している。しかし、オブザーバビリティを実現するには、ツールを組み合わせる必要があるため、当然複雑なものとなる。それに伴うコストなどが増大してしまう問題がある」と川崎氏。

 こういったオブザーバビリティに関する問題を解決してくれるのが、Azure Monitor for containersだ。「Azure Monitor for containersを有効化することで、ログやメトリックの収集を自動で行うだけではない。リテンションの管理、ログの検索なども自動で行われるため、オブザーバビリティのために余分なコストをかける必要がなくなる。本業のビジネスに集中したい人にとっては、欠かせないモニタリングツールだ」と川崎氏は言う。

 クラウドネイティブになると、データストアの活用も重要になる。なぜなら、コンテナアプリケーションとデータのライフサイクルは異なるからだ。コンテナはデプロイ単位でライフサイクルが終了する。つまりコンテナ起動中に保持したデータは消える。したがってデータを永続化する必要があり、その対応策としては、次の2つが考えられる。1つはコンテナのホストOS側にデータを保存する。もう1つは外のストレージやデータストアに保存する方法だ。

 では、Kubernetesでのステートフルワークロードに対応するにはどうすれば良いか。川崎氏のおすすめは、弾力性や回復性をネイティブに備えているPaaSを利用することだという。「PaaSを利用することで、デプロイメントや運用管理の単純化を実現できる」と川崎氏。主にステートレスワークロードをAKSで展開し、ステート・永続化データ対応はステートフルワークロード専用PaaSと連携するという、ワークロードに応じた良いところ取り戦略が得策だというのである。

 もう1つ、広域災害対策を意識するのであれば、データをKubernetesに置かず、外に持つ方法が有用だ。「詳しくは『しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識』という書籍を読んでほしい」と語り、クラスタレス、ノードレスコンテナの話題へと移った。

 通常、Kubernetesを動かすときはクラスタの作成が必要となる。しかし「Azure Container Instances(ACI)」であれば、クラスタは必要なく、コンテナ1つから使える。ACIはマイクロソフトがウォームアップしたサーバインスタンスを用意しており、コンテナを動かすために必要なメモリの量を投げかけるだけで、高速にスタートアップできる。

 「ロードテストや大量エンコーディングなど瞬発的なものや、予測可能なバースト型のワークロードで使用することに適している」(川崎氏)

 またKubernetesクラスタから外部サービスをプラグインとして利用可能にするOSSプロジェクト「Virtual Kubelet」とACIを組み合わせることで、VMおよびACI上で動作するPodをシームレスに渡すKubernetesサービスを構築できる。つまりVirtual Nodeを使用したAKSクラスタからのACI実行が可能になる。

Vitual Nodeを使用し、AKSクラスタからACI実行する
Vitual Nodeを使用し、AKSクラスタからACI実行する

 これはHPA(Podを横にオートスケール)、VPA(PodのResource allocationをスケール)、CA(ノードの数をスケール)のほか、Virtual NodeのPodを外部メトリックに、横にスケールする「Virtual Node Autoscaler(名前がないので川崎氏が勝手に名付けたとのこと)」に応用できるという。

 例えば、Prometheus Metric Adapterを利用し、Virtual NodeのPodをメトリックに応じて自動スケールさせることができる。デモでは、Virtual NodeのPodを50個、手動スケールさせてその立ち上がりの速さとスケール能力のデモを実施し、その可能性を示した。

技術やアーキテクチャは適材適所で選択しよう

 最後はサーバレス(FaaS)について。FaaSは高度な抽象化、イベントドリブンで自動スケール、使った分だけ細かく課金できるといった特徴を持つ。そのため、FaaSは小さいコードやステートレス(毎回作って実行する)、短時間で終わる処理に向いている。「非常に大きなメリットが得られる適用領域がある」と川崎氏は次の例を挙げた。それがWebやモバイルアプリのバックエンド、大量統計情報のストリーム処理やアップロードされたファイル解析などのリアルタイム処理、Webbookによる疎な連携などだ。

 もちろん、ロングランニング処理、ステートフルな処理に弱かったり、複雑化しやすいといった問題もある。だが、FaaSにも新しいパラダイムが登場している。それがAzure Functions拡張機能で提供している「Durable Functions」だ。

 サーバレス環境でステートフル関数を記述できるプログラミングモデル。このモデルを使用すると、オーケストレーター関数を使用してステートフルワークフローを定義できるようになる。「Durable Functionsを使うと見通しが良くなり、読みやすい形で実現できるところがメリットだ」と川崎氏は紹介する。

Durable Functionsを使うと見通しが良くなり、可読性が上がる
Durable Functionsを使うと見通しが良くなり、可読性が上がる

 最後に、川崎氏は次のように語り、セッションを締めた。

 「技術やアーキテクチャを適材適所で選択して、最大限の付加価値を創造しよう。空いた時間を新たなイノベーションに使おう。何よりも楽しいことに費やしていこう」

お問い合わせ

 日本マイクロソフト株式会社

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5