TeamCloud is a tool that enables enterprise IT organizations to provide application development teams "self-serve" access to secure compliant cloud development environments.
There are several components that make up the TeamCloud solution:
At the center of the tool is a TeamCloud instance (the source code in this repository). An enterprise deploys a single TeamCloud instance, along with one or more Providers, to an Azure subscription managed by its IT organization.
A TeamCloud instance is composed of two parts:
- A user-facing REST API that enables TeamCloud admins to manage the TeamCloud instance, and application development teams to create and manage Projects.
- An internal orchestration service (sometimes referred to as "the orchestrator") that communicates with one or more Providers responsible for creating and managing resources for a Project.
Together, the TeamCloud instance and its registered Providers define a template for a policy-compliant, secure, cloud development environment, which software development teams can create on-demand.
A TeamCloud instance and its registered Providers define a template for a policy-compliant, secure, cloud development environment, which software development teams can create on-demand. In the context of TeamCloud, these cloud development environments are called Projects.
A Provider is responsible for managing one or more resources for a Project. For example, an organization may implement an "Azure Key Vault Provider" responsible for creating a new Key Vault instance for each Project. Another example would be a "GitHub repo provider" that creates an associated source code repository for each Project.
Providers are registered with a TeamCloud instance and invoked by the Orchestrator when a Project is created or changed. Any service that implements required REST endpoints can be registered as a Provider.
There are a few steps steps required to get a TeamCloud instance configured and deployed:
A TeamCloud instance is made up of the following Azure resources:
Deploying the Azure resources is as simple as clicking the "Deploy to Azure" link above and filling in a few fields.Below is a brief explanation for filling in each field, please file an issue if you have questions or require additional help.
Subscription
Select which Azure subscription you want to use. It's okay if you only have one choice, or you don't see this option at all.Resource group
Unless you have an existing Resource group that you know you want to use, select Create new and provide a name for the new group. _(a resource group is essentially a parent folder to deploy the resources that make up the TeamCloud instance).Location
Select the region to deploy the new resources. You want to choose a region that best describes your location (or your users location).Function App Name
Provide a name for your app. This can be the same name as your Resource group, and will be used as the subdomain for your service endpoint. For example, if you usedsuperawesome
, your TeamCloud API would live atsuperawesome.azurewebsites.net/api
.- Agree & Purchase: Read and agree to the TERMS AND CONDITIONS, then click Purchase.
// TODO...
Note: deploying the Azure resources is required even when building and running the source code locally.
TeamCloud is built on top of Azure Functions and targets 3.x runtime version.
Azure Functions Core Tools version 3+ is required to build and run the code locally. Core Tools is already integrated into some development environments. See the documentation here for guidance on setting up your environment for local development with functions.
The local.settings.json
file stores app settings, connection strings, and settings used by local development tools. Settings in the local.settings.json file are used only when you're running projects locally.
This file contains keys and connection strings, so it is not committed to this public repo. After cloning this repo, you'll need to create a new local.settings.json
file in the src
folder. The file's contents should contain the following:
{
"IsEncrypted": false,
"Values": {
"AzureCosmosDBConnection": "<Your-CosmosDB-Connection-String>",
"AzureWebJobsStorage": "<Your-WebJobs-Storage-Account-Connection-String>",
"DurableFunctionsHubStorage": "<Your-TaskHub-Storage-Account-Connection-String>",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"AppConfigurationConnectionString": "Your-App-Configuration-Connection-String"
}
}
Values for these settings can be retrieved manually. However, if you used the "Deploy to Azure" button above, each of these settings was automatically added to your Functions App's Settings and can easily be retrieved using the portal or CLI.
This project is in active development and will change. As the tool becomes ready for use, it will be versioned and released.
We will do our best to conduct all development openly by documenting features and requirements, and managing the project using issues, milestones, and projects.
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.