Chcete nabídnout demo instanci svého software zákazníkům na vyzkoušení? Snadné s Logic Apps a ARM šablonou v Azure.

Vyvíjíte software a chcete zákazníkům nabídnout možnost během pár minut získat vlastní instanci a produkt ihned vyzkoušet? Stačí na webu vyplnit údaje, email a za pár minut jim přijde odkaz na běžící instanci vašeho software vytvořenou právě pro ně. Jak to udělat? Workflow zprocesujeme v Azure Logic App (posílání emailů, založení a zrušení instance) a samotné nasazení provedeme ARM šablonou v rámci flow. Úžasně jednoduché a užitečné, podívejte se, jak na to.

Příprava a ARM šablona

Hlavním cílem u mě bude schopnost nasadit řešení pro vyzkoušení zákazníkem velmi rychle, ideálně do 3 minut. Pro příklad budu za "svou aplikaci" považovat WordPress. Abych měl nasazeno co nejrychleji, použiji kontejnerizaci a Azure Container Instances. ARM šablonou založím jednu container group obsahující kontejner s WordPress a kontejner s MySQL. Podobně rychlých výsledků dosáhnete třeba s použitím web appky v Azure Application Services a Azure Database for MySQL. Nicméně můžete použít cokoli v Azure, klidně deployment IaaS z nějakého připraveného demo image.

Moje ARM šablona tedy vypadá takhle:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "siteName": {
      "type": "string",
      "defaultValue": "[uniquestring(resourceGroup().id)]",
      "metadata": {
        "description": "WordPress Site Name"
      }
    },
    "mysqlPassword": {
      "type": "securestring",
      "defaultValue": "Azure12345678",
      "metadata": {
        "description": "MySQL database password"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "variables": {
    "cpuCores": "0.5",
    "memoryInGb": "0.7",
    "wordpressContainerGroupName": "wordpress-containerinstance"
  },
  "resources": [
    {
      "name": "[variables('wordpresscontainerGroupName')]",
      "type": "Microsoft.ContainerInstance/containerGroups",
      "apiVersion": "2018-02-01-preview",
      "location": "[parameters('location')]",
      "properties": {
        "containers": [
          {
            "name": "wordpress",
            "properties": {
              "image": "wordpress:4.9-apache",
              "ports": [
                {
                  "protocol": "tcp",
                  "port": 80
                }
              ],
              "environmentVariables": [
                {
                  "name": "WORDPRESS_DB_HOST",
                  "value": "127.0.0.1:3306"
                },
                {
                  "name": "WORDPRESS_DB_PASSWORD",
                  "value": "[parameters('mysqlPassword')]"
                }
              ],
              "resources": {
                "requests": {
                  "cpu": "[variables('cpuCores')]",
                  "memoryInGb": "[variables('memoryInGb')]"
                }
              }
            }
          },
          {
            "name": "mysql",
            "properties": {
              "image": "mysql:5.6",
              "ports": [
                {
                  "protocol": "tcp",
                  "port": 3306
                }
              ],
              "environmentVariables": [
                {
                  "name": "MYSQL_ROOT_PASSWORD",
                  "value": "[parameters('mysqlPassword')]"
                }
              ],
              "resources": {
                "requests": {
                  "cpu": "[variables('cpuCores')]",
                  "memoryInGb": "[variables('memoryInGb')]"
                }
              }
            }
          }
        ],
        "ipAddress": {
          "ports": [
            {
              "protocol": "tcp",
              "port": 80
            }
          ],
          "type": "Public",
          "dnsNameLabel": "[parameters('siteName')]"
        },
        "osType": "Linux"
      }
    }
  ],
  "outputs": {
    "siteFQDN": {
      "type": "string",
      "value": "[concat('http://', reference(resourceId('Microsoft.ContainerInstance/containerGroups/', variables('wordpresscontainerGroupName'))).ipAddress.fqdn)]"
    }
  }
}

Na konci jsou outputs, ve kterých si smontuji výsledné URL, na které se zákazník může připojit.

Logic App pro celé workflow

Celé založení a zrušení demo prostředí provedeme v Logic App. Ta bude reagovat na HTTP request a na vstupu bude očekávat trojici dat - login (použiji pouze pro název zakládané Resource Group), jméno (použiji v uvítacím emailu) a email (na ten budu posílat informace). Do vašeho firemní webu si pak uděláte jednoduchý formulář a ten POSTnete do Logic App.

V druhém kroku založím Resource Group v Azure.

Následně provedu deployment ARM šablony.

Důležité pro mě bude počkat, až to celé doběhne, aby už aplikace byla připravena.

V dalším kroku potřebuji parsovat output z deploymentu. V něm je uložena výsledná URL, kam se zákazník může připojit, ale je v JSON struktuře.

Tím pádem mám vše potřebné k poslání emailu zákazníkovi.

Výsledný email vypadá takhle:

Zákazník klikne na odkaz a už vidí WordPress a může si s ním hrát.

Nicméně doba na zkoušení bude omezena. Ve své Logic App použiji Delay, která její zpracování uspí (tzn. nebude čerpat peníze, jen po vypršení doby se probudí a bude pokračovat dál). Mohou to být minuty, hodiny, dny, týdny i měsíce. Já pro demo nabídnu uživatelům zkoušení jen na dvě minuty.

Po vypršení doby chci zákazníka informovat, že prostředí bude zrušeno.

Přijde mu něco takového:

A následně zdroje v Azure zruším likvidací této Resource Group.

A to je všechno! Nádherně snadné.

Běh Logic App můžeme samozřejmě monitorovat.

 

A teď si představte co díky Logic App můžeme do tohoto workflow snadno přidat. Co kdyby třeba tato událost založila lead do CRM systému jako je Microsoft Dynamics nebo SFDC? Bude tam informace o startu zkoušení, takže můžete zákazníkovi zavolat a nabídnout pomoc. Po ukončení zkoušení můžete zavolat a nabídnout cenu. V průběhu zkoušení můžete třeba posílat informační emaily například 2 dny po založení (něco jako a víte, že se s tím dá dělat ještě to a to). Vaše workflow může obsahovat emaily s tlačítkem pro reakci zákazníka, které následné flow změní - třeba Chci objednat (a provede migraci na produkční prostředí) nebo Potřebuji pomoc (a zadáte do Dynamics požadavek na telefonát) nebo Už to nepotřebuji (a smažete zdroje dřív, ať je neplatíte).

 

ARM šablony a obecně Infrastructure as Code vám pomůže nejen u vnitřních procesů, ale i při nasazování pro zákazníky. Krásně se to dá obalit uceleným flow díky Logic Apps. Zlepšete svůj byznys a nabídněte demo svým zákazníkům snadno a téměř okamžitě.



Jak na Terraform pro Azure služby, které jsou zatím jen v Preview Automatizace
Datové hřiště - zpracování proudu událostí s Azure Stream Analytics nakopnuté Terraformem Automatizace
Datové hřiště - generátory fake dat do kontejneru zabalené Terraformem v Azure nahozené Automatizace
Datové hřiště - jak si hrát s daty bez sebemenšího kliknutí s Terraform a Azure Automatizace
Federace tokenů GitHub Actions s Azure Active Directory pro přístup z vaší CI/CD do Azure bez hesel Automatizace