Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Selling and automated provisioning of Microsoft/Azure products in a SaaS marketplace

Selling and automated provisioning of Microsoft/Azure products in a SaaS marketplace

Office 365, Azure marketplace and Azure Resource Manager templates selling on a SaaS marketplace.

DevOps@work 2018 in Rome
Global Azure Bootcamp 2018 in Rome

Giovanni Toraldo

March 23, 2018

More Decks by Giovanni Toraldo

Other Decks in Technology


  1. Selling and automated provisioning of Microsoft/Azure products in a SaaS

    marketplace Giovanni Toraldo twitter.com/gionn Cloudesire.com
  2. About me Giovanni Toraldo Open Source Enthusiast, Java coder, writer

    of the OpenNebula book, lead developer & co-founder at Cloudesire.com, shooting to 2 euro coin at 36 meters with medieval heavy crossbow during the weekends 3
  3. Microsoft Cloud Solution Provider Program CSP enables partners to become

    indirect resellers: • own the customer lifecycle and relationship end-to-end • set the price, terms and directly bill customers • directly provision and manage subscriptions • attach value-added services • be the first point of contact for customer support https://partner.microsoft.com/en-us/cloud-solution-provider/w hats-required 5
  4. 6

  5. 7

  6. Azure services under CSP • Pay-as-you-go billing model • Build

    on top of Azure Resource Manager (ARM) • Subscription created in a customer tenant, but the customer cannot access it by default • Once a customer has access to the subscription, can make changes to services anche alter consumption usage 8
  7. What is Cloudesire 10 A Marketplace where different type of

    products can be sold: • Web applications that needs a VM to run • Web applications self-hosted (multi-tenant, e.g. dropbox) • Services (whatever can be billed) A control panel where different users access a set of features: • Customers: unified applications portal, billing, support • Vendors: catalog, subscriptions, invoices, earnings • Distributors: manage resellers catalogs • Reseller: sell distributors products
  8. Cloudesire syndication A syndicated application in Cloudesire is an application

    that is directly managed by the software vendor. This feature enables software vendors to sell applications that are already hosted somewhere and that has native support for multi-tenancy. The provisioning of a new tenant should be almost instantaneous, and the integration has to be done directly via Cloudesire API. https://docs.cloudesire.com/docs/syndication.html 11
  9. How syndication works Cloudesire platform will send HTTP requests (POST

    with a JSON body) to an external endpoint every time an interesting event occurs on the marketplace lifecycle: • Subscription requested • Subscription renewal • Subscription termination The external endpoint should handle these notifications, e.g. fetch the needed information, provision a new user in its system and update the subscription status via Cloudesire API https://docs.cloudesire.com/docs/syndication.html#introduction-to-syndication 12
  10. 13 Example JSON webhook notification POST /endpoint HTTP/1.1 Accept: application/json

    Content-Type: application/json; charset=utf-8 Host: vendor.example.org CMW-Event-Signature: sha1=bd637c3b084f7c5039aaf2808c3bc6bd7b6c283d { "date": "2015-01-12T11:19:30Z", "entity": "Subscription", "entityUrl": "subscription/2388", "id": "2388", "type": "CREATED" }
  11. 14

  12. Cloudesire-CSP integration process flow Azure Catalog CSP Catalog Cloudesire Marketplace

    Platform Microsoft Connector Microsoft CSP Customers Webhook push notifications (purchase orders) Invoke API (pay-per-use azure) REST API provisioning & delivery provisioning & delivery 1 2 3 5 5 Azure Connector ARM Resource Manager REST API Invoke API (subscription-based orders) 4 15
  13. Microservice architecture 16 • Multiple heterogeneous software components • JSON

    REST API • Continuous Integration on CircleCI • Packaging with Docker • Provisioning on VM via Chef • Automatically added behind load balancer ◦ Nginx / Consul • Error tracking via Sentry
  14. Microsoft-connector • Spring-boot Java API microservice • Stateless • Handle

    cloudesire webhooks • Kotlin/Java client Partner Center REST API ◦ https://github.com/ClouDesire/partner-center-rest-api-client 1. Create customer resource 2. Place an order on the chosen product 3. Handle subscription created by order placing a. Suspend/Resume b. Unprovision 17
  15. Azure-marketplace-connector • NodeJS API microservice ◦ Expose API consumed by

    our microsoft-connector • Implement Azure SDK for nodejs ◦ https://github.com/Azure/azure-sdk-for-node • Redis as pending job queue state Features: ◦ Management of ARM templates ◦ Accept end-user agreement via API ▪ Found a bug 20
  16. 21

  17. Hook inside the cloudesire platform • Create a new syndicated

    product • Configure syndicated endpoint for webhooks ◦ Subscription/Customer lifecycle: ▪ Creation ▪ Modification ▪ Deletion • Configure integration metadata • Profit 23
  18. Configure product to activate (control panel) To know which specific

    Microsoft products needs to be activated, we need to know and configure the unique ID of the specific product / plan 25
  19. 26

  20. 28

  21. License pricing per seat (control panel) • Basic pricing configuration,

    volume discounts, tiers, ecc ◦ https://docs.cloudesire.com/docs/platform.html#extra-resources-pricing-models 29
  22. 31

  23. 32

  24. Azure marketplace onboarding • Generic offer id representing the pay-per-use

    Azure subscription • Additional metadata to configure: ◦ Publisher identifier ◦ Image identifier 35
  25. Azure marketplace onboarding • End-user should configure a global prefix

    to access its own instance when buying the service 37
  26. ARM templates onboarding • Templates are JSON files that describe

    a deployment architecture ◦ Azure resources for ▪ Application ▪ Data ▪ Network ▪ DNS access • Re-use the Azure Marketplace configuration with more configuration parameter to link the JSON template and configure required variables 39
  27. 40

  28. Personal applications dashboard subscription renewal CTA self-generated URL to access

    the Azure Marketplace application “launch” CTA for directly access the provisioned app product rating, direct messaging with the vendor/distributor 45