Expand my Community achievements bar.

Guidelines for the Responsible Use of Generative AI in the Experience Cloud Community.
SOLVED

Multi tenancy in shared AEM cloud Environment

Avatar

Level 4

Hi,

 

We are in the process of hosting multiple projects in a shared environment on AEM Cloud.

The requirement can be:

  • Single repo for all customer
  • multiple repo (individual repo for each) 
  • can share components or other resource 

I have gone through the documentation for the best practices and challenges.

https://experienceleague.adobe.com/en/docs/experience-manager-learn/assets/deployment/multitenancy-c....

The deployment strategy that is recommended is GIT submodule.

 

I am looking for views and opinions, guidelines on deployment if anybody has already implemented such feature.

What are the real time process and governance that was placed to achieve this?

What is the other deployment strategy that you used ?

Topics

Topics help categorize Community content and increase your ability to discover relevant content.

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @SwetaB ,

If you have multiple repositories and you want to share a component developed in one repository with another repository, there are a few approaches you can consider:

1. Git Submodules: If you are using Git as your version control system, you can use Git submodules to include a repository as a subdirectory within another repository. This allows you to reference and use components from one repository in another repository. You can add the shared component repository as a submodule in the repository where you want to reuse the component. This way, any changes made to the shared component repository can be easily pulled into the repository where it is being reused.

2. Package Manager: Another approach is to create a package of the shared component in the repository where it is developed and then install that package in the repository where it needs to be reused. Adobe Experience Manager (AEM) provides a Package Manager tool that allows you to create packages of components, configurations, and content. You can export the shared component as a package from the source repository and then import and install that package in the target repository.

3. Component Library: If you have a centralized component library or design system, you can publish the shared component to the library and then import it into the repositories where it needs to be reused. This approach ensures consistency and reusability across multiple repositories. The component library can be a separate repository or a dedicated section within one of the repositories.

Regarding Azure Repos and mapping pipeline jobs to Adobe Repos, here are a few options:

1. Azure Pipelines: If you are using Azure Repos for version control, you can also use Azure Pipelines for continuous integration and deployment. Azure Pipelines allows you to define build and release pipelines that can be triggered on code changes in Azure Repos. You can configure the pipeline jobs to build and deploy your AEM code to Adobe Repos or any other target environment.

2. Adobe Cloud Manager: Adobe Cloud Manager is a cloud-based service provided by Adobe for managing the deployment of AEM applications. It integrates with Adobe Repos and provides a set of tools and features for continuous integration and deployment. You can configure pipeline jobs in Adobe Cloud Manager to build and deploy your AEM code from Azure Repos to Adobe Repos.

3. Custom Integration: If you have specific requirements or workflows that are not covered by the out-of-the-box integration options, you can develop custom integrations between Azure Repos and Adobe Repos. This can be done using APIs and webhooks provided by both platforms. You can create custom scripts or plugins to synchronize code changes between the repositories and trigger pipeline jobs accordingly.

The choice of approach depends on your specific requirements, existing infrastructure, and team preferences. It's recommended to consult with experienced developers or solution architects who have experience with Azure Repos and Adobe Repos to determine the best approach and implementation for your use case.

View solution in original post

7 Replies

Avatar

Community Advisor

Hi @SwetaB ,

Implementing multi-tenancy in a shared AEM cloud environment can be achieved using various deployment strategies. The recommended approach, as mentioned in the documentation you referenced, is to use Git submodules. This allows you to have a single repository for shared components and resources, while also having individual repositories for each project.

Here are some guidelines and considerations for implementing multi-tenancy in a shared AEM cloud environment:

1. Git Submodules: Use Git submodules to manage shared components and resources. This allows you to have a central repository for shared code and configurations, while individual projects can have their own repositories for project-specific code.

2. Project Structure: Define a clear project structure that separates shared components and resources from project-specific components. This helps in managing code and configurations for each project separately.

3. Version Control: Use version control systems like Git to manage code and configurations. This ensures that changes made by different projects can be tracked, reviewed, and merged effectively.

4. Continuous Integration and Deployment (CI/CD): Implement CI/CD pipelines to automate the build, test, and deployment processes. This helps in ensuring that changes made by different projects are properly tested and deployed to the shared environment.

5. Governance and Access Control: Establish governance processes and access controls to manage permissions and ensure that each project has appropriate access to their respective repositories and resources.

