github.com/jrperritt/terraform@v0.1.1-0.20170525065507-96f391dafc38/website/source/docs/providers/azurerm/r/virtual_machine_scale_sets.html.markdown (about)

     1  ---
     2  layout: "azurerm"
     3  page_title: "Azure Resource Manager: azurerm_virtual_machine_scale_sets"
     4  sidebar_current: "docs-azurerm-resource-virtualmachine-scale-sets"
     5  description: |-
     6    Create a Virtual Machine scale set.
     7  ---
     8  
     9  # azurerm\_virtual\_machine\_scale\_sets
    10  
    11  Create a virtual machine scale set.
    12  
    13  ~> **Note:** All arguments including the administrator login and password will be stored in the raw state as plain-text.
    14  [Read more about sensitive data in state](/docs/state/sensitive-data.html).
    15  
    16  ## Example Usage
    17  
    18  ```hcl
    19  resource "azurerm_resource_group" "test" {
    20    name     = "acctestrg"
    21    location = "West US"
    22  }
    23  
    24  resource "azurerm_virtual_network" "test" {
    25    name                = "acctvn"
    26    address_space       = ["10.0.0.0/16"]
    27    location            = "West US"
    28    resource_group_name = "${azurerm_resource_group.test.name}"
    29  }
    30  
    31  resource "azurerm_subnet" "test" {
    32    name                 = "acctsub"
    33    resource_group_name  = "${azurerm_resource_group.test.name}"
    34    virtual_network_name = "${azurerm_virtual_network.test.name}"
    35    address_prefix       = "10.0.2.0/24"
    36  }
    37  
    38  resource "azurerm_storage_account" "test" {
    39    name                = "accsa"
    40    resource_group_name = "${azurerm_resource_group.test.name}"
    41    location            = "westus"
    42    account_type        = "Standard_LRS"
    43  
    44    tags {
    45      environment = "staging"
    46    }
    47  }
    48  
    49  resource "azurerm_storage_container" "test" {
    50    name                  = "vhds"
    51    resource_group_name   = "${azurerm_resource_group.test.name}"
    52    storage_account_name  = "${azurerm_storage_account.test.name}"
    53    container_access_type = "private"
    54  }
    55  
    56  resource "azurerm_virtual_machine_scale_set" "test" {
    57    name                = "mytestscaleset-1"
    58    location            = "West US"
    59    resource_group_name = "${azurerm_resource_group.test.name}"
    60    upgrade_policy_mode = "Manual"
    61  
    62    sku {
    63      name     = "Standard_A0"
    64      tier     = "Standard"
    65      capacity = 2
    66    }
    67  
    68    os_profile {
    69      computer_name_prefix = "testvm"
    70      admin_username       = "myadmin"
    71      admin_password       = "Passwword1234"
    72    }
    73  
    74    os_profile_linux_config {
    75      disable_password_authentication = true
    76  
    77      ssh_keys {
    78        path     = "/home/myadmin/.ssh/authorized_keys"
    79        key_data = "${file("~/.ssh/demo_key.pub")}"
    80      }
    81    }
    82  
    83    network_profile {
    84      name    = "TestNetworkProfile"
    85      primary = true
    86  
    87      ip_configuration {
    88        name      = "TestIPConfiguration"
    89        subnet_id = "${azurerm_subnet.test.id}"
    90      }
    91    }
    92  
    93    storage_profile_os_disk {
    94      name           = "osDiskProfile"
    95      caching        = "ReadWrite"
    96      create_option  = "FromImage"
    97      vhd_containers = ["${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}"]
    98    }
    99  
   100    storage_profile_image_reference {
   101      publisher = "Canonical"
   102      offer     = "UbuntuServer"
   103      sku       = "14.04.2-LTS"
   104      version   = "latest"
   105    }
   106  }
   107  ```
   108  
   109  ## Example Usage with Managed Disks
   110  
   111  ```
   112  resource "azurerm_resource_group" "test" {
   113    name     = "acctestrg"
   114    location = "West US 2"
   115  }
   116  
   117  resource "azurerm_virtual_network" "test" {
   118    name                = "acctvn"
   119    address_space       = ["10.0.0.0/16"]
   120    location            = "West US 2"
   121    resource_group_name = "${azurerm_resource_group.test.name}"
   122  }
   123  
   124  resource "azurerm_subnet" "test" {
   125    name                 = "acctsub"
   126    resource_group_name  = "${azurerm_resource_group.test.name}"
   127    virtual_network_name = "${azurerm_virtual_network.test.name}"
   128    address_prefix       = "10.0.2.0/24"
   129  }
   130  
   131  resource "azurerm_public_ip" "test" {
   132    name                         = "test"
   133    location                     = "West US 2"
   134    resource_group_name          = "${azurerm_resource_group.test.name}"
   135    public_ip_address_allocation = "static"
   136    domain_name_label            = "${azurerm_resource_group.test.name}"
   137  
   138    tags {
   139      environment = "staging"
   140    }
   141  }
   142  
   143  resource "azurerm_lb" "test" {
   144    name                = "test"
   145    location            = "West US 2"
   146    resource_group_name = "${azurerm_resource_group.test.name}"
   147  
   148    frontend_ip_configuration {
   149      name                 = "PublicIPAddress"
   150      public_ip_address_id = "${azurerm_public_ip.test.id}"
   151    }
   152  }
   153  
   154  resource "azurerm_lb_backend_address_pool" "bpepool" {
   155    resource_group_name = "${azurerm_resource_group.test.name}"
   156    loadbalancer_id     = "${azurerm_lb.test.id}"
   157    name                = "BackEndAddressPool"
   158  }
   159  
   160  resource "azurerm_lb_nat_pool" "lbnatpool" {
   161    count                          = 3
   162    resource_group_name            = "${azurerm_resource_group.test.name}"
   163    name                           = "ssh"
   164    loadbalancer_id                = "${azurerm_lb.test.id}"
   165    protocol                       = "Tcp"
   166    frontend_port_start            = 50000
   167    frontend_port_end              = 50119
   168    backend_port                   = 22
   169    frontend_ip_configuration_name = "PublicIPAddress"
   170  }
   171  
   172  resource "azurerm_virtual_machine_scale_set" "test" {
   173    name                = "mytestscaleset-1"
   174    location            = "West US 2"
   175    resource_group_name = "${azurerm_resource_group.test.name}"
   176    upgrade_policy_mode = "Manual"
   177  
   178    sku {
   179      name     = "Standard_A0"
   180      tier     = "Standard"
   181      capacity = 2
   182    }
   183  
   184    storage_profile_image_reference {
   185      publisher = "Canonical"
   186      offer     = "UbuntuServer"
   187      sku       = "14.04.2-LTS"
   188      version   = "latest"
   189    }
   190  
   191    storage_profile_os_disk {
   192      name              = "myosdisk"
   193      caching           = "ReadWrite"
   194      create_option     = "FromImage"
   195      managed_disk_type = "Standard_LRS"
   196    }
   197  
   198    storage_profile_data_disk {
   199  	  lun 		   = 0
   200      caching        = "ReadWrite"
   201      create_option  = "Empty"
   202      disk_size_gb   = 10	
   203    }
   204  
   205    os_profile {
   206      computer_name_prefix = "testvm"
   207      admin_username       = "myadmin"
   208      admin_password       = "Passwword1234"
   209    }
   210  
   211    os_profile_linux_config {
   212      disable_password_authentication = true
   213  
   214      ssh_keys {
   215        path     = "/home/myadmin/.ssh/authorized_keys"
   216        key_data = "${file("~/.ssh/demo_key.pub")}"
   217      }
   218    }
   219  
   220    network_profile {
   221      name    = "terraformnetworkprofile"
   222      primary = true
   223  
   224      ip_configuration {
   225        name                                   = "TestIPConfiguration"
   226        subnet_id                              = "${azurerm_subnet.test.id}"
   227        load_balancer_backend_address_pool_ids = ["${azurerm_lb_backend_address_pool.bpepool.id}"]
   228        load_balancer_inbound_nat_rules_ids    = ["${element(azurerm_lb_nat_pool.lbnatpool.*.id, count.index)}"]
   229      }
   230    }
   231  
   232    tags {
   233      environment = "staging"
   234    }
   235  }
   236  ```
   237  
   238  ## Argument Reference
   239  
   240  The following arguments are supported:
   241  
   242  * `name` - (Required) Specifies the name of the virtual machine scale set resource. Changing this forces a
   243      new resource to be created.
   244  * `resource_group_name` - (Required) The name of the resource group in which to
   245      create the virtual machine scale set. Changing this forces a new resource to be created.
   246  * `location` - (Required) Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created.
   247  * `sku` - (Required) A sku block as documented below.
   248  * `upgrade_policy_mode` - (Required) Specifies the mode of an upgrade to virtual machines in the scale set. Possible values, `Manual` or `Automatic`.
   249  * `overprovision` - (Optional) Specifies whether the virtual machine scale set should be overprovisioned.
   250  * `single_placement_group` - (Optional) Specifies whether the scale set is limited to a single placement group with a maximum size of 100 virtual machines. If set to false, managed disks must be used. Default is true. Changing this forces a
   251      new resource to be created. See [documentation](http://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-placement-groups) for more information.
   252  * `os_profile` - (Required) A Virtual Machine OS Profile block as documented below.
   253  * `os_profile_secrets` - (Optional) A collection of Secret blocks as documented below.
   254  * `os_profile_windows_config` - (Required, when a windows machine) A Windows config block as documented below.
   255  * `os_profile_linux_config` - (Required, when a linux machine) A Linux config block as documented below.
   256  * `network_profile` - (Required) A collection of network profile block as documented below.
   257  * `storage_profile_os_disk` - (Required) A storage profile os disk block as documented below
   258  * `storage_profile_data_disk` - (Optional) A storage profile data disk block as documented below
   259  * `storage_profile_image_reference` - (Optional) A storage profile image reference block as documented below.
   260  * `extension` - (Optional) Can be specified multiple times to add extension profiles to the scale set. Each `extension` block supports the fields documented below.
   261  * `tags` - (Optional) A mapping of tags to assign to the resource.
   262  
   263  
   264  `sku` supports the following:
   265  
   266  * `name` - (Required) Specifies the size of virtual machines in a scale set.
   267  * `tier` - (Optional) Specifies the tier of virtual machines in a scale set. Possible values, `standard` or `basic`.
   268  * `capacity` - (Required) Specifies the number of virtual machines in the scale set.
   269  
   270  `os_profile` supports the following:
   271  
   272  * `computer_name_prefix` - (Required) Specifies the computer name prefix for all of the virtual machines in the scale set. Computer name prefixes must be 1 to 15 characters long.
   273  * `admin_username` - (Required) Specifies the administrator account name to use for all the instances of virtual machines in the scale set.
   274  * `admin_password` - (Required) Specifies the administrator password to use for all the instances of virtual machines in a scale set..
   275  * `custom_data` - (Optional) Specifies custom data to supply to the machine. On linux-based systems, this can be used as a cloud-init script. On other systems, this will be copied as a file on disk. Internally, Terraform will base64 encode this value before sending it to the API. The maximum length of the binary array is 65535 bytes. Changing this forces a new resource to be created.
   276  
   277  `os_profile_secrets` supports the following:
   278  
   279  * `source_vault_id` - (Required) Specifies the key vault to use.
   280  * `vault_certificates` - (Required, on windows machines) A collection of Vault Certificates as documented below
   281  
   282  `vault_certificates` support the following:
   283  
   284  * `certificate_url` - (Required) It is the Base64 encoding of a JSON Object that which is encoded in UTF-8 of which the contents need to be `data`, `dataType` and `password`.
   285  * `certificate_store` - (Required, on windows machines) Specifies the certificate store on the Virtual Machine where the certificate should be added to.
   286  
   287  
   288  `os_profile_windows_config` supports the following:
   289  
   290  * `provision_vm_agent` - (Optional) Indicates whether virtual machine agent should be provisioned on the virtual machines in the scale set.
   291  * `enable_automatic_upgrades` - (Optional) Indicates whether virtual machines in the scale set are enabled for automatic updates.
   292  * `winrm` - (Optional) A collection of WinRM configuration blocks as documented below.
   293  * `additional_unattend_config` - (Optional) An Additional Unattended Config block as documented below.
   294  
   295  `winrm` supports the following:
   296  
   297  * `protocol` - (Required) Specifies the protocol of listener
   298  * `certificate_url` - (Optional) Specifies URL of the certificate with which new Virtual Machines is provisioned.
   299  
   300  `additional_unattend_config` supports the following:
   301  
   302  * `pass` - (Required) Specifies the name of the pass that the content applies to. The only allowable value is `oobeSystem`.
   303  * `component` - (Required) Specifies the name of the component to configure with the added content. The only allowable value is `Microsoft-Windows-Shell-Setup`.
   304  * `setting_name` - (Required) Specifies the name of the setting to which the content applies. Possible values are: `FirstLogonCommands` and `AutoLogon`.
   305  * `content` - (Optional) Specifies the base-64 encoded XML formatted content that is added to the unattend.xml file for the specified path and component.
   306  
   307  `os_profile_linux_config` supports the following:
   308  
   309  * `disable_password_authentication` - (Required) Specifies whether password authentication should be disabled. Changing this forces a new resource to be created.
   310  * `ssh_keys` - (Optional) Specifies a collection of `path` and `key_data` to be placed on the virtual machine.
   311  
   312  ~> _**Note:** Please note that the only allowed `path` is `/home/<username>/.ssh/authorized_keys` due to a limitation of Azure_
   313  
   314  
   315  `network_profile` supports the following:
   316  
   317  * `name` - (Required) Specifies the name of the network interface configuration.
   318  * `primary` - (Required) Indicates whether network interfaces created from the network interface configuration will be the primary NIC of the VM.
   319  * `ip_configuration` - (Required) An ip_configuration block as documented below
   320  
   321  `ip_configuration` supports the following:
   322  
   323  * `name` - (Required) Specifies name of the IP configuration.
   324  * `subnet_id` - (Required) Specifies the identifier of the subnet.
   325  * `load_balancer_backend_address_pool_ids` - (Optional) Specifies an array of references to backend address pools of load balancers. A scale set can reference backend address pools of one public and one internal load balancer. Multiple scale sets cannot use the same load balancer.
   326  * `load_balancer_inbound_nat_rules_ids` - (Optional) Specifies an array of references to inbound NAT rules for load balancers.
   327  
   328  `storage_profile_os_disk` supports the following:
   329  
   330  * `name` - (Required) Specifies the disk name.
   331  * `vhd_containers` - (Optional) Specifies the vhd uri. Cannot be used when `image` or `managed_disk_type` is specified.
   332  * `managed_disk_type` - (Optional) Specifies the type of managed disk to create. Value you must be either `Standard_LRS` or `Premium_LRS`. Cannot be used when `vhd_containers` or `image` is specified.
   333  * `create_option` - (Required) Specifies how the virtual machine should be created. The only possible option is `FromImage`.
   334  * `caching` - (Optional) Specifies the caching requirements. Possible values include: `None` (default), `ReadOnly`, `ReadWrite`.
   335  * `image` - (Optional) Specifies the blob uri for user image. A virtual machine scale set creates an os disk in the same container as the user image.
   336                         Updating the osDisk image causes the existing disk to be deleted and a new one created with the new image. If the VM scale set is in Manual upgrade mode then the virtual machines are not updated until they have manualUpgrade applied to them.
   337                         When setting this field `os_type` needs to be specified. Cannot be used when `vhd_containers`, `managed_disk_type` or `storage_profile_image_reference ` are specified.
   338  * `os_type` - (Optional) Specifies the operating system Type, valid values are windows, linux.
   339  
   340  `storage_profile_data_disk` supports the following:
   341  
   342  * `lun` - (Required) Specifies the Logical Unit Number of the disk in each virtual machine in the scale set.
   343  `Premium_LRS`.
   344  * `create_option` - (Optional) Specifies how the data disk should be created. The only possible options are `FromImage` and `Empty`.
   345  * `caching` - (Optional) Specifies the caching requirements. Possible values include: `None` (default), `ReadOnly`, `ReadWrite`.
   346  * `disk_size_gb` - (Optional) Specifies the size of the disk in GB. This element is required when creating an empty disk.
   347  * `managed_disk_type` - (Optional) Specifies the type of managed disk to create. Value must be either `Standard_LRS` or 
   348  
   349  `storage_profile_image_reference` supports the following:
   350  
   351  * `publisher` - (Required) Specifies the publisher of the image used to create the virtual machines
   352  * `offer` - (Required) Specifies the offer of the image used to create the virtual machines.
   353  * `sku` - (Required) Specifies the SKU of the image used to create the virtual machines.
   354  * `version` - (Optional) Specifies the version of the image used to create the virtual machines.
   355  
   356  `extension` supports the following:
   357  
   358  * `name` - (Required) Specifies the name of the extension.
   359  * `publisher` - (Required) The publisher of the extension, available publishers can be found by using the Azure CLI.
   360  * `type` - (Required) The type of extension, available types for a publisher can be found using the Azure CLI.
   361  * `type_handler_version` - (Required) Specifies the version of the extension to use, available versions can be found using the Azure CLI.
   362  * `auto_upgrade_minor_version` - (Optional) Specifies whether or not to use the latest minor version available.
   363  * `settings` - (Required) The settings passed to the extension, these are specified as a JSON object in a string.
   364  * `protected_settings` - (Optional) The protected_settings passed to the extension, like settings, these are specified as a JSON object in a string.
   365  
   366  ## Attributes Reference
   367  
   368  The following attributes are exported:
   369  
   370  * `id` - The virtual machine scale set ID.
   371  
   372  
   373  ## Import
   374  
   375  Virtual Machine Scale Sets can be imported using the `resource id`, e.g.
   376  
   377  ```
   378  terraform import azurerm_virtual_machine_scale_set.scaleset1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mygroup1/providers/Microsoft.Compute/virtualMachineScaleSets/scaleset1
   379  ```