本日、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 は複雑なマイクロサービス環境での開発をシンプルにしてくれます。ぜひお試しください。皆様からのフィードバックもお待ちしています。