銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Radiusを知る(1)

Microsoftから発表された「Radius」。ネットワークのプロトコルとして知られているものと同名ですが、別物です。いったいこれが何か調べてみたいと思います。

cloudblogs.microsoft.com

まずは、このブログを読みながら何を目的としているのか見てみます。

With features like Recipes and Connections that standardize deployments and automate resource provisioning, Radius provides a centralized toolset for developer and operator teams to effectively collaborate.

(参考訳)Radius は、デプロイメントを標準化し、リソース プロビジョニングを自動化するレシピや接続などの機能を備えており、開発者チームとオペレーター チームが効果的に連携するための一元化されたツールセットを提供します。

Radius is open-source and multi-cloud from the start, allowing for applications that can be written once and, using the same toolset and workflows, deployed to any cloud or on-premises infrastructure.

(参考訳)Radius は最初からオープンソースでマルチクラウドであるため、アプリケーションを一度作成すれば、同じツールセットとワークフローを使用して、任意のクラウドまたはオンプレミスのインフラストラクチャに展開できます

クラウドネイティブなアプリケーションの実行基盤として例えばkubernetesがあります。コンテナ化したアプリを動かすだけであれば、kubernetesのリソース定義のYAMLで記述できますが、クラウド上の別のサービスと連携しようとするとクラウドサービス側のリソースの定義も行う必要がでてきます。これらを標準化しようというように読めました。実際には、IaC言語としてTerraformやBicepをサポートするようです。

最初のリリースでは次の3つをターゲットとしていると書いています。

  • シンプルで一貫したアプリケーション開発エクスペリエンス
  • レシピと環境
  • アプリケーション グラフ

それぞれ具体的に次のようなことができると書かれています。

例えばMongoDBを使うようなアプリの場合、ローカルではMongoDBのコンテナ、Azure上ではAzure CosmosDB、AWS上ではAWS DocumentDBを参照するように構成できます。これらはレシピと呼ばれるもので定義しますが、運用者はこのレシピを定義する際、例えば2つのノードと2つのレプリカが必要だと記述することができます。開発者は定義されたレシピを使うことでMongoDBのサービスをアプリケーションで参照できます。 Radiusではアプリケーション群とそれらが参照するサービスをリストではなく、グラフとして依存関係を把握することができます。

さて、なんとなくわかったとことで手を動かして確認したいと思います。RadiusのGetting Startedのページを試してみます。無償範囲のGitHub Codespaceで試せますが、アプリを動かす環境としてkubernetesクラスターが別途必要で、Codespaceで動かすのはradとよばれるコマンドツールと定義ファイルの編集となります。

docs.radapp.io

また、現時点でRadiusを動かせるプラットフォームはkubernetesのみですが、将来的には拡張される予定になっています。

Codespaceを起動して、まずはkubernetesクラスターに接続できるようkubectlコマンドを設定しておきます。今回はAKSを使いましたが、azコマンドはインストールされているのでazコマンドでkubectlを設定しておきました。

次にradコマンドをインストールします。

作業用フォルダに移動し、rad initコマンドで初期設定をします。

これで、デモ用のアプリがデモ用のコンテナを参照している状態で作成されています。app.bicep ファイルがアプリの定義でRadiusのリソースと呼ばれています。リソースの定義は今のところBicepのみがサポートされています。

docs.radapp.io

そのままrad run app.bicep コマンドで実行します。

Codespaceの場合ポートフォワーディングの設定が自動的にされてアプリにアクセスできます。

いったんアプリを終了させて、Redisをリソースに追加することにします。RedisやMongoDB、などアプリに必要なインフラストラクチャーの展開を自動化した定義ファイルをリソースとよび、デフォルトでいくつか提供されています。レシピの定義はBicepもしくはTerraformがサポートされていますが、今のところレシピの定義を見たり作成したりする必要はありません。手順に従ってリソース定義ファイルを更新して、アプリを起動するとRedisが追加されて起動します。

rad app connectionsコマンドで、どんなリソースがどのような依存関係で定義されているか確認することができます。