This document shows you install the Azure NPM module, then use an Azure Subscription to configure an Azure instance for a Scuba cluster. Perform the tasks in the order listed. Click a link to jump to a topic.

Prerequisites must be satisfied before you begin the following tasks.

  1. Request core and storage quota from Azure

  2. Download and install the Azure NPM

  3. Log in to the Azure Subscription and configure ARM

  4. Create an application and a service principle

  5. Create a role and show the account

  6. Submit information to provision a Scuba cluster


To successfully complete this process, you must have the following:

1. Request core and storage quota from Azure

Request a core and storage quota for your cluster from Azure in advance. These quotas should match the requirements for your cluster layout, including some additional for buffer. Make note of this information, as you will need it for step 6, to provision the Scuba cluster.

For information on requesting core and storage quotas, see the Azure solutions documentation, or contact Azure Support.

2. Download and install the Azure NPM 

In this task you download and install the NPM module for Azure, using command line instructions with a tool such as Terminal. For more information, see the npm Azure page

To download and install NPM for Azure, do the following:
  1. If you don’t have Node.js or npm installed on your Ubuntu system, open a Terminal window and use the following command. For Mac and Windows systems, go to the npm Azure package tutorial.

$  curl -sL | sudo -E bash -

2. Use the following command to get the latest nodejs package.

$  sudo apt-get install -y nodejs

3. Now you can download the Azure CLI NPM module and navigate to the node_modules/azure-cli/bin directory.

$  npm install azure-cli
$  cd node_modules/azure-cli/bin

3. Log in to the Azure Subscription and configure ARM

In this task you log in your Azure subscription and set the configuration to use ARM.

To log in to your Azure subscription and configure ARM, do the following:
  1. In the Terminal window, use the following command to initiate logging into your Azure subscription.

node_modules/azure-cli/bin$ ./azure login
info:    Executing command login

2. Use a web browser to open the page

3. Enter the displayed code to authenticate. In the following example, the subscription code is hidden.

Enter the code ######### to authenticate.

4. The following response is shown. In the following example, the subscription code is hidden.

-info:   Added subscription ----------------
info:    Added subscription -----------------
info:    login command OK

5. Set the the configuration to use ARM.

node_modules/azure-cli/bin$ ./azure config mode arm
info:    New mode is arm

4. Create an application and service principle

In this task you create an application (for Scuba) with a secret, and then use the AppID to create a service principle.

To create an application and a service principle, do the following:
  1. To create an application (for Scuba), use the following command. Make a note of the AppID for use in the next step.

node_modules/azure-cli/bin$ ./azure ad app create --name "Scuba" --home-page "" -i "" --password "<replace_with_random_password>"
+ Creating application Scuba                                               
data:    AppId:                   [A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]
data:    ObjectId:                ecf07ff3-8058-45ed-9947-a21479eb2d03
data:    DisplayName:             Scuba
data:    IdentifierUris:          0=
data:    ReplyUrls:             
data:    AvailableToOtherTenants:  False
data:    AppPermissions:      
data:                             claimValue:  user_impersonation
data:                             description:  Allow the application to access Scuba on behalf of the signed-in user.
data:                             directAccessGrantTypes:
data:                             displayName:  Access Scuba
data:                             impersonationAccessGrantTypes:  impersonated=User, impersonator=Application
data:                             isDisabled:
data:                             origin:  Application
data:                             permissionId:  aed80878-75f0-43db-acd5-57a9d2ffe046
data:                             resourceScopeType:  Personal
data:                             userConsentDescription:  Allow the application to access Scuba on your behalf.
data:                             userConsentDisplayName:  Access Scuba
data:                             lang:
info:    ad app create command OK

2. Create a Service Principle using the AppId from the previous step. Make a note of the Object Id for when you create a role in the next section.

node_modules/azure-cli/bin$ ./azure ad sp create [A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]
info:    Executing command ad sp create
+ Creating service principal for application [A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]
data:    Object Id:               39b17ad6-ce3d-unique-ObjectId-558c54dcdc42
data:    Display Name:            Scuba
data:    Service Principal Names:
data:                             0892eb09-2dc0-4010-8620-0eeb9a8db7cf
info:    ad sp create command OK

5. Create a role and show the account

In this task you create a role using the Object ID generated in the previous section, then show the account.

To create a role and show the account, do the following:
  1. To create a role, enter the following command, using the Object Id generated when you created a Service Principle in the previous section.

node_modules/azure-cli/bin$ ./azure role assignment create --objectId 39b17ad6-ce3d-unique-ObjectId-558c54dcdc42 -o Owner -c /subscriptions/[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]
info:    Executing command role assignment create
+ Finding role with specified name                                            
-data:   RoleAssignmentId    : /subscriptions/[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]/providers/Microsoft.Authorization/roleAssignments/f4ee00a7-a147-49a3-bad3-41d9cc838a25
data:    RoleDefinitionName   : Owner
data:    RoleDefinitionId     : 8e3af657-a8ff-443c-a75c-2fe8c4bcb635
data:    Scope                : /subscriptions/[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]-[A-Z+a-z+0-9]
data:    Display Name         : Scuba
data:    SignInName           :
data:    ObjectId             : 39b17ad6-ce3d-unique-ObjectId-558c54dcdc42
data:    ObjectType           : ServicePrincipal

2. To show the details of the Azure account, log in to the VM and enter the following command. Make a note of the Tenant ID.

(bastion)youuser@ubuntu14-vm:~/scuba/node_modules/azure-cli/bin$ ./azure account show
info:    Executing command account show
data:    Name                        : Microsoft Azure Internal Consumption
data:    ID                          : d725682b-your-unique-id-19a9cedeb659
data:    State                       : Enabled
data:    Tenant ID                   : 72f988bf-unique-tenant-id-2d7cd011db47
data:    Is Default                  : true
data:    Environment                 : AzureCloud
data:    Has Certificate             : No
data:    Has Access Token            : Yes
data:    User name                   :
info:    account show command OK

6. Submit information to provision a Scuba cluster

This task outlines the information you need gather and submit to Scuba to provision a new cluster in Azure. 

Submit the following information to Scuba for your cluster:
  1. The App Id that you generated when you created an application (in step 4).

  2. The Application Secret that you specified when you created an application (in step 4).

  3. The Tenant ID that you generated when showing the account (in step 5).

  4. The Region in which the cluster is to be deployed.

  5. The Subscription ID, from your Azure Portal.

  6. Cluster sizing defined while Planning your Scuba deployment.

  7. Core and Storage quota you requested from Azure, such as:

    1. Quantity of VM Types with respective region:
      [Example: 500 cores,  D3s, East US 2]
      [Example: 100 cores, A7s, Central US]

Also include the following information:

  • Date of core fulfillment:

  • Request is temporary (Yes/No)? If yes, include the details.

  • Bursting usage pattern (Yes/No)? If yes, include the details.

  • With which team and service do you belong:

  • Business Justification: 

  • Amount of Premium Storage in GB or TB: 

What's Next

After the cluster is deployed, you are ready to add data.