1. Answers
  2. Deploy MinIO on Azure Virtual Machines

How do I use MinIO with Azure Virtual Machines?

In this guide, we will deploy MinIO, a high-performance object storage system, on Azure Virtual Machines using Pulumi. We will create a resource group, a virtual network, a subnet, a public IP, a network interface, and a virtual machine. We will then install MinIO on the virtual machine.

Key Points:

  • Provision an Azure Virtual Machine.
  • Configure networking components.
  • Install and configure MinIO on the VM.
import * as pulumi from "@pulumi/pulumi";
import * as azure from "@pulumi/azure-native";

// Create an Azure Resource Group
const resourceGroup = new azure.resources.ResourceGroup("resourceGroup", {
    resourceGroupName: "minio-rg",
    location: "WestUS",
});

// Create a Virtual Network
const virtualNetwork = new azure.network.VirtualNetwork("virtualNetwork", {
    resourceGroupName: resourceGroup.name,
    location: resourceGroup.location,
    addressSpace: { addressPrefixes: ["10.0.0.0/16"] },
});

// Create a Subnet
const subnet = new azure.network.Subnet("subnet", {
    resourceGroupName: resourceGroup.name,
    virtualNetworkName: virtualNetwork.name,
    addressPrefix: "10.0.1.0/24",
});

// Create a Public IP
const publicIp = new azure.network.PublicIPAddress("publicIp", {
    resourceGroupName: resourceGroup.name,
    location: resourceGroup.location,
    publicIPAllocationMethod: "Dynamic",
});

// Create a Network Interface
const networkInterface = new azure.network.NetworkInterface("networkInterface", {
    resourceGroupName: resourceGroup.name,
    location: resourceGroup.location,
    ipConfigurations: [{
        name: "ipconfig1",
        subnet: { id: subnet.id },
        publicIPAddress: { id: publicIp.id },
    }],
});

// Create a Virtual Machine
const vm = new azure.compute.VirtualMachine("vm", {
    resourceGroupName: resourceGroup.name,
    location: resourceGroup.location,
    networkProfile: { networkInterfaces: [{ id: networkInterface.id }] },
    hardwareProfile: { vmSize: "Standard_B1s" },
    osProfile: {
        computerName: "minio-vm",
        adminUsername: "adminuser",
        adminPassword: "Password1234!",
        customData: `#!/bin/bash
                     sudo apt-get update
                     sudo apt-get install -y wget
                     wget https://dl.min.io/server/minio/release/linux-amd64/minio
                     chmod +x minio
                     sudo mv minio /usr/local/bin
                     sudo useradd -r minio-user -s /sbin/nologin
                     sudo chown minio-user:minio-user /usr/local/bin/minio
                     sudo mkdir /usr/local/share/minio
                     sudo chown minio-user:minio-user /usr/local/share/minio
                     sudo mkdir /etc/minio
                     sudo chown minio-user:minio-user /etc/minio
                     echo 'MINIO_ACCESS_KEY=minioadmin' | sudo tee -a /etc/default/minio
                     echo 'MINIO_SECRET_KEY=minioadmin123' | sudo tee -a /etc/default/minio
                     sudo curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
                     sudo mv minio.service /etc/systemd/system/
                     sudo systemctl daemon-reload
                     sudo systemctl enable minio
                     sudo systemctl start minio
                     `,
    },
    storageProfile: {
        osDisk: {
            name: "osdisk",
            caching: "ReadWrite",
            createOption: "FromImage",
            managedDisk: { storageAccountType: "Standard_LRS" },
        },
        imageReference: {
            publisher: "Canonical",
            offer: "UbuntuServer",
            sku: "18.04-LTS",
            version: "latest",
        },
    },
});

export const publicIpAddress = publicIp.ipAddress;

Summary:

In this tutorial, we deployed MinIO on an Azure Virtual Machine using Pulumi. We created necessary networking components, provisioned a VM, and installed MinIO on it. The VM is accessible via the public IP address exported at the end.

Deploy this code

Want to deploy this code? Sign up for a free Pulumi account to deploy in a few clicks.

Sign up

New to Pulumi?

Want to deploy this code? Sign up with Pulumi to deploy in a few clicks.

Sign up