github.com/yoctocloud/packer@v0.6.2-0.20160520224004-e11a0a18423f/website/source/docs/builders/azure.html.md (about)

     1  ---
     2  description: |
     3  
     4  layout: docs
     5  page_title: Azure Resource Manager
     6  ...
     7  
     8  # Azure Resource Manager Builder
     9  
    10  Type: `azure-arm`
    11  
    12  Packer supports building VHDs in [Azure Resource Manager](https://azure.microsoft.com/en-us/documentation/articles/resource-group-overview/). Azure provides new users a [$200 credit for the first 30 days](https://azure.microsoft.com/en-us/free/); after which you will incur costs for VMs built and stored using Packer.
    13  
    14  Unlike most Packer builders, the artifact produced by the ARM builder is a VHD (virtual hard disk), not a full virtual machine image. This means you will need to [perform some additional steps](https://github.com/Azure/packer-azure/issues/201) in order to launch a VM from your build artifact.
    15  
    16  Azure uses a combination of OAuth and Active Directory to authorize requests to the ARM API. Learn how to [authorize access to ARM](/docs/builders/azure-setup.html).
    17  
    18  The documentation below references command output from the [Azure CLI](https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-install/).
    19  
    20  ## Configuration Reference
    21  
    22  The following configuration options are available for building Azure images. In addition to the options listed here, a
    23  [communicator](/docs/templates/communicator.html) can be configured for this
    24  builder.
    25  
    26  ### Required:
    27  
    28  -   `client_id` (string) The Active Directory service principal associated with your builder.
    29  
    30  -   `client_secret` (string) The password or secret for your service principal.
    31  
    32  -   `resource_group_name` (string) Resource group under which the final artifact will be stored.
    33  
    34  -   `storage_account` (string) Storage account under which the final artifact will be stored.
    35  
    36  -   `subscription_id` (string) Subscription under which the build will be performed. **The service principal specified in `client_id` must have full access to this subscription.**
    37  
    38  -   `tenant_id` (string) The account identifier with which your `client_id` and `subscription_id` are associated.
    39  
    40  -   `capture_container_name` (string) Destination container name. Essentially the "folder" where your VHD will be organized in Azure.
    41  
    42  -   `capture_name_prefix` (string) VHD prefix. The final artifacts will be named `PREFIX-osDisk.UUID` and `PREFIX-vmTemplate.UUID`.
    43  
    44  -   `image_publisher` (string) PublisherName for your base image. See [documentation](https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/) for details.
    45  
    46      CLI example `azure vm image list-publishers -l westus`
    47  
    48  -   `image_offer` (string) Offer for your base image. See [documentation](https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/) for details.
    49  
    50      CLI example `azure vm image list-offers -l westus -p Canonical`
    51  
    52  -   `image_sku` (string) SKU for your base image. See [documentation](https://azure.microsoft.com/en-us/documentation/articles/resource-groups-vm-searching/) for details.
    53  
    54      CLI example `azure vm image list-skus -l westus -p Canonical -o UbuntuServer`
    55  
    56  -   `location` (string) Azure datacenter in which your VM will build.
    57  
    58      CLI example `azure location list`
    59  
    60  ### Optional:
    61  
    62  -   `cloud_environment_name` (string) One of `Public`, `China`, or
    63      `USGovernment`. Defaults to `Public`. Long forms such as
    64      `USGovernmentCloud` and `AzureUSGovernmentCloud` are also supported.
    65  
    66  -   `image_version` (string) Specify a specific version of an OS to boot from.
    67      Defaults to `latest`.
    68  
    69  -   `object_id` (string) Specify an OAuth Object ID to protect WinRM certificates
    70      created at runtime.  This variable is required when creating images based on
    71      Windows; this variable is not used by non-Windows builds.  See `Windows`
    72      behavior for `os_type`, below.
    73  
    74  -   `os_type` (string) If either `Linux` or `Windows` is specified Packer will
    75      automatically configure authentication credentials for your machine. For
    76      `Linux` this configures an SSH authorized key. For `Windows` this
    77      configures your Tenant ID, Object ID, Key Vault Name, Key Vault Secret, and
    78      WinRM certificate URL.
    79  
    80  -   `vm_size` (string) Size of the VM used for building. This can be changed
    81      when you deploy a VM from your VHD. See
    82      [pricing](https://azure.microsoft.com/en-us/pricing/details/virtual-machines/) information. Defaults to `Standard_A1`.
    83  
    84      CLI example `azure vm sizes -l westus`
    85  
    86  
    87  ## Basic Example
    88  
    89  Here is a basic example for Azure.
    90  
    91  ``` {.javascript}
    92  {
    93      "type": "azure-arm",
    94  
    95      "client_id": "fe354398-d7sf-4dc9-87fd-c432cd8a7e09",
    96      "client_secret": "keepitsecret&#*$",
    97      "resource_group_name": "packerdemo",
    98      "storage_account": "virtualmachines",
    99      "subscription_id": "44cae533-4247-4093-42cf-897ded6e7823",
   100      "tenant_id": "de39842a-caba-497e-a798-7896aea43218",
   101  
   102      "capture_container_name": "images",
   103      "capture_name_prefix": "packer",
   104  
   105      "os_type": "Linux",
   106      "image_publisher": "Canonical",
   107      "image_offer": "UbuntuServer",
   108      "image_sku": "14.04.4-LTS",
   109  
   110      "location": "West US",
   111      "vm_size": "Standard_A2"
   112  }
   113  ```
   114  
   115  ## Implementation
   116  
   117  \~> **Warning!** This is an advanced topic. You do not need to understand the implementation to use the Azure
   118  builder.
   119  
   120  The Azure builder uses ARM
   121  [templates](https://azure.microsoft.com/en-us/documentation/articles/resource-group-authoring-templates/) to deploy
   122  resources.  ARM templates make it easy to express the what without having to express the how.
   123  
   124  The Azure builder works under the assumption that it creates everything it needs to execute a build.  When the build has
   125  completed it simply deletes the resource group to cleanup any runtime resources.  Resource groups are named using the
   126  form `packer-Resource-Group-<random>`. The value `<random>` is a random value that is generated at every invocation of
   127  packer.  The `<random>` value is re-used as much as possible when naming resources, so users can better identify and
   128  group these transient resources when seen in their subscription.
   129  
   130   > The VHD is created on a user specified storage account, not a random one created at runtime.  When a virtual machine
   131   is captured the resulting VHD is stored on the same storage account as the source VHD.  The VHD created by Packer must
   132   persist after a build is complete, which is why the storage account is set by the user.
   133  
   134  The basic steps for a build are:
   135  
   136   1. Create a resource group.
   137   1. Validate and deploy a VM template.
   138   1. Execute provision - defined by the user; typically shell commands.
   139   1. Power off and capture the VM.
   140   1. Delete the resource group.
   141   1. Delete the temporary VM's OS disk.
   142  
   143  The templates used for a build are currently fixed in the code.  There is a template for Linux, Windows, and KeyVault.
   144  The templates are themselves templated with place holders for names, passwords, SSH keys, certificates, etc.
   145  
   146  ### What's Randomized?
   147  
   148  The Azure builder creates the following random values at runtime.
   149  
   150   * Administrator Password: a random 32-character value using the *password alphabet*.
   151   * Certificate: a 2,048-bit certificate used to secure WinRM communication.  The certificate is valid for 24-hours, which starts roughly at invocation time.
   152   * Certificate Password: a random 32-character value using the *password alphabet* used to protect the private key of the certificate.
   153   * Compute Name: a random 15-character name prefixed with pkrvm; the name of the VM.
   154   * Deployment Name: a random 15-character name prefixed with pkfdp; the name of the deployment.
   155   * KeyVault Name: a random 15-character name prefixed with pkrkv.
   156   * OS Disk Name: a random 15-character name prefixed with pkros.
   157   * Resource Group Name: a random 33-character name prefixed with packer-Resource-Group-.
   158   * SSH Key Pair: a 2,048-bit asymmetric key pair; can be overriden by the user.
   159  
   160  The default alphabet used for random values is **0123456789bcdfghjklmnpqrstvwxyz**.  The alphabet was reduced (no
   161  vowels) to prevent running afoul of Azure decency controls.
   162  
   163  The password alphabet used for random values is **0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ**.
   164  
   165  ### Windows
   166  
   167  The Windows implementation is very similar to the Linux build, with the exception that it deploys a template to
   168  configure KeyVault. Packer communicates with a Windows VM using the WinRM protocol.  Windows VMs on Azure default to
   169  using both password and certificate based authentication for WinRM.  The password is easily set via the VM ARM template,
   170  but the certificate requires an intermediary. The intermediary for Azure is KeyVault.  The certificate is uploaded to a
   171  new KeyVault provisioned in the same resource group as the VM.  When the Windows VM is deployed, it links to the
   172  certificate in KeyVault, and Azure will ensure the certificate is injected as part of deployment.
   173  
   174  The basic steps for a Windows build are:
   175  
   176    1. Create a resource group.
   177    1. Validate and deploy a KeyVault template.
   178    1. Validate and deploy a VM template.
   179    1. Execute provision - defined by the user; typically shell commands.
   180    1. Power off and capture the VM.
   181    1. Delete the resource group.
   182    1. Delete the temporary VM's OS disk.
   183  
   184  A Windows build requires two templates and two deployments.  Unfortunately, the KeyVault and VM cannot be deployed at
   185  the same time hence the need for two templates and deployments.  The time required to deploy a KeyVault template is
   186  minimal, so overall impact is small.
   187  
   188   > The KeyVault certificate is protected using the object_id of the SPN.  This is why Windows builds require object_id,
   189   and an SPN.  The KeyVault is deleted when the resource group is deleted.
   190  
   191  See the [examples/azure](https://github.com/mitchellh/packer/tree/master/examples/azure) folder in the packer project
   192  for more examples.