6. Documentation and Communication: Maintain clear documentation and communication channels to ensure that all stakeholders are aware of the multi-tenancy setup, deployment processes, and any specific guidelines or best practices.

Apart from Git submodules, other deployment strategies that can be considered for multi-tenancy in a shared AEM cloud environment include:

- Git Branching: Use separate branches for each project within a single repository. This allows for easier management of shared and project-specific code, but may require more discipline in branch management.

- Docker Containers: Use Docker containers to isolate each project's AEM instance. This provides a higher level of isolation and flexibility, but may require more resources and infrastructure setup.

- Virtualization: Use virtualization technologies like VMWare or Kubernetes to create separate virtual environments for each project. This provides complete isolation but may require more infrastructure resources.

The choice of deployment strategy depends on various factors such as the complexity of the projects, resource availability, scalability requirements, and team preferences. It's important to evaluate and choose the strategy that best fits your specific requirements and constraints.

It's also recommended to consult with experienced AEM developers or solution architects who have implemented multi-tenancy in a shared AEM cloud environment to get insights and best practices specific to your use case.

Avatar

Level 4

Thanks @HrishikeshKa for the response.

 

How can we share the components as per the 2nd point in case of multiple repos?

If a component is used by Tenant 1 and is developed in Repo1 but later it needs to be reused. 

 

If we are using Azure repos then what are the ways repos can be created and pipeline job mapped to Adobe repos ?

 

Avatar

Correct answer by
Community Advisor

Hi @SwetaB ,

If you have multiple repositories and you want to share a component developed in one repository with another repository, there are a few approaches you can consider:

1. Git Submodules: If you are using Git as your version control system, you can use Git submodules to include a repository as a subdirectory within another repository. This allows you to reference and use components from one repository in another repository. You can add the shared component repository as a submodule in the repository where you want to reuse the component. This way, any changes made to the shared component repository can be easily pulled into the repository where it is being reused.

2. Package Manager: Another approach is to create a package of the shared component in the repository where it is developed and then install that package in the repository where it needs to be reused. Adobe Experience Manager (AEM) provides a Package Manager tool that allows you to create packages of components, configurations, and content. You can export the shared component as a package from the source repository and then import and install that package in the target repository.

3. Component Library: If you have a centralized component library or design system, you can publish the shared component to the library and then import it into the repositories where it needs to be reused. This approach ensures consistency and reusability across multiple repositories. The component library can be a separate repository or a dedicated section within one of the repositories.

Regarding Azure Repos and mapping pipeline jobs to Adobe Repos, here are a few options:

1. Azure Pipelines: If you are using Azure Repos for version control, you can also use Azure Pipelines for continuous integration and deployment. Azure Pipelines allows you to define build and release pipelines that can be triggered on code changes in Azure Repos. You can configure the pipeline jobs to build and deploy your AEM code to Adobe Repos or any other target environment.

2. Adobe Cloud Manager: Adobe Cloud Manager is a cloud-based service provided by Adobe for managing the deployment of AEM applications. It integrates with Adobe Repos and provides a set of tools and features for continuous integration and deployment. You can configure pipeline jobs in Adobe Cloud Manager to build and deploy your AEM code from Azure Repos to Adobe Repos.

3. Custom Integration: If you have specific requirements or workflows that are not covered by the out-of-the-box integration options, you can develop custom integrations between Azure Repos and Adobe Repos. This can be done using APIs and webhooks provided by both platforms. You can create custom scripts or plugins to synchronize code changes between the repositories and trigger pipeline jobs accordingly.

The choice of approach depends on your specific requirements, existing infrastructure, and team preferences. It's recommended to consult with experienced developers or solution architects who have experience with Azure Repos and Adobe Repos to determine the best approach and implementation for your use case.

Avatar

Level 4

Thank you @HrishikeshKa, though it is an open discussion and we have multiple ways to approach this, your answer would definitely help.

Avatar

Community Advisor

Hi @SwetaB

There is an excellent blog on this - please refer Multi Tenancy with Adobe Cloud Manager

It talks about 3 deployment models - 

Hope this helps!

Avatar

Level 3

Hi @SwetaB ,

Which approach you have finalized.
Thanks,
Geo

Avatar

Level 4

Hi @georhe6 ,

 

I have tried both the approaches, Git sub module approach though worked fine but we faced some limitation while syncing code from Azure repo to Adobe repo.

 

Finally I have used the git actions to merge multiple repos into a parent repo and push it to Adobe repo, as below.

 https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/implementing/usi...