diff --git a/docs/docs-beta/docs/dagster-plus/deployment/management/managing-multiple-projects-and-teams.md b/docs/docs-beta/docs/dagster-plus/deployment/management/managing-multiple-projects-and-teams.md index cc59bd13364a9..6b88b8104a216 100644 --- a/docs/docs-beta/docs/dagster-plus/deployment/management/managing-multiple-projects-and-teams.md +++ b/docs/docs-beta/docs/dagster-plus/deployment/management/managing-multiple-projects-and-teams.md @@ -1,6 +1,393 @@ --- title: Managing multiple projects and teams -unlisted: true --- -{/* TODO move from https://docs.dagster.io/dagster-plus/best-practices/managing-multiple-projects-and-teams */} \ No newline at end of file +In this guide, we'll cover some strategies for managing multiple projects/code bases and teams in a Dagster+ account. + +## Separating code bases + +:::note +In this section, repository refers to a version control system, such as Git or Mercurial. +::: + +If you want to manage complexity or divide your work into areas of responsibility, consider isolating your code bases into multiple projects with: + +- Multiple directories in a single repository, or +- Multiple repositories + +Refer to the following table for more information, including the pros and cons of each approach. + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Approach + + Multiple directories in a single repository + Multiple repositories
+ How it works + + You can use a single repository to manage multiple projects by placing + each project in a separate directory. Depending on your VCS, you may be + able to set{" "} + + code owners + {" "} + to restrict who can modify each project. + + For stronger isolation, you can use multiple repositories to manage + multiple projects. +
+ Pros + +
    +
  • + Simple to implement +
  • +
  • Facilitates code sharing between projects
  • +
+
+
    +
  • + Stronger isolation between projects and teams +
  • +
  • + Each project has its own CI/CD pipeline and be deployed + independently +
  • +
  • Dependencies between projects can be managed independently
  • +
+
+ Cons + +
    +
  • + All projects share the same CI/CD pipeline and cannot be deployed + independently +
  • +
  • + Shared dependencies between projects may cause conflicts and require + coordination between teams +
  • +
+
+ Code sharing between projects require additional coordination to publish + and reuse packages between projects +
+ +### Deployment configuration + +{/* Whether you use a single repository or multiple, you can use a [`dagster_cloud.yaml` file](/dagster-plus/managing-deployments/dagster-cloud-yaml) to define the code locations to deploy. For each repository, follow the [steps appropriate to your CI/CD provider](/dagster-plus/getting-started#step-4-configure-cicd-for-your-project) and include only the code locations that are relevant to the repository in your CI/CD workflow. */} +Whether you use a single repository or multiple, you can use a [`dagster_cloud.yaml` file](/todo) to define the code locations to deploy. For each repository, follow the [steps appropriate to your CI/CD provider](/todo) and include only the code locations that are relevant to the repository in your CI/CD workflow. + +#### Example with GitHub CI/CD on Hybrid deployment + +1. **For each repository**, use the CI/CD workflow provided in [Dagster+ Hybrid quickstart repository](https://github.com/dagster-io/dagster-cloud-hybrid-quickstart/blob/main/.github/workflows/dagster-cloud-deploy.yml). + +{/* 2. **For each project in the repository**, configure a code location in the [`dagster_cloud.yaml` file](/dagster-plus/managing-deployments/dagster-cloud-yaml): */} +2. **For each project in the repository**, configure a code location in the [`dagster_cloud.yaml` file](/todo): + + ```yaml + # dagster_cloud.yml + + locations: + - location_name: project_a + code_source: + package_name: project_a + build: + # ... + - location_name: project_b + code_source: + package_name: project_b + build: + # ... + ``` + +3. In the repository's `dagster-cloud-deploy.yml` file, modify the CI/CD workflow to deploy all code locations for the repository: + + ```yaml + # .github/workflows/dagster-cloud-deploy.yml + + jobs: + dagster-cloud-deploy: + # ... + steps: + - name: Update build session with image tag for "project_a" code location + id: ci-set-build-output-project-a + if: steps.prerun.outputs.result != 'skip' + uses: dagster-io/dagster-cloud-action/actions/utils/dagster-cloud-cli@v0.1 + with: + command: "ci set-build-output --location-name=project_a --image-tag=$IMAGE_TAG" + + - name: Update build session with image tag for "project_b" code location + id: ci-set-build-output-project-b + if: steps.prerun.outputs.result != 'skip' + uses: dagster-io/dagster-cloud-action/actions/utils/dagster-cloud-cli@v0.1 + with: + command: "ci set-build-output --location-name=project_b --image-tag=$IMAGE_TAG" + # ... + ``` + +--- + +## Isolating execution context between projects + +Separating execution context between projects can have several motivations: + +- Facilitating separation of duty between teams to prevent access to sensitive data +- Differing compute environments and requirements, such as different architecture, cloud provider, etc. +- Reducing impact on other projects. For example, a project with a large number of runs can impact the performance of other projects. + +In order from least to most isolated, there are three levels of isolation: + +- [Code location](#code-location-isolation) +- [Agent](#agent-isolation) +- [Deployment](#deployment-isolation) + +### Code location isolation + +If you have no specific requirements for isolation beyond the ability to deploy and run multiple projects, you can use a single agent and deployment to manage all your projects as individual code locations. + +![Diagram of isolation at the code location level](/images/dagster-cloud/managing-deployments/isolation-level-code-locations.png) + + + + + + + + + + + + + + +
+ Pros + Cons
+
    +
  • + Simplest and most cost-effective solution +
  • +
  • User access control can be set at the code location level
  • +
  • Single glass pane to view all assets
  • +
