Skip to main content

Overview

Multi-Cloud Manager provides comprehensive resource management capabilities across Azure, Google Cloud Platform, and AWS. Create and manage virtual machines, containers, storage, and networks from a single interface.

Full Lifecycle Management

Manage the complete lifecycle of cloud resources: creation, configuration, monitoring, and deletion across all connected providers.

Virtual Machine Management

Creating VMs

Create virtual machines in both Azure and GCP through modal dialogs.

Azure VM Creation

// CreateVMModal component usage
<CreateVMModal
  isOpen={showVMModal}
  onClose={() => setShowVMModal(false)}
  onCreated={fetchVirtualMachines}
  subscriptionId={resourceGroups[0]?.subscriptionId}
/>
1

Open Creation Modal

Click “🖥️ Utwórz VM (Azure)” button on the Virtual Machines page
2

Configure VM Settings

Specify VM name, resource group, location, and size
3

Deploy

Submit the form to create the VM via /api/vmsCreate endpoint

GCP VM Creation

// CreateGCPVMModal component usage
<CreateGCPVMModal
  isOpen={showGCPVMModal}
  onClose={() => setShowGCPVMModal(false)}
  onCreated={fetchGcpVms}
/>
Configuration Options:
  • VM name
  • Project ID
  • Zone selection
  • Machine type
  • Boot disk configuration

Monitoring VMs

Access detailed monitoring for any VM by clicking the 📈 icon:
// Navigation to VM monitoring
<span 
  style={{ cursor: "pointer" }} 
  onClick={() => navigate(`/vm/${vm.name}/monitoring`)}
>
  📈
</span>
Monitoring Routes:
  • Azure VMs: /vm/:vmId/monitoringVMMonitor component
  • GCP VMs: /vm/gcp/:vmName/monitoringVMGCPMonitor component

Real-Time Metrics

Monitor CPU usage, memory, disk I/O, and network metrics in real-time through dedicated monitoring pages.

Deleting VMs

Azure VM Deletion

const deleteVM = async (subscriptionId, rgName, vmName) => {
  if (!window.confirm(`Czy na pewno chcesz usunąć maszynę wirtualną "${vmName}"?`)) 
    return;
  
  const res = await fetch("/api/vmsDelete", {
    method: "DELETE",
    credentials: "include",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ subscriptionId, rgName, vmName }),
  });
};

GCP VM Deletion

const handleDeleteGcpVm = async (vm) => {
  if (!window.confirm(`Czy na pewno chcesz usunąć maszynę "${vm.name}"?`)) 
    return;
  
  const res = await fetch("/api/gcp/delete_gcp_vm", {
    method: "DELETE",
    body: JSON.stringify({
      projectId: vm.projectId,
      zone: vm.location,
      vmName: vm.name,
    }),
  });
};
VM deletion is permanent and requires explicit confirmation. All associated resources may also be affected.

Container Management

Azure Container Instances

Creating Containers

<CreateContainerModal
  isOpen={showAzureModal}
  onClose={() => setShowAzureModal(false)}
  onCreated={fetchAzureContainers}
/>
Configuration:
  • Container name
  • Resource group
  • Location
  • Container image (Docker Hub, ACR, etc.)
  • CPU and memory allocation
  • Port configuration

Container Operations

const handleRestartAzure = async (container) => {
  const res = await fetch("/api/restart_container", {
    method: "POST",
    body: JSON.stringify({
      subscriptionId: container.subscriptionId,
      resourceGroup: container.resourceGroup,
      containerName: container.name
    }),
  });
};

Google Cloud Run Services

Creating Cloud Run Services

<CreateGCPContainerModal
  isOpen={showGCPModal}
  onClose={() => setShowGCPModal(false)}
  onCreated={fetchGcpContainers}
/>
Configuration:
  • Service name
  • Project ID
  • Region
  • Container image URL
  • Memory and CPU limits
  • Auto-scaling settings

Live Service URLs

Cloud Run services automatically receive HTTPS URLs that are displayed as clickable links in the resource table.

Monitoring Cloud Run

