ここからは、どのようにしてRadiusでアプリケーションの定義をしていくかというHow-to guideを読み進めていきます。まずはRadiusにおけるアプリケーションについてです。
Radius アプリケーションとは、すべての「もの」を 1 つにまとめた定義です。具体的には、サービス、依存関係、結びつきといったものです。定義したアプリケーションを展開したり管理したりすることができます。
Radius アプリケーションはクラウドやプラットフォームに依存しないように設計されているので、Radius がサポートする任意のクラウドまたはプラットフォームに展開できます。サンプルで試したように、開発者は依存関係 ( Redis、SQL、Dapr など) を定義でき、運用者はそれらの依存関係を適切なクラウド リソースに対応できるための環境とレシピを定義できます。このとき、開発者は具体的なクラウドリソースの実態を意識せずに、依存するサービスを利用することができます。
さて、現状ではRadiusがサポートするのはKubernetesです。Raiusアプリケーションで定義したリソースに対して、どのkubernetesリソースが生成されるかの対応関係はここに記載されています。例えばApplications.Core/containers
に対してはapps/Deployment@v1
が生成され、ポートが定義されている場合はさらにcore/Service@v1
が生成されます。
また、デフォルトではRadiusアプリケーションに対するkubernetesのリソースは`という名前空間に作成されますが、アプリケーション定義の
extensions属性で
kubernetesNamespace`を指定することで指定した名前空間に作成するようにできます。
さらに、Radiusのリソースに定義したラベルとアノテーションをkubernetesのラベルとアノテーションとして付与することができます。
ドキュメントにも記載されている通り、このようなRadiusアプリケーションを定義すると、確かにラベルとアノテーションがdeploymentに付与されていることがわかります。また、Radiusのapplicationで定義されたラベルがcontainerにも伝搬していますが、同じキーの場合はより具体的なcontainerのラベルで上書きされていることもわかります。
import radius as radius @description('Radius environment ID. Set automatically by Radius') param environment string resource app 'Applications.Core/applications@2023-10-01-preview' = { name: 'myextensionapp' properties: { environment: environment extensions: [ { kind: 'kubernetesNamespace' namespace: 'extension-demo' } { kind: 'kubernetesMetadata' labels: { 'team.key1': 'appValue1' 'team.key2': 'appValue2' 'team.contact.name': 'Operations' 'team.contact.alias': 'ops' } annotations: { 'prometheus.io/port': '9090' 'prometheus.io/scrape': 'true' } } ] } } resource frontend 'Applications.Core/containers@2023-10-01-preview' = { name: 'frontend2' properties: { application: app.id environment: environment container: { image: 'ghcr.io/radius-project/tutorial/webapp:edge' } extensions: [ { kind: 'kubernetesMetadata' labels: { 'team.key2': 'containerValue2' 'team.contact.name': 'Frontend' 'team.contact.alias': 'frontend-eng' } } ] } }