+
+
    +
  • + No isolation between execution environments +
  • +
+
+ +### Agent isolation + +:::note +Agent queues are a Dagster+ Pro feature available on hybrid deployment. +::: + +{/* Using the [agent routing feature](/dagster-plus/deployment/agents/running-multiple-agents#routing-requests-to-specific-agents), you can effectively isolate execution environments between projects by using a separate agent for each project. */} +Using the [agent routing feature](/todo), you can effectively isolate execution environments between projects by using a separate agent for each project. + +Motivations for utilizing this approach could include: + +- Different compute requirements, such as different cloud providers or architectures +- Optimizing for locality or access, such as running the data processing closer or in environment with access to the storage locations + +![Diagram of isolation at the agent level](/images/dagster-cloud/managing-deployments/isolation-level-agents.png) + + + + + + + + + + + + + + +
+ Pros + Cons
+
    +
  • + Isolation between execution environments +
  • +
  • User access control can be set at the code location level
  • +
  • Single glass pane to view all assets
  • +
+
Extra work to set up additional agents and agent queues
+ +### Deployment isolation + +:::note +Multiple deployments are only available in Dagster+ Pro. +::: + +Of the approaches outlined in this guide, multiple deployments are the most isolated solution. The typical motivation for this isolation level is to separate production and non-production environments. It may be considered to satisfy other organization specific requirements. + +![Diagram of isolation at the Dagster+ deployment level](/images/dagster-cloud/managing-deployments/isolation-level-deployments.png) + + + + + + + + + + + + + + +
+ Pros + Cons
+
    +
  • + Isolation between assets and execution environments +
  • +
  • + User access control can be set at the code location and deployment + level +
  • +
+
+ No single glass pane to view all assets (requires switching between + multiple deployments in the UI) +
+ + +{/* +## Related + +- [Dagster+ Hybrid deployments](/dagster-plus/deployment/hybrid) +- [Dagster+ Hybrid agents](/dagster-plus/deployment/agents) +- [Managing deployments in Dagster+](/dagster-plus/managing-deployments) +(/* - [Running multiple Dagster+ Hybrid agents](/dagster-plus/deployment/agents/running-multiple-agents#routing-requests-to-specific-agents) */} +- [Running multiple Dagster+ Hybrid agents](/todo) +{/* - [dagster_cloud.yaml](/dagster-plus/managing-deployments/dagster-cloud-yaml) */} +- [dagster_cloud.yaml](/todo) diff --git a/docs/docs-beta/static/images/dagster-cloud/managing-deployments/isolation-level-agents.png b/docs/docs-beta/static/images/dagster-cloud/managing-deployments/isolation-level-agents.png new file mode 100644 index 0000000000000..2fd662c04df8a Binary files /dev/null and b/docs/docs-beta/static/images/dagster-cloud/managing-deployments/isolation-level-agents.png differ diff --git a/docs/docs-beta/static/images/dagster-cloud/managing-deployments/isolation-level-code-locations.png b/docs/docs-beta/static/images/dagster-cloud/managing-deployments/isolation-level-code-locations.png new file mode 100644 index 0000000000000..558b74df3d244 Binary files /dev/null and b/docs/docs-beta/static/images/dagster-cloud/managing-deployments/isolation-level-code-locations.png differ diff --git a/docs/docs-beta/static/images/dagster-cloud/managing-deployments/isolation-level-deployments.png b/docs/docs-beta/static/images/dagster-cloud/managing-deployments/isolation-level-deployments.png new file mode 100644 index 0000000000000..27cc815b9bf44 Binary files /dev/null and b/docs/docs-beta/static/images/dagster-cloud/managing-deployments/isolation-level-deployments.png differ