How to license dockerized applications or virtual machine environments
We run several applications in a virtualized environment (also as a Docker and Kubernetes). These containers are usually being run on the AWS or Azure environments. How we can ensure that our applications are licensed and being used only within available entitlements.
Following options can be recommended here:
Option 1: Node-Locked
Use Node-Locked licensing model configured to be used with N nodes. The VMs will be identified by the UUID and paired with the issues Node-Locked license max. N times. Every N+1 pairing won’t be possible and will result in negative validation result.
- This option guarantees, that only entitled number of the VM instances (1..N) can be used by the customer.
- Long-living instances identified by permanent UUID; e.g. Hardware USB Dongle.
Option 2: Floating
Use Floating licensing model configured to be used with N seats. The VMs will be identified by the UUID and will check-out a free seat to be able to run. Max. N VMs can be used simultaneously.
- The borrowed seat can be checked in, so the free seats can be checked out by other VMs. This option is useful if the new VMs are being created frequently, so the new UUIDs will be generated every time.
- Start of the new AWS EC2 instances from the prepared AMI.
- Short-living instances; e.g. AWS Lambda.
- Autoscaling instances being created/destroyed based on the system load and capacity.
Machine ID & Fingerprint libraries
Both the options above require a unique instance UUID / Fingerprint. You can generate UUID based on your needs, chosen programming language and environment specifics. Below you can find some of the third-party libraries, which ease the generation of a unique fingerprint.
- Linux: machine-id
- Java: oshi/oshi
- Java: f4b6a3/uuid-creator
- C#: davcs86/csharp-uhwid
- C#: melchiork/Fingerprinty
- C++: Tarik02/machineid
- PHP: matomo-org/device-detector
- Python: thinkwelltwd/device_detector
- Golang: denisbrodbeck/machineid
- Rust: Taptiive/machineid-rs