AZURE APP SERVICE PLANS OVERVIEW

Introduction

The aim of this post is to give an overview of the current Azure App Service Plans, their pricing, assigned compute resources and features, to aid development teams to pick the service plan that best suits their needs and/or budget.

App Service SKUs

General SKU overview

Prices below are estimated monthly prices in Swedish Krona (divide by 10 for euros) for resources created in the “West Europe” region. 

Dev/Test subscription offers are not taken into account.

SKUMEMORYCPUPLATFORM
WIN | LINUX
PRICE LINUXPRICE WINDOWS
F11GB60min/dayBOTHFREEFREE
D11GB240min/dayWINDOWSN/A82 SEK
B11,75GB100 ACUBOTH114 SEK478 SEK
B23,5 GB200 ACUBOTH229 SEK957 SEK
B37GB400 ACUBOTH453 SEK1915 SEK
S11,75GB100 ACUBOTH605 SEK638 SEK
S23,5GB200 ACUBOTH1213 SEK1276 SEK
S37GB400 ACUBOTH2426 SEK2553 SEK
P1V23,5GB210 ACUBOTH734 SEK1276 SEK
P2V27GB420 ACUBOTH1474 SEK2553 SEK
P3V214GB840 ACUBOTH2949 SEK5107 SEK
P1V38GB195 ACU x2cpuBOTH1136 SEK2956 SEK
P2V316GB195 ACU x4cpuBOTH2272 SEK4315 SEK
P3V332GB195 ACU x8cpuBOTH4545 SEK8631 SEK

Glossary:

ACU: Azure Compute Units. 100 ACU are equivalent to the CPU of a Small Standard A1 Virtual Machine.

Premium V3 instances also offer reserved instances, leveraging an additional 25-40% discount with upfront payments for usage equivalent to 1 or 3 years.

Example:

SKUPay-as-you-go price1year reservation3-year reservation
P1V32157 SEK/month1609 SEK/month (-26%)1295 SEK/month (-40%)

Per compute resource SKU overview

MEM: 1,75GB – 100 ACU

SKUPRICE LINUXPRICE WINDOWS
B1114 SEK478 SEK
S1605 SEK638 SEK

MEM: 3,5GB – 200 ACU

SKUPRICE LINUXPRICE WINDOWS
B2229 SEK957 SEK
S21213 SEK1276 SEK
P1V2734 SEK1276 SEK

MEM: 7GB – 400 ACU

SKUPRICE LINUXPRICE WINDOWS
B3453 SEK1915 SEK
S32426 SEK2553 SEK
P2V2 (420 ACU)1474 SEK2553 SEK
P1V3 (8GB 195 ACU x2cpu)1136 SEK2956 SEK

MEM: 14GB – 840 ACU

SKUPRICE LINUXPRICE WINDOWS
P3V2 (840 ACU)1474 SEK2553 SEK
P2V3 (16GB 195 ACU x4cpu)2272 SEK4315 SEK

MEM: 32GB

SKU Features overview

SKUFree (F1)Basic
(B1,B2,B3)
Standard (S1, S2, S3)Premium
(P1Vx, P2Vx,…)
Isolated
UsageTry for freefor dev/testproduction workloadsEnhanced performance and scaleHigh-Performance, Security and Isolation
Web, mobile, or API apps10UnlimitedUnlimitedUnlimitedUnlimited
Disk space1 GB10 GB50 GB250 GB1 TB
Maximum instancesUp to 3Up to 10Up to 30Up to 100
Custom domainSupportedSupportedSupportedSupported
Auto ScaleSupportedSupportedSupported
Hybrid ConnectivitySupportedSupportedSupportedSupported
VNet IntegrationSupportedSupportedSupported
Private EndpointsSupportedSupported
Compute TypeSharedDedicatedDedicatedDedicatedIsolated

Bash special variables

This is more some kind of “note-to-self”, than a blog post.

All credit goes to the guys who answered this Stackoverflow question explaining different bash variables that we now and then need to look up again.

  • $1, $2, $3, … are the positional parameters.
  • "$@" is an array-like construct of all positional parameters, {$1, $2, $3 ...}.
  • "$*" is the IFS expansion of all positional parameters, $1 $2 $3 ....
  • $# is the number of positional parameters.
  • $- current options set for the shell.
  • $$ pid of the current shell (not subshell).
  • $_ most recent parameter (or the abs path of the command to start the current shell immediately after startup).
  • $IFS is the (input) field separator.
  • $? is the most recent foreground pipeline exit status.
  • $! is the PID of the most recent background command.
  • $0 is the name of the shell or shell script.
  • $_ last argument of last command
  • $* / $@ list of arguments passed to script as string / delimited list

Most of the above can be found under Special Parameters in the Bash Reference Manual. There are all the environment variables set by the shell.

For a comprehensive index, please see the Reference Manual Variable Index.

Bash ‘help’

Some commands you type in the shell are actually not binaries but shell (bash for example) buitins. For example, “alias” is such an shell builtin.

~# type alias

alias is a shell builtin

~# man alias

No manual entry for alias

In order to obtain more information about the “alias” builtin, you should type “man bash” and search what you are looking for in the hundreds of pages long man.

However, there is a quicker way! “help” helps you:

~# help alias

alias: alias [-p] [name[=value] … ]

    Define or display aliases.

    Without arguments, `alias’ prints the list of aliases in the reusable

    form `alias NAME=VALUE’ on standard output.

    Otherwise, an alias is defined for each NAME whose VALUE is given.

    A trailing space in VALUE causes the next word to be checked for

    alias substitution when the alias is expanded.    

    Options:

      -p Print all defined aliases in a reusable format

    Exit Status:

    alias returns true unless a NAME is supplied for which no alias has been

    defined.

 

Execute sudo from a cron script

Recently I bumped into this problem, and I wanted to share it’s easy solution:

Say you want to execute:

0 6 * * * /home/oraias/cron/restart.sh

Contents restart.sh:

#!/bin/bash
PID=$(ps aux | grep tomcat8 | grep -v grep | tr -s ” ” | cut -d” ” -f2)
kill -9 $PID
sleep 5
sudo systemctl start tomcat8

Each day at 6AM cron launches this script. It looks up the PID of a Java process with “tomcat8” in it’s argument list. Kills the process and starts it again. Since this script is being launched as a non-root user, sudo is required for systemctl operation (assuming you configured the sudoers file).

It might happen that the last line of the script silently fails. If this is also your case, check the following options in /etc/sudoers (make sure to open it with sudoedit):

#
# Disable “ssh hostname sudo <cmd>”, because it will show the password in clear.
# You have to run “ssh -t hostname sudo <cmd>”.
#
Defaults requiretty

#
# Refuse to run if unable to disable echo on the tty. This setting should also be
# changed in order to be able to use sudo without a tty. See requiretty above.
#
Defaults !visiblepw

Since cron doesn’t launch any TTY, the above options cause sudo to fail silently.

Comment out both to change this behavior.

 

4 years later

4 years have passed since my last post here. Oh yeah, I hear you thinking…that’s a loooong time. True, it is.

I have been doing a lot of different stuff in these last 4 years, I changed jobs, ended up in different projects, started a webshop (www.gastroiberico.com), got into Adwords, Analytics, marketing online, cloud computing and in the meantime also had another lovely daughter. Quite busy to be honest 🙂

Today seems like the perfect day to get back behind my keyboard and continue writing down those volatile snapshots of my mind 🙂

Cheers