ここからは、どのようにして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'
}
}
]
}
}
