diff --git a/.github/config/en-custom.txt b/.github/config/en-custom.txt index 0219f72fa..1124b63ae 100644 --- a/.github/config/en-custom.txt +++ b/.github/config/en-custom.txt @@ -423,6 +423,7 @@ manualScaling httpGet tcp BucketName +roadmap Balancer authSource mongodb diff --git a/docs/content/_index.md b/docs/content/_index.md index ec2f4f5c1..9226bb14a 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -10,7 +10,7 @@ weight: 1 {{< cardpane >}} {{< card header="**App-centric**" >}} -Teams [describe their application]({{< ref appmodel-concept >}}) services and relationships, rather than just a list of infrastructure. +Teams [describe their application]({{< ref application-graph>}}) services and relationships, rather than just a list of infrastructure. Screenshot of a Radius applications diagram {{< /card >}} @@ -41,7 +41,7 @@ Teams can offload the complexity of wiring-up applications and let Radius employ
- Connections logo + Connections logo Networking logo diff --git a/docs/content/author-apps/application/index.md b/docs/content/author-apps/application/index.md index e557fc2fa..8eb54f713 100644 --- a/docs/content/author-apps/application/index.md +++ b/docs/content/author-apps/application/index.md @@ -10,7 +10,7 @@ tags: ["applications"] ## Overview -An [application]({{< ref appmodel-concept >}}) is the primary resource that contains all of your services and relationships. +An [application]({{< ref application-graph>}}) is the primary resource that contains all of your services and relationships. ## Extensions diff --git a/docs/content/concepts/application-graph/application.png b/docs/content/concepts/application-graph/application.png new file mode 100644 index 000000000..1bb034547 Binary files /dev/null and b/docs/content/concepts/application-graph/application.png differ diff --git a/docs/content/concepts/application-graph/dashboard.png b/docs/content/concepts/application-graph/dashboard.png new file mode 100644 index 000000000..8ac73149b Binary files /dev/null and b/docs/content/concepts/application-graph/dashboard.png differ diff --git a/docs/content/concepts/application-graph/graph-automation.png b/docs/content/concepts/application-graph/graph-automation.png new file mode 100644 index 000000000..fa616e724 Binary files /dev/null and b/docs/content/concepts/application-graph/graph-automation.png differ diff --git a/docs/content/concepts/application-graph/index.md b/docs/content/concepts/application-graph/index.md new file mode 100644 index 000000000..ce937f54c --- /dev/null +++ b/docs/content/concepts/application-graph/index.md @@ -0,0 +1,82 @@ +--- +type: docs +title: Radius Application Graph +linkTitle: Application graph +description: Learn how the Radius application graph allows you to model your entire application +weight: 200 +--- + +## Radius applications + +Radius offers an [application resource]({{< ref "/author-apps/application" >}}) which teams can use to define and deploy their entire application, including all of the compute, relationships, and infrastructure that make up the application. Since the graph of relationships between deployed resources is much more descriptive than a basic list of resources, the Radius application graph can automate complex deployment tasks and enable rich visualization experiences. + +A diagram showing an application and all it's resources + +## Graphs are better than lists + +Within an application deployed with Radius, developers can express both the resources (_containers, databases, message queues, etc._), as well as all the relationships between them. This forms the Radius application graph. This graph is powerful because it allows Radius to understand the relationships between resources, and automate the deployment and configuration of your application. Plus, it allows you to visualize your application in a way that is more intuitive than a list of resources. + +A diagram showing the move from a set of infrastructure lists to a graph of resources + +## Automate your application deployment + +Because Radius now has all the relationships and requirements of an application, it can be deployed and configured automatically. Developers no longer need to specify all the identity, networking, or other configuration that is normally required, and operators don’t need to write custom deployment scripts. + +For example, if you want a container to read from an Azure Storage Account without using Radius, this normally requires creating managed identities, RBAC roles, identity federation, Kubernetes service accounts, and more. With Radius, developers can define a single connection from their container to a Storage Account, and Radius sets up all the required configuration automatically. + +A diagram showing a connection from a Radius container to an Azure storage account resulting in managed identities, role-based access control, and CSI drivers. + +## Self-documenting applications + +The Radius application graph also allows your application to be self-documenting, where developers and operators can query and reason about the same application definition. Instead of multiple views of logs, infrastructure, and code, Radius provides a single source of truth for your application. + +A mockup of a dashboard UI showing an application, its resources, and its connections + +> **Note:** A Radius dashboard is still on the roadmap, but in the meantime you can use the [Radius API]({{< ref api-concept >}}) to build your own visual experiences today. + +## Mine the app graph API + +The Radius application graph is also exposed as an API, allowing you to build your own visualizations, workflows, and more on top of Radius. Learn more in the [API docs]({{< ref api-concept >}}). + +For example, I can get the status of my `frontend` container, and get its definition and its connections to other resources: + +```bash +GET /planes/radius/local/resourceGroups/default/providers/Applications.Core/containers/frontend +``` + +``` +{ + "name": "frontend", + "type": "Applications.Core/containers" + "id": "/planes/radius/local/resourceGroups/default/providers/Applications.Core/containers/frontend", + "properties": { + "container": { + "image": "nginx:latest", + "env": {...}, + "ports": {...}, + }, + "environment": "myenvironment", + "application": "myapp" + }, + "connections": { + "backend": { + "source": "/planes/radius/local/resourceGroups/default/providers/Applications.Core/containers/backend", + }, + "storage": { + "source": "/planes/azure/subscriptions/ee3dbd5a-68b4-4eea-bc48-f064009e6ff9/resourceGroups/myrg/providers/Microsoft.Storage/storageAccounts/mystorage", + "iam": { + "kind": "azure", + "roles": [ + "Storage Blob Data Reader" + ] + } + } + }, +} +``` + +## Next step + +Now that you have an understanding of the Radius app graph, learn how you can deploy Radius applications to prepared landing zones with Radius Environments: + +{{< button text="Radius Environments" page="environments-concept" color="success" >}} diff --git a/docs/content/concepts/application-graph/list-to-graph.png b/docs/content/concepts/application-graph/list-to-graph.png new file mode 100644 index 000000000..bf6519803 Binary files /dev/null and b/docs/content/concepts/application-graph/list-to-graph.png differ diff --git a/docs/content/concepts/appmodel-concept/_index.md b/docs/content/concepts/appmodel-concept/_index.md index 224893588..e69de29bb 100644 --- a/docs/content/concepts/appmodel-concept/_index.md +++ b/docs/content/concepts/appmodel-concept/_index.md @@ -1,107 +0,0 @@ ---- -type: docs -title: "Radius application model" -linkTitle: "App model" -description: "Learn how to model your applications with the Radius application model" -weight: 200 -categories: ["Concept"] ---- - -## Deployable architecture diagrams - -Cloud-native applications are often designed and described using lines-and-boxes architecture diagrams as the starting point: - -Whiteboard diagram of an application and its components
- -These diagrams often include: - -1. Infrastructure resources, including databases, messages queues, API gateways, and secret stores -1. Services that run application code, such as containers. -1. Relationships between resources, like protocols, settings, and permissions - -The Radius app model provides a way for developers to translate human-understandable application diagrams into human-understandable application code. - -## Defining an Application - -The Radius application contains everything on an app diagram. That includes all the compute, data, and infrastructure. - -{{% alert title="πŸ“„ Application" color="primary" %}} -The largest circle you can draw around your resources where names have meaning. -{{% /alert %}} - -Whiteboard diagram of an application and its components
- -An application is defined as a top-level `resource app` in an infrastructure-as-code file: - -{{< tabs Bicep >}} - -{{< codetab >}} -{{< rad file="snippets/app.bicep" embed=true >}} -{{< /codetab >}} - -{{< /tabs >}} - -## Adding resources - -Currently, this example app is an empty shell and has no child resources defined. It's up to the user to define what they consider part of the app. Users can include both services (containers) and infrastructure resources (databases, caches, etc.). - -Diagram of available Radius resources
- -Each node of an architecture diagram maps to one resource. Together, an application's resources capture all of the important behaviors and requirements needed for a runtime to host that app. - -Updating our IaC file, this would look like: - -{{< tabs Bicep >}} - -{{< codetab >}} -{{< rad file="snippets/app-resources.bicep" embed="true" >}} -{{< /codetab >}} - -{{< /tabs >}} - -## Adding connections - -Once you define your application and the resources inside of it, you can define the connections between them. Connections are defined as: - -{{% alert title="πŸ“„ Connections" color="primary" %}} -A **logical** unit of communication between resources. -{{% /alert %}} - -The use cases for connections are flexible, and include features like: - -- Configuring role based access control (RBAC) between resources -- Passing resource information like connection strings, credentials, etc. to the consumer of a resource -- Configuring security policies between resources and runtimes - -### Injected values - -When a connection between two resources is declared, Radius injects resource related information into environment variables that are then used to access the respective resource without having to hard code URIs, connection strings, secrets, etc. into your application code. This is a form of *cloud-native service discovery* and makes it easy for you to decouple your application code from the environment where its deployed. - -These environment variables follow a naming convention that makes their use predictable. The naming pattern is derived from the name given to the connection and its type, which determines what values are required. This way the code that needs to read the values gets to define how they are named. For example, adding a connection called `myconnection` that connects to a MongoDB resource would result in the following environment variables being injected: - -```bash -# the connection string to the resource, e.g. 'mongodb://mongo:27017/mongo?authSource=admin' -CONNECTION_MYCONNECTION_CONNECTIONSTRING -# the type of connection, e.g. 'mongo-connector' -CONNECTION_MYCONNECTION_DATABASE -``` - -Each kind of connection defines values that are useful for communication. These could be URIs, connection strings, access keys, or anything that application code needs to successfully communicate. Refer to each [resource's reference documentation]({{< ref resource-schema >}}) for more information. - -The values provided through connections are a convenience and are also available as properties and functions (for secrets) when authoring your IaC files. You can ignore the values generated by a connection if you prefer to be explicit, or if you already have another convention you would like to follow. - -Adding connections to the above IaC file, it becomes: - -{{< tabs Bicep >}} - -{{< codetab >}} -{{< rad file="snippets/app-connections.bicep" embed="true" >}} -{{< /codetab >}} - -{{< /tabs >}} - -## Next step - -Now that you have an understanding of the Radius app model, learn more about the Radius Environments: - -{{< button text="Radius Environments" page="environments-concept" size="btn-lg" color="success" >}} diff --git a/docs/content/concepts/appmodel-concept/app-diagram.png b/docs/content/concepts/appmodel-concept/app-diagram.png deleted file mode 100644 index eb74f466d..000000000 Binary files a/docs/content/concepts/appmodel-concept/app-diagram.png and /dev/null differ diff --git a/docs/content/concepts/appmodel-concept/custom.png b/docs/content/concepts/appmodel-concept/custom.png deleted file mode 100644 index 9ce2a1304..000000000 Binary files a/docs/content/concepts/appmodel-concept/custom.png and /dev/null differ diff --git a/docs/content/concepts/appmodel-concept/direct-icon.png b/docs/content/concepts/appmodel-concept/direct-icon.png deleted file mode 100644 index 14bb35b8e..000000000 Binary files a/docs/content/concepts/appmodel-concept/direct-icon.png and /dev/null differ diff --git a/docs/content/concepts/appmodel-concept/radius-application.png b/docs/content/concepts/appmodel-concept/radius-application.png deleted file mode 100644 index a5a60fc9e..000000000 Binary files a/docs/content/concepts/appmodel-concept/radius-application.png and /dev/null differ diff --git a/docs/content/concepts/appmodel-concept/resources.png b/docs/content/concepts/appmodel-concept/resources.png deleted file mode 100644 index 7f35e205a..000000000 Binary files a/docs/content/concepts/appmodel-concept/resources.png and /dev/null differ diff --git a/docs/content/concepts/appmodel-concept/snippets/app-connections.bicep b/docs/content/concepts/appmodel-concept/snippets/app-connections.bicep deleted file mode 100644 index 68744cbf1..000000000 --- a/docs/content/concepts/appmodel-concept/snippets/app-connections.bicep +++ /dev/null @@ -1,35 +0,0 @@ -import radius as radius - -param environment string - -resource app 'Applications.Core/applications@2022-03-15-privatepreview' = { - name: 'my-app' - properties: { - environment: environment - } -} - -resource container 'Applications.Core/containers@2022-03-15-privatepreview' = { - name: 'my-backend' - properties: { - application: app.id - container: { - image: 'myimage' - } - connections: { - blob: { - source: blobContainer.id - iam: { - kind: 'azure' - roles: [ - 'Storage Blob Data Reader' - ] - } - } - } - } -} - -resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2021-06-01' existing = { - name: 'mystorage/default/mycontainer' -} diff --git a/docs/content/concepts/appmodel-concept/snippets/app-resources.bicep b/docs/content/concepts/appmodel-concept/snippets/app-resources.bicep deleted file mode 100644 index 874263f04..000000000 --- a/docs/content/concepts/appmodel-concept/snippets/app-resources.bicep +++ /dev/null @@ -1,24 +0,0 @@ -import radius as radius - -param environment string - -resource app 'Applications.Core/applications@2022-03-15-privatepreview' = { - name: 'my-app' - properties: { - environment: environment - } -} - -resource container 'Applications.Core/containers@2022-03-15-privatepreview' = { - name: 'my-backend' - properties: { - application: app.id - container: { - image: 'myimage' - } - } -} - -resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2021-06-01' = { - name: 'mystorage/default/mycontainer' -} diff --git a/docs/content/concepts/appmodel-concept/snippets/app.bicep b/docs/content/concepts/appmodel-concept/snippets/app.bicep deleted file mode 100644 index a2bb0c0c9..000000000 --- a/docs/content/concepts/appmodel-concept/snippets/app.bicep +++ /dev/null @@ -1,10 +0,0 @@ -import radius as radius - -param environment string - -resource app 'Applications.Core/applications@2022-03-15-privatepreview' = { - name: 'my-app' - properties: { - environment: environment - } -} diff --git a/docs/content/concepts/overview/_index.md b/docs/content/concepts/overview/_index.md index 8f2e2faf5..2d3b45a22 100644 --- a/docs/content/concepts/overview/_index.md +++ b/docs/content/concepts/overview/_index.md @@ -27,7 +27,7 @@ At the heart of Radius is a new **application resource**, with an accompanying s Diagram showing modeling an app with Radius -These new resources form the [**Radius app model**]({{< ref appmodel-concept >}}), which allow you to: +These new resources form the [**Radius app model**]({{< ref application-graph>}}), which allow you to: - Visualize the entire application, including its dependencies and relationships - Investigate cross-app health and diagnostics, including dependencies and connections @@ -88,4 +88,4 @@ As teams onboard to Radius and begin deploying across platforms, the tooling and Now that you have an overview of Radius, learn more about the Radius app model: -{{< button text="Learn about the Radius application model" page="appmodel-concept" size="btn-lg" color="success" >}} \ No newline at end of file +{{< button text="Learn about the Radius application model" page="application-graph" size="btn-lg" color="success" >}} \ No newline at end of file diff --git a/docs/content/getting-started/quickstarts/quickstart-aws-s3/_index.md b/docs/content/getting-started/quickstarts/quickstart-aws-s3/_index.md index 731f17b24..9c3d0e15c 100644 --- a/docs/content/getting-started/quickstarts/quickstart-aws-s3/_index.md +++ b/docs/content/getting-started/quickstarts/quickstart-aws-s3/_index.md @@ -80,7 +80,7 @@ This creates a container that will be deployed to your Kubernetes cluster. This > Replace `` and `` with the values obtained from the previous step. {{% alert title="Warning" color="warning" %}}It is always recommended to have separate IAM credentials for your container to communicate with S3 or any other data store. - Radius is currently working on supporting [direct connections]({{< ref "appmodel-concept#adding-connections" >}}) to AWS resources so that your container can automatically communicate with the data store securely without having to manage separate credentials for data plane operations{{% /alert %}} + Radius is currently working on supporting direct connections to AWS resources so that your container can automatically communicate with the data store securely without having to manage separate credentials for data plane operations{{% /alert %}} 1. Port-forward the container to your machine with [`rad resource expose`]({{< ref rad_resource_expose >}}): diff --git a/docs/content/getting-started/quickstarts/quickstart-cicd/index.md b/docs/content/getting-started/quickstarts/quickstart-cicd/index.md index d21ec7ff2..d1a70c57c 100644 --- a/docs/content/getting-started/quickstarts/quickstart-cicd/index.md +++ b/docs/content/getting-started/quickstarts/quickstart-cicd/index.md @@ -103,7 +103,7 @@ Next, download the latest `rad` CLI release and setup your workspace: - name: Initialize Radius environment run: | ./rad group create default - ./rad workspace create default --group default + ./rad workspace create kubernetes default --group default ./rad env create temp ./rad env switch temp ``` diff --git a/docs/content/getting-started/quickstarts/quickstart-dapr/dapr-microservices-add-dapr/index.md b/docs/content/getting-started/quickstarts/quickstart-dapr/dapr-microservices-add-dapr/index.md index 995bdc4bd..03d013b5b 100644 --- a/docs/content/getting-started/quickstarts/quickstart-dapr/dapr-microservices-add-dapr/index.md +++ b/docs/content/getting-started/quickstarts/quickstart-dapr/dapr-microservices-add-dapr/index.md @@ -42,9 +42,9 @@ You can choose between a Redis container or Azure Table Storage Radius captures both logical relationships and related operational details. Examples of this include: wiring up connection strings, granting permissions, or restarting components when a dependency changes. -The [`connections` property]({{< ref "appmodel-concept" >}}) is used to configure relationships between from a service to another resource. +The [`connections` property]({{< ref "application-graph" >}}) is used to configure relationships between from a service to another resource. -Add a [`connection`]({{< ref "appmodel-concept" >}}) from `backend` to the `orders` state store. This declares the _intention_ from the `backend` container to communicate with the `statestore` resource +Add a [`connection`]({{< ref "application-graph" >}}) from `backend` to the `orders` state store. This declares the _intention_ from the `backend` container to communicate with the `statestore` resource {{< rad file="snippets/connection.bicep" embed=true marker="//BACKEND" replace-key-container="//CONTAINER" replace-value-container="container: {...}" replace-key-extensions="//EXTENSIONS" replace-value-extensions="extensions: [...]" >}} diff --git a/docs/content/getting-started/quickstarts/quickstart-dapr/dapr-microservices-overview/index.md b/docs/content/getting-started/quickstarts/quickstart-dapr/dapr-microservices-overview/index.md index 50fdae63a..70db81897 100644 --- a/docs/content/getting-started/quickstarts/quickstart-dapr/dapr-microservices-overview/index.md +++ b/docs/content/getting-started/quickstarts/quickstart-dapr/dapr-microservices-overview/index.md @@ -19,7 +19,7 @@ You can view and download the source code in the [samples repo](https://github.c ## Containers -This Radius application will have two [containers]({{< ref appmodel-concept >}}): +This Radius application will have two [containers]({{< ref application-graph>}}): - A frontend UI for users to place orders. Written with .NET Blazor. - A backend order processing microservice. Written in Node.JS. diff --git a/docs/content/getting-started/quickstarts/quickstart-environment-variables/index.md b/docs/content/getting-started/quickstarts/quickstart-environment-variables/index.md index e1c19b3bc..57a11e344 100644 --- a/docs/content/getting-started/quickstarts/quickstart-environment-variables/index.md +++ b/docs/content/getting-started/quickstarts/quickstart-environment-variables/index.md @@ -59,7 +59,7 @@ Next, add to `app.bicep` a [Mongo link]({{< ref links-resources >}}), leveraging ## Step 5: Connect to the Mongo Link -Connections from a container to a link result in environment variables for connection information [automatically being set on the container]({{< ref "appmodel-concept#injected-values" >}}). Update your container definition to add a connection to the new Mongo link: +Connections from a container to a link result in environment variables for connection information automatically being set on the container. Update your container definition to add a connection to the new Mongo link: {{< rad file="snippets/3-app.bicep" embed=true marker="//CONTAINER" >}} diff --git a/docs/content/reference/faq.md b/docs/content/reference/faq.md index 1aec7d033..c0705674d 100644 --- a/docs/content/reference/faq.md +++ b/docs/content/reference/faq.md @@ -74,4 +74,4 @@ output values object = { ### Does Radius support all Azure resources? -**Yes**. You can use any Azure resource type by modeling it in Bicep outside the `Applications.Core/applications` resource and defining a connection to the resource from a `Applications.Core/containers`. See the [connections page]({{< ref appmodel-concept >}}) for more details. +**Yes**. You can use any Azure resource type by modeling it in Bicep outside the `Applications.Core/applications` resource and defining a connection to the resource from a `Applications.Core/containers`. See the [connections page]({{< ref application-graph>}}) for more details.