How-To: Model any resource with an extender
This guide will walk you through how to use an extender in an application to model resources beyond those currently built into Radius. These might be abstractions or resources unique to your organization, or resources that don’t yet have a native Radius type.
Prerequisites
Step 1: Register an extender Recipe
In this guide you will leverage a Recipe to deploy backing infrastructure for your resource. Begin by registering the ’extender-postgresql’ Recipe in your environment:
rad recipe register postgresql --resource-type "Applications.Core/extenders" --template-kind bicep --template-path "ghcr.io/radius-project/recipes/local-dev/postgresql:latest"
Step 2: Define an extender
Open a new file named app.bicep
and define an extender:
extension radius
@description('The ID of your Radius environment. Set automatically by the rad CLI.')
param environment string
@description('The ID of your Radius application. Set automatically by the rad CLI.')
param application string
resource extender 'Applications.Core/extenders@2023-10-01-preview' = {
name: 'postgresql'
properties: {
environment: environment
application: application
recipe: {
name: 'postgresql'
}
}
}
Step 3: Add a container
Add a container to your app.bicep
file, accessing the extender’s properties and secrets:
resource demo 'Applications.Core/containers@2023-10-01-preview' = {
name: 'demo'
properties: {
application: application
container: {
image: 'ghcr.io/radius-project/samples/demo:latest'
env: {
POSTGRESQL_HOST: {
value: extender.properties.host
}
POSTGRESQL_PORT: {
value: extender.properties.port
}
POSTGRESQL_USERNAME: {
value: extender.properties.username
}
POSTGRESQL_PASSWORD: {
value: extender.listSecrets().password
}
}
ports: {
web: {
containerPort: 3000
}
}
}
connections: {
postgresql: {
source: extender.id
}
}
}
}
Step 4: Deploy the app
Deploy and run the app using the following command:
rad run app.bicep -a demo
You should see your application deployed:
Building .\app.bicep...
Deploying template '.\app.bicep' for application 'demo' and environment 'default' from workspace 'default'...
Deployment In Progress...
Deployment Complete
Resources:
demo Applications.Core/containers
extender Applications.Core/extenders
Starting log stream...
demo-bb9df8798-b68rc › demo
demo-bb9df8798-b68rc demo Using in-memory store: no connection string found
demo-bb9df8798-b68rc demo Server is running at http://localhost:3000
demo-bb9df8798-b68rc demo [port-forward] connected from localhost:3000 -> ::3000
Step 5: Test the app
Visit https://localhost:3000 to see your app running. You should see the environment variables and secrets you referenced in your container.
Cleanup
To clean up the resources created in this guide, run:
rad app delete demo -y
Feedback
Was this page helpful?
Glad to hear it! Please feel free to star our repo and join our Discord server to stay up to date with the project.
Sorry to hear that. If you would like to also contribute a suggestion visit and tell us how we can improve.