All Projects → gabrielweyer → azure-vm-pricing

gabrielweyer / azure-vm-pricing

Licence: MIT License
Mass-pricing of VMs on Azure based on CPU cores count and memory.

Programming Languages

typescript
32286 projects
C#
18002 projects

Projects that are alternatives of or similar to azure-vm-pricing

haneul
누리 프로그래밍 언어의 RPython 백엔드입니다.
Stars: ✭ 19 (+35.71%)
Mutual labels:  virtual-machine
RVM
Rcore Virtual Machine
Stars: ✭ 59 (+321.43%)
Mutual labels:  virtual-machine
ModSecurityCRS
Implementation of ModSecurity, Core Rule Set (CRS) on Apache server. ModSecurity, sometimes called Modsec, is an open-source web application firewall. ModSecurity was installed and configured on an Ubuntu VM using Virtual Box
Stars: ✭ 24 (+71.43%)
Mutual labels:  virtual-machine
Animach
Scheme语言实现和运行时环境 / A Scheme runtime & implementation
Stars: ✭ 45 (+221.43%)
Mutual labels:  virtual-machine
kcs
Scripting in C with JIT(x64)/VM.
Stars: ✭ 25 (+78.57%)
Mutual labels:  virtual-machine
vein
🔮⚡️Vein is an open source high-level strictly-typed programming language with a standalone OS, arm and quantum computing support.
Stars: ✭ 31 (+121.43%)
Mutual labels:  virtual-machine
lip
An embeddable LISP in C99
Stars: ✭ 16 (+14.29%)
Mutual labels:  virtual-machine
Lubuntu-VirtualBox
Lubuntu Bionic 18.04.5 Minimal and Full virtual machines. VirtualBox OVA files less than 400 MB and 1GB respectively
Stars: ✭ 25 (+78.57%)
Mutual labels:  virtual-machine
8BitComputer
A simple 8 bit computer emulator in C++.
Stars: ✭ 18 (+28.57%)
Mutual labels:  virtual-machine
hematita
A memory safe Lua interpreter
Stars: ✭ 118 (+742.86%)
Mutual labels:  virtual-machine
jingle
🔔 Jingle is a dynamically-typed, multi-paradigm programming language designed for humans and machines.
Stars: ✭ 34 (+142.86%)
Mutual labels:  virtual-machine
vagrant-dspace
(No longer actively maintained. Replaced by Docker compose in main codebase.) DSpace + Vagrant. Quickly spin up a virtual machine (via Vagrant) which is "DSpace development ready"
Stars: ✭ 37 (+164.29%)
Mutual labels:  virtual-machine
jaws
Jaws is an invisible programming language! Inject invisible code into other languages and files! Created for security research -- see blog post
Stars: ✭ 204 (+1357.14%)
Mutual labels:  virtual-machine
MarsAnalytica
My RE challenge from Northsec 2018.
Stars: ✭ 14 (+0%)
Mutual labels:  virtual-machine
nolimix86
LLVM-based x86 emulator with support for unlimited virtual registers, used before the register allocation pass
Stars: ✭ 19 (+35.71%)
Mutual labels:  virtual-machine
misp-vagrant
Deploy MISP Project software with Vagrant.
Stars: ✭ 37 (+164.29%)
Mutual labels:  virtual-machine
vm-automation
VirtualBox automation using Python
Stars: ✭ 1 (-92.86%)
Mutual labels:  virtual-machine
birsh
virsh replacement in bash
Stars: ✭ 14 (+0%)
Mutual labels:  virtual-machine
Windows-11-VPS
😎😘 Free Windows 11 VPS for 4 Hours ! Easy Method!
Stars: ✭ 70 (+400%)
Mutual labels:  virtual-machine
X11Basic
X11-Basic BASIC programming language.
Stars: ✭ 42 (+200%)
Mutual labels:  virtual-machine

Azure VM pricing

Mass-pricing of VMs on Azure based on CPU cores count and memory. This is useful when costing a lift-and-shift migration dealing with many thousands VMS of varied sizes.

The pricing is retrieved from Virtual Machines Pricing.

🚨 This tool will only provide you with an estimation. Depending on your Azure spends you might be able to get a better deal from Microsoft. You should use the output of this tool as a coarse-grain estimation. On top of the VM price you will also need to consider storage and egress costs.

This tool is composed of two components:

  1. A Parser retrieving the pricing from Virtual Machines Pricing
  2. A Coster using the output from the Parser and a list of VM specifications to determine their price

This approach allows to decouple pricing acquisition from its usage and open the door to automation. The Parser can be scheduled to retrieve the pricing at regular interval and the Coster can then use an always up-to-date pricing.

Build Status

Build Status

Parser

Retrieve VMs hourly pricing for a specific combination of culture, currency, operating system and region.