// Navigation to GCP container monitoring
onClick={() => navigate(`/container/gcp/${service.name}/monitoring`)}
Monitoring endpoints:
  • /api/gcp/container/:projectId/:region/:containerName/metrics
  • /api/gcp/container/:projectId/:containerName/logs/query

Storage Management

Azure Storage Accounts

Creating Storage Accounts

<CreateStorageAccountModal
  isOpen={showAzureModal}
  onClose={() => setShowAzureModal(false)}
  onCreated={fetchAzureAccounts}
/>
Configuration Options:
  • Account name (globally unique)
  • Resource group
  • Location
  • Performance tier (Standard/Premium)
  • Replication (LRS, GRS, RA-GRS, ZRS)
  • Access tier (Hot/Cool)

Managing Blob Containers

Click the 📂 icon to navigate to storage account details:
onClick={() => {
  sessionStorage.setItem("selectedStorageAccount", JSON.stringify(acc));
  navigate(`/storage/${acc.name}`, { state: acc });
}}
Blob Container Operations:
  • List containers: /api/:storage_account_id/list_blob_containers
  • Create container: /api/:storage_account_id/create_blob_container
  • Upload files: /api/:storage_account_id/upload_blob
  • Download files: /api/:storage_account_id/download_blob
  • Delete blobs: /api/:storage_account_id/delete_blob

GCP Storage Buckets

Creating Buckets

<CreateBucketGCPModal
  isOpen={showGCPModal}
  onClose={() => setShowGCPModal(false)}
  onCreated={fetchGCPBuckets}
/>
Configuration:
  • Bucket name (globally unique)
  • Project ID
  • Location (region or multi-region)
  • Storage class (Standard, Nearline, Coldline, Archive)

Bucket Content Management

Click 📂 to view bucket contents:
onClick={() => {
  sessionStorage.setItem("selectedGCPBucket", JSON.stringify(resourceInfo));
  navigate(`/storage/gcp/${bucket.name}`, { state: resourceInfo });
}}
File Operations:
  • List blobs: /api/gcp/buckets/blobs
  • Upload files: /api/gcp/buckets/blobs (POST)
  • Download files: /api/gcp/buckets/blobs/download
  • Delete blobs: /api/gcp/buckets/blobs (DELETE)
Deleting a GCP bucket requires typing the bucket name for confirmation as it permanently removes all contents.

Network Management

Azure Virtual Networks

Creating VNets

<CreateVnetModal
  isOpen={showVnetModal}
  onClose={() => setShowVnetModal(false)}
  onCreated={fetchAzureVnets}
/>
VNet Configuration:
  • VNet name
  • Resource group
  • Location
  • Address space (CIDR notation)

Adding Subnets

<CreateSubnetModal
  isOpen={showSubnetModal}
  onClose={() => setShowSubnetModal(false)}
  onCreated={fetchAzureVnets}
  vnet={selectedVnet}
/>
Click ”➕ Dodaj Subnet” next to any VNet to add a subnet:
<button
  onClick={() => {
    setSelectedVnet(vnet);
    setShowSubnetModal(true);
  }}
>
  ➕ Dodaj Subnet
</button>

GCP VPC Networks

Creating VPCs

<CreateGCPVPCModal
  isOpen={showGCPVPCModal}
  onClose={() => setShowGCPVPCModal(false)}
  onCreated={fetchGcpVpcs}
/>
VPC Configuration:
  • VPC name
  • Project ID
  • Subnet mode (Auto/Custom)
  • Routing mode (Regional/Global)

Adding Subnets to VPC

<CreateGCPSubnetModal
  isOpen={showGCPSubnetModal}
  onClose={() => setShowGCPSubnetModal(false)}
  onCreated={fetchGcpVpcs}
  vpc={selectedGcpVpc}
/>
Subnet Configuration:
  • Subnet name
  • Region
  • IP CIDR range
  • Private Google Access
  • Flow logs

Network Topology

View all subnets within a VPC by clicking the expand button (“Pokaż ▼”) next to the subnet count.

Resource Groups (Azure)

Creating Resource Groups

