> For the complete documentation index, see [llms.txt](https://docs.expel.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.expel.io/connect-your-technology/expel-assembler/deploy-the-virtual-machine/deploy-the-assembler-in-microsoft-azure.md).

# Deploy the Assembler in Microsoft Azure

Each assembler you create must be deployed via a virtual machine, and then you can add your technology as a security device in Workbench to complete the full integration. For more information about the Expel Assembler or how it works, see the [About the Expel Assembler guide](/connect-your-technology/expel-assembler/about-the-expel-assembler.md).

## Prerequisites

1. You must have completed all of the steps in [Add a New Assembler](/connect-your-technology/expel-assembler/add-a-new-assembler.md) for each assembler you wish to deploy.
2. You must extract the Fedora CoreOS image file you [downloaded](/connect-your-technology/expel-assembler/add-a-new-assembler.md#step-3-download-the-base-coreos-image-artifact). You will need to upload the .vhd file, not the compressed .xz file, in this guide.
3. Make sure your network security group (for your [firewall configuration](/connect-your-technology/expel-assembler/add-a-new-assembler.md#step-2-update-your-firewall-configuration)) is in a [resource group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal), and that you know which group it is. You will need to place the storage account, image, and virtual machine from this guide in that same resource group.

## Step 1: Download the Ignition File

The Ignition file enables the virtual machine to read a configuration file and to provision the Fedora CoreOS system based on the contents of that file. You will use this file when you configure the virtual machine in Azure.

1. [Log in to Workbench](https://workbench.expel.io/auth/login?orig=%2F).
2. In the side menu, navigate to **Organization Settings > Assemblers**.
3. Find the assembler you created, leave the file format as JSON, and select **Download the CoreOS Ignition File**. This action will download a JSON file that you will need in the next section.

{% hint style="info" %}
You may choose a different file format if you like, but the JSON format is recommended for this type of assembler.
{% endhint %}

<figure><img src="/files/Eafkj0BJOEqa4x4PfyJF" alt="Select the JSON format in the right menu, and then select the download link."><figcaption></figcaption></figure>

4. Repeat this process for any additional assemblers.

{% hint style="warning" %}
You must keep track of which files came from which assembler, because each assembler has its own unique ignition file.
{% endhint %}

## Step 2: Upload the Virtual Hard Disk (VHD) to Azure

You must create a place to store the CoreOS image in Azure. Follow these steps to upload the .vhd file through the Azure Portal.

{% hint style="info" %}
If you prefer using the Azure CLI, see [Upload a VHD to Azure or copy a managed disk to another region - Azure CLI.](https://learn.microsoft.com/en-us/azure/virtual-machines/linux/disks-upload-vhd-to-managed-disk-cli)&#x20;
{% endhint %}

1. Log in to <https://portal.azure.com/>.
2. Select **Storage Accounts**.
3. Select **Create**.
4. Select the **subscription** and **resource group** that contains your network security group.
5. Select a region.

{% hint style="info" %}
This should be the same region as your resource group.
{% endhint %}

6. For **Performance and Redundancy**, leave it as the defaults.
7. Select **Review**.
8. Scroll down and select **Create**.
9. After the deployment completes, select **Go to resource**.
10. Under the **Properties** section, select **Blob service**.
11. Select **Container** to create a new storage container.
12. Give the new container a name and select **Create**.
13. Select the new container's name in the list.
14. Select **Upload** and choose the choose the [Fedora CoreOS image file](/connect-your-technology/expel-assembler/add-a-new-assembler.md#step-3-download-the-base-coreos-image-artifact) you downloaded.

{% hint style="warning" %}

* Make sure you have extracted the file and are uploading the .vhd file, not the compressed .xz file.
* The upload may take a while, as the file is large.
  {% endhint %}

15. Once the upload completes, a new blob appears in the list with the name of your .vhd file.

## Step 3: Create a Virtual Machine From the VHD

Now you will configure the image and virtual machine, provide the contents of the ignition file, and deploy the virtual machine.

{% hint style="info" %}
Azure requires you to have an SSH key, but SSH is disabled by default on all Expel assemblers. If you require SSH access to this VM in the future, [contact Support](/support/how-to-reach-us.md).
{% endhint %}

1. In Azure, type "Images" into the main search bar to quickly navigate to the **Images** service.
2. Select **Create**.
3. Configure the following:
   * **Subscription / Resource Group** - ensure these match what you selected for your storage account.
   * **Name** - enter a name for your image.
   * **Region** - select same region as your previous resources.
   * **Zone Resiliency** - leave unchecked.
   * **OS type** - Linux.
   * **VM Generation** - Gen 1.
   * **Storage blob** - browse to the storage account, ccontainer, and select the image file you uploaded. Click **Select**.
   * **Account type** - your choice. *This is the storage location of the image, not your virtual machine itself, so Standard HDD performance is acceptable.*
   * **Host caching** - leave as **Read/write**.
   * **Key management** - leave as the default.
   * **Data disk** - no action needed.
4. Select **Review + Create**.
5. After the image validates, select **Create**.
6. After the deployment completes, select **Go to resource**.
7. Select **Create VM**.
8. Configure the **Basics** section as follows:
   * **Subscription/Resource Group** - these should default to your previously selected options.
   * **Virtual machine name** - enter a name of your choosing.
   * **Region** - this defaults to the region you previously selected.
   * **Availability options** - No infrastructure redundancy required.
   * **Image** - if it is not preselected, choose the image you created earlier.
   * **Size** - select a VM with at least 2 virtual CPUs, 8GB RAM, and 20 GB disk space.&#x20;
   * **Authentication type** - SSH public key.
   * **Username/SSH public key source/Key pair name** - leave as the defaults.
   * **Public inbound ports** - None.
   * **License type** - Other (the assembler is CentOS-based, which doesn't require a license).
9. Select **Next:Disks**.
10. Configure the **Disks** section as follows:
    1. **OS disk size** - select an option of at least 20 GB.
    2. **OS disk type** - choose an SSD option.
    3. Leave the rest of the options as the default values.
11. Select **Next:Networking**
12. **Virtual network/ Subnet/Public IP** - Verify the network settings that Azure populates here are appropriate for your environment.
13. **NIC network security group** - Advanced.
14. The **Configure network security group** appears. Select the network security group you created when you edited your firewall settings.

{% hint style="info" %}
If you have not already updated your firewall configuration, you can do it now by selecting **Create new** and adding the [required outbound connections](/connect-your-technology/expel-assembler/add-a-new-assembler.md#step-2-update-your-firewall-configuration).
{% endhint %}

15. Select **Next:Management**.
16. Select **Next:Monitoring**.
17. Select **Next:Advanced**.
18. Under User data:
    * Select **Enable user data**.
    * Paste the contents of your ignition file into the text box.
19. Select **Next:Tags**.
20. Select **Next:Review+Create**.
21. Review your configuration and select **Create**.
22. On the Generate new key pair screen, select **Download private key and create resource**.&#x20;

{% hint style="info" %}
Delete the .pem file that downloads, as SSH is disabled for assemblers by default and you will not need this file. If you require SSH access to this virtual machine in the future, [contact Support](/support/how-to-reach-us.md).
{% endhint %}

23. Wait for the virtual machine to deploy successfully.

## Step 4: Verify a “Connected” Status in Workbench

{% hint style="info" %}
It can take 10 to 15 minutes for the assembler’s status to update in Workbench.
{% endhint %}

1. [Log in to Workbench](https://workbench.expel.io/auth/login?orig=%2F).
2. In the side menu, navigate to **Organization Settings > Assemblers** (or, refresh the page if you never logged out).
3. Find your newly created assembler(s) and verify that the status has changed from “Not Yet Connected” to “Connected.”
   * If your assembler(s) still do not show as connected after waiting at least 15 minutes and refreshing the page, see the [Troubleshooting](#troubleshooting) section for help.

## Step 5: Connect Your Technology

You can now set up your vendor technology in Workbench.

<button type="button" class="button primary" data-action="search" data-icon="magnifying-glass">Search for your setup guide…</button>

## Troubleshooting

If your assembler is still not showing as “Connected” after 15 minutes:

* Make sure your have the proper [firewall configurations](/connect-your-technology/expel-assembler/add-a-new-assembler.md#step-2-update-your-firewall-configuration) to allow our outbound ports.
* Make sure your chosen machine’s size meets the required minimums (2 virtual CPUs, 8 GB RAM, and 20 GB disk space).
* For additional troubleshooting, access the Serial Console of your VM in Azure and check for errors.

If all firewall and machine size settings are correct, and there are no errors in Azure, but you are still unable to connect the assembler, [contact Support](/support/how-to-reach-us.md) for help.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.expel.io/connect-your-technology/expel-assembler/deploy-the-virtual-machine/deploy-the-assembler-in-microsoft-azure.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
