Azure Kubernetes Service 用 Dev Spaces を紹介

執筆者: Gabe Monroy (PM Lead, Containers @ Microsoft Azure)

このポストは、2018 年 7 月 9 日に投稿された Introducing Dev Spaces for AKS の翻訳です。

 

本日、Azure Kubernetes Service (AKS) 用 Dev Spaces のプレビューを開始しました。これは Kubernetes 用アプリケーションの構築やデバッグを簡素化する機能で、Azure でのみ使用できます。Microsoft Build では、Scott Hanselman が講演の中で、複雑なマイクロサービス環境にあるアプリケーションを Dev Spaces を使っていかにすばやくデバッグ、修正できるかをお見せしました。この記事では、Build の講演に参加できなかった方やステージ上でのあのハプニング (英語) に気を取られてデモに集中できなかった方のために、Dev Spaces ならではのメリットについて紹介したいと思います。

まず想像していただきたいのは、独自の構成とバックエンド サービスを持つ数十個のコンポーネントで構築された複雑なマイクロサービスのバグ修正を初めて行う場合、さまざまな準備作業を行う必要があるという点です。具体的には、運用環境をシミュレートするローカルの開発環境を構築するために、IDE をセットアップし、ツール チェーン、コンテナー化されたサービスの依存関係、ローカルの Kubernetes 環境を構築し、バックエンド サービスをシミュレートする必要があります。開発環境をセットアップだけでこれだけの手間がかかります。つまり、バグの修正にはもっと日数がかかるということです。

このような場合に便利なのが、Dev Spaces と AKS です。

開発環境を数秒でセットアップ可能に

Dev Spaces は、IDE と Azure CLI を用意するだけで使用できます。AKS 内部に Dev Space を作成するだけで、他のトラフィック フローを妨げることなく、マイクロサービス環境内でどのコンポーネントに対しても安全に作業を行うことができます。

 azds space select --name gabe

Dev Spaces がバックグラウンドで Kubernetes の名前空間を作成し、これを IDE 内でアクティブに開発されているマイクロサービスのみが使用します。Dev Spaces を使用すれば、開発環境のセットアップに何日もかかることなく、数秒ほどで完了できます。

コードを何度でも即座に変更可能

環境のセットアップが完了したら、次はコーディングです。マイクロソフトでは、コーディングを開始してからバージョン管理にプッシュするまでの工程を「内部ループ」と呼んでいます。コンテナーと Kubernetes を使用する場合、コンテナー イメージのビルドを待機したり、レジストリにプッシュしたり、クラスターにデプロイしたりするなど、コーディング プロセスの進行に著しく時間がかかってしまうことがあります。一方、Dev Spaces はコード同期テクノロジを備えており、IDE と AKS 内部で実際に実行されているコンテナーが同期されるため、IDE で変更した内容が数秒で AKS クラスターにプッシュされ、内部ループが迅速化されます。

コンテナーをリモートからデバッグ

ソフトウェア デバッガーを使用したことがある方なら、コーディング中にブレークポイントを設定したり、コール スタックを検査したり、メモリ保持期間を変更したりする際にデバッガーがいかに便利かご存知かと思います。しかし、コンテナーをリモートからデバッグする場合は、安定性に欠け、構成も難しくなります。実際、コンテナー ベースのマイクロサービスを扱っている開発者の多くは、print デバッグに頼らざるを得ません。しかし、特にさまざまなサービスが複雑に絡み合う状況での変更は、面倒で時間もかかります。Dev Spaces ならサービス メッシュ テクノロジを革新的な方法で利用し、簡単なホスト名プレフィックスを使用するだけであらゆるサービスで個別に作業することができます。

たとえば、contoso.com で実行されていて、結果を返すまでに 10 個のマイクロサービスを経由するサービスを例に挙げると、Dev Space で「gabe」という名前空間を作成した場合、次の URL が使用されます。

gabe.s.contoso.com

この特殊な URL プレフィックスを使用すると、アクティブに開発されている任意のサービスを経由するように、トラフィックがルーティングされます。このため、他のサービスのインスタンスを変更したり、他の通常のトラフィック フローに影響を与えたりすることなく、IDE でサービス 3 ~ 7 の間にブレークポイントを設定することが可能なので非常に便利です。今回 .NET Core と Node.js でリモート デバッグがサポートされ、今後さらに対応言語が増える予定です。

こちらのドキュメントで詳細をご確認いただいたうえで、Dev Spaces をぜひお試しください。Visual Studio や Visual Studio Code の開発フローの一部として Azure Dev Spaces を使用する場合は、こちらのブログ記事 (英語) をご確認ください。

新規アプリケーションのブートストラップも簡単に

Kubernetes には高い俊敏性、信頼性、スケーラビリティを備えるという特長があり、Kubernetes に関連するコミュニティやオープン ソース エコシステムも、開発者の皆様から好評を得ています。Kubernetes を使用する場合、必ずしも YAML マニフェストや Dockerfile は必要ありません。Dev Spaces にはアプリケーション スキャフォールディングに対応しているというメリットがあるため、新規アプリケーションを簡単にブートストラップできます。

 azds prep

このコマンドを実行するとアプリケーションの種類が検出され、Dockerfile、Helm Chart、その他のメタデータがソース ツリーに追加されます。これにより、詳細を細かく学習することなく簡単に Kubernetes 用アプリケーションをコンテナー化、パッケージ化できます。スキャフォールディングはソース コードの一部となるため、適切に構成できます。また、アプリケーションを開発環境から運用環境に移行する場合にも、スキャフォールディング アセットを変更することで対応できます。

オープン ソース テクノロジの活用

Dev Spaces は Azure でのみ使用可能ですが、スキャフォールディングはオープン ソースの Draft プロジェクト (英語) に基づいて構築されているため、あらゆる Kubernetes クラスターで内部ループ エクスペリエンスを使用できます。今後、Draft を使用しているプロジェクトと Dev Spaces の間で相互に切り替えることができるようになる予定です。Azure で Dev Spaces の改良を進めていくことで、Kubernetes コミュニティ全体にとってメリットのあるイノベーションがオープン ソースの Draft プロジェクトにさらに導入されていくことをご期待ください。

この 1 か月は、Azure チームにとって嬉しいことの連続でした。AKS の一般提供が開始され、ここ 30 日の間に 80% 以上の成長が見られました。AKS は現在 12 のリージョンで提供中で、そのうち米国東部 2 と東日本では 2 週間前に一般提供が開始されました。私は数週間にわたって世界中のお客様に Dev Spaces をお見せしてきましたが、その反応は非常によく、嬉しい限りです。Dev Spaces は複雑なマイクロサービス環境での開発をシンプルにしてくれます。ぜひお試しいただければ幸いです。皆様からのフィードバックもお待ちしています。