<CreateResourceGroupModal
  isOpen={showModal}
  onClose={() => setShowModal(false)}
  onCreated={fetchResourceGroups}
/>
Configuration:
  • Resource group name
  • Subscription ID
  • Location

Inspecting Resource Group Contents

const fetchRGContents = async (subscriptionId, rgName) => {
  const res = await fetch(
    `/api/resource_group_contents?subscriptionId=${subscriptionId}&rgName=${rgName}`,
    { credentials: "include" }
  );
  const data = await res.json();
  setRgResources(data.value || []);
  setShowRGDetails(true);
};
Click 🔎 to view all resources within a resource group:
  • Resource names
  • Resource types
  • Locations

Deleting Resource Groups

const deleteRG = async (subscriptionId, rgName) => {
  if (!window.confirm(`Czy na pewno chcesz usunąć grupę zasobów "${rgName}"?`))
    return;
  
  const res = await fetch("/api/resource_group_delete", {
    method: "DELETE",
    body: JSON.stringify({ subscriptionId, rgName }),
  });
};
Deleting a resource group removes all contained resources. This operation cannot be undone.

API Endpoints Reference

Azure Endpoints

  • GET /api/virtual_machines - List all VMs
  • POST /api/vmsCreate - Create new VM
  • DELETE /api/vmsDelete - Delete VM
  • POST /api/vm/:vm_id/metrics - Get VM metrics
  • GET /api/list_containers - List containers
  • POST /api/create_container - Create container
  • POST /api/restart_container - Restart container
  • DELETE /api/delete_container - Delete container
  • GET /api/list_storage_accounts - List storage accounts
  • POST /api/create_storage_account - Create account
  • DELETE /api/delete_storage_account - Delete account
  • POST /api/:id/upload_blob - Upload file
  • GET /api/vnets - List virtual networks
  • POST /api/vnetsCreate - Create VNet
  • POST /api/subnetCreate - Create subnet

GCP Endpoints

  • GET /api/gcp/list_vms - List GCP VMs
  • POST /api/gcp/create_gcp_vms - Create VM
  • DELETE /api/gcp/delete_gcp_vm - Delete VM
  • POST /api/gcp/vm/:projectId/:instanceId/metrics - Get metrics
  • GET /api/gcp/list_containers - List services
  • POST /api/gcp/create_container - Create service
  • DELETE /api/gcp/delete_container - Delete service
  • GET /api/projects/list_buckets - List buckets
  • POST /api/projects/create_bucket - Create bucket
  • DELETE /api/projects/delete_bucket - Delete bucket
  • GET /api/gcp/buckets/blobs - List files
  • GET /api/gcp/list_gcp_vpcs - List VPCs
  • POST /api/gcp/create_gcp_vpc - Create VPC
  • POST /api/gcp/create_gcp_subnet - Create subnet

UI Component Patterns

All resource creation uses modal dialogs with consistent patterns:
const [showModal, setShowModal] = useState(false);

<button onClick={() => setShowModal(true)}>
  ➕ Create Resource
</button>

<CreateResourceModal
  isOpen={showModal}
  onClose={() => setShowModal(false)}
  onCreated={refreshResourceList}
/>

Action Buttons

Standardized action buttons across all resource tables:
  • 📈 - Monitor (navigate to monitoring page)
  • 🛠 - Modify (configure resource settings)
  • 🔎 - Inspect (view details)
  • 🔁 - Restart (applicable to containers)
  • 📂 - Browse (view contents)
  • 🗑️ / ❌ - Delete (remove resource)

User Confirmation

All destructive operations (delete, restart) require explicit user confirmation via window.confirm() dialogs.

Best Practices

Resource Naming

Use consistent naming conventions across cloud providers for easy identification

Resource Groups

Organize Azure resources in logical resource groups for simplified management

Monitoring Setup

Enable monitoring immediately after resource creation for operational visibility

Cost Awareness

Regularly review and delete unused resources to optimize cloud spending

Next Steps

Monitoring & Alerts

Set up monitoring and alerts for your resources

Authentication

Manage cloud provider accounts and authentication

Build docs developers (and LLMs) love