Culture Culture display name Currency Currency display name Support
en-us English (US) usd US Dollar ($)
cs-cz Čeština eur[1] Euro (€)
da-dk Dansk dkk Danish Krone (kr)
de-de Deutsch eur Euro (€)
chf[9] Swiss Franc. (chf)
en-au English (Australia) aud Australian Dollar ($)
en-ca English (Canada) cad Canadian Dollar ($)
en-in English (India) inr Indian Rupee (₹)
en-gb English (UK) gpb British Pound (£)
nzd[7] New Zealand Dollar ($)
es-es Español eur Euro (€)
es-mx Español (MX) usd[3] US Dollar ($)
fr-fr Français eur Euro (€)
chf[9] Swiss Franc. (chf)
fr-ca Français (Canada) cad Canadian Dollar ($)
it-it Italiano eur Euro (€)
chf[9] Swiss Franc. (chf)
hu-hu Magyar eur[1] Euro (€)
nb-no Norsk nk Norwegian Krone (kr)
nl-nl Nederlands eur Euro (€)
pl-pl Polski eur[1] Euro (€)
pt-br Português (Brasil) brl Brazilian Real (R$)
pt-pt Português eur Euro (€)
sv-se Svenska sek Swedish Krona (kr)
tr-tr Türkçe usd[3] US Dollar ($)
ru-ru Pусский rub Russian Ruble (руб)
ja-jp 日本語 jpy Japanese Yen (¥)
ko-kr 한국어 krw Korean Won (₩)
zh-cn 中文(简体) N/A N/A N/A
zh-tw 中文(繁體) twd Taiwanese Dollar (NT$)

🚨 the parser is not - yet - able to retrieve pricing for the regions east-china2, north-china2, east-china and north-china as it is available on a different website.

🚨 the parser is not able to retrieve pricing for the regions us-dod-central and us-dod-east as no virtual machines are listed as publicly available.

Parser pre-requisites

> cd .\parser\
> yarn

Parser usage

> cd .\parser\
> yarn crawl --culture en-us --currency usd --operating-system linux --region us-west

You can also use short names:

> yarn crawl -l en-us -c usd -o linux -r us-west

Arguments:

  • culture any of the option value in the Culture select
    • This will impact the formatting of the pricing
  • currency any of the option value in the Currency select
  • operating-system any of the option value in the OS/Software select
  • region any of the option value in the Region select

OS, Region amd Currency select

In the footer:

Culture select

Parser output

Writes 2 output files in the out\ directory. One is a CSV, the other one is JSON. Both files contain the same data.

.\out\vm-pricing_<region>_<operating-system>.csv
.\out\vm-pricing_<region>_<operating-system>.json

Fields:

  • Instance
  • vCPU
  • RAM
  • Pay as You Go
  • Pay as You Go With Azure Hybrid Benefit
  • One Year Reserved
  • One Year Reserved With Azure Hybrid Benefit
  • Three Year Reserved
  • Three Year Reserved With Azure Hybrid Benefit
  • Spot
  • Spot With Azure Hybrid Benefit

Parser tests

The parser has unit tests focusing on edge cases of price formatting:

> cd .\parser\
> yarn test

The end-to-end tests attempt to compare known prices for the windows instance D2 v3 in us-west using permutations of supported culture and currency:

> cd .\parser\
> yarn e2e-all

Coster

Price VMs using the JSON pricing files generated by the Parser. The Coster will select the cheapest VM that has enough CPU cores and RAM.

Coster pre-requisites

Coster usage

You should paste the JSON pricing files generated by the Parser in the coster\src\AzureVmCoster\Pricing\ folder. Setting the culture is only relevant when dealing with pricing and input files that were written using another culture with a different decimal point (e.g. comma vs period).

In Release mode:

> cd .\coster\src\AzureVmCoster
> dotnet run --configuration Release -- --input <input-path> --culture <culture>
> dotnet run --configuration Release -- -i <input-path> -l <culture>
> dotnet run --configuration Release -- -i <input-path>

The culture is optional.

In Debug mode

> cd .\coster\src\AzureVmCoster
> dotnet run --configuration Debug
Input file path: <input-path>
Culture (leave blank for system default):

You'll need to provide the <input-path> when prompted, the culture is optional.

<input-path> should point to a CSV file with the following fields:

  • Region
  • Name
  • CPU (a short)
  • RAM (in GB, a decimal)
  • Operating System

The columns can be in any order and the CSV file can contain extra-columns. The Region and Operating System fields must match existing regions and supported operating systems in Azure.

Coster output

The Coster will generate a CSV file in the Out\ directory with the following fields:

  • Region
  • Name
  • Operating System
  • Instance
  • CPU
  • RAM
  • Pay as You Go
  • Pay as You Go With Azure Hybrid Benefit
  • One Year Reserved
  • One Year Reserved With Azure Hybrid Benefit
  • Three Year Reserved
  • Three Year Reserved With Azure Hybrid Benefit
  • Spot
  • Spot With Azure Hybrid Benefit

Notes and references

01. Euro is used for countries which don't have their currency listed, are part of the European Union but not part of the Eurozone.

03. USD is used when no other currency could be matched to the country.

07. English (UK) has been selected due to the use of New Zealand English in New Zealand.

09. German, French and Italian are three of the official languages of Switzerland.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].