> ## Documentation Index
> Fetch the complete documentation index at: https://docs.maia.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a Maia runner in your infrastructure

export const Runners = () => <>the <strong>Runners & Instances</strong> icon <span style={{
  whiteSpace: "nowrap"
}}><img src="/images/global-nav/runners-instances.png" width="20" height="20" style={{
  verticalAlign: "text-bottom",
  display: "inline",
  margin: "0 1px"
}} /></span></>;

export const s_runner = "Streaming runner";

export const m_runner = "Maia runner";

export const designer = "Designer";

export const maia = "Maia";

export const RunnerMetadata = ({runnerType, platforms = []}) => {
  return <div style={{
    background: 'var(--colors-background-light, #f9fafb)',
    border: '1px solid var(--colors-border-default, #e5e7eb)',
    borderRadius: '12px',
    padding: '20px 28px',
    marginBottom: '28px'
  }}>
      <table style={{
    width: '100%',
    borderCollapse: 'collapse'
  }}>
        <tbody>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    paddingBottom: '14px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle',
    width: '180px'
  }}>Runner type</td>
            <td style={{
    paddingBottom: '14px',
    verticalAlign: 'middle'
  }}>{runnerType}</td>
          </tr>
          <tr>
            <td style={{
    fontWeight: '600',
    paddingRight: '32px',
    whiteSpace: 'nowrap',
    verticalAlign: 'middle'
  }}>Runner platform</td>
            <td style={{
    verticalAlign: 'middle'
  }}>
              <div style={{
    display: 'flex',
    flexWrap: 'wrap',
    gap: '8px'
  }}>
                {platforms.map((platform, i) => <span key={i} style={{
    background: '#dcfce7',
    color: '#15803d',
    border: '1px solid #bbf7d0',
    borderRadius: '9999px',
    padding: '3px 12px',
    fontSize: '0.85rem',
    fontWeight: '500',
    whiteSpace: 'nowrap'
  }}>
                    {platform} ✅
                  </span>)}
              </div>
            </td>
          </tr>
        </tbody>
      </table>
    </div>;
};

<RunnerMetadata runnerType={`${maia} Hybrid`} platforms={["AWS", "Azure", "Google Cloud", "Snowflake"]} />

This topic explains how to create a {m_runner} in your own infrastructure. For a discussion of why you might want to deploy in your own infrastructure rather than use a Matillion Full SaaS solution, read [{m_runner} overview](/docs/guides/runner-overview). We currently support {m_runner}s running in Snowflake, AWS, Azure, or Google Cloud environments.

There are two different types of {m_runner}:

* **{m_runner}:** Required to run [{designer} pipelines](/docs/guides/pipelines).
* **{s_runner}:** Required to run [Streaming pipelines](/docs/streaming/streaming-pipelines/#create-a-streaming-pipeline).

This article covers {m_runner}s *only*. For {s_runner}s, read [Create a {s_runner}](/docs/streaming/create-streaming-agent).

The installation process is similar for both types of {m_runner}, but you must select the correct {m_runner} type for the type of pipeline you want to run. You can install *both* {m_runner}s in the same infrastructure if you intend to run both types of pipeline.

Read [Scaling best practices](/docs/guides/scaling-best-practices) to understand how to size your {m_runner} for the level of performance you need.

## Prerequisites

* A {maia} account. To register, read [Registration](/docs/administration/registration). Once you have signed up, log in to the [{maia}](https://app.matillion.com/hub/).
* An account in AWS, Azure, or Google Cloud to host the {m_runner}.

***

## Create a Maia runner

1. In the left navigation, click <Runners />. Then, select **Runners** from the menu. You will see a list of all {m_runner}s currently created.

2. Click **Add runner**.

3. Click **{maia}**.

4. Complete the following properties:

   * **Runner name:** A unique name for your new {m_runner}. Maximum 30 characters. Accepts both uppercase and lowercase A-z, 0-9, whitespace (not the first character), hyphens and underscores.
   * **Description:** Optionally enter a brief description of the {m_runner}.
   * **Version track:** Select the version track that this {m_runner} will use: **Current** or **Stable**. Read [Version tracks](/docs/guides/runner-updates#version-tracks) for details of this option.
   * **Cloud provider:** The cloud platform that the {m_runner} will be deployed to. Currently, Snowflake, AWS, Azure, and Google Cloud are supported.
   * **Deployment:** The supported deployment method for the given cloud provider. Currently, Native App for Snowflake, Fargate for AWS, Container App/ACI for Azure, and GKE for Google Cloud are supported.
   * **Auto update:** Select whether you want your {m_runner} to automatically update or not. Read [Auto update](/docs/guides/runner-updates#auto-update) for details of this option.

5. Click **Create runner**.

***

## Set up the Maia runner in your cloud infrastructure

When created with the above process, the {m_runner} needs to be set up in your cloud infrastructure. There are several different ways of doing this, and you can use whichever method suits you:

* For Snowflake {m_runner}s:

  * [Installing Matillion {m_runner} for Snowflake](/docs/guides/snowflake-runner-install)

* For AWS {m_runner}s:

  * [Manual {m_runner} setup in AWS Fargate](/docs/guides/aws-fargate-manual-runner-setup)
  * [Setup using a CloudFormation template](/docs/guides/runner-installation-cloudformation-quick-create)

* For Azure {m_runner}s:

  * [Pipeline {m_runner} installation using an ARM template](/docs/guides/azure-arm-runner-install)
  * [Download and amend the ARM/ACI template](/docs/guides/amend-azure-arm-template)

* For Google Cloud {m_runner}s:

  * [GKE deployment guide](/docs/guides/gke-deployment-guide)

To complete these processes, you will require certain details of the created {m_runner}. To obtain these details, locate the {m_runner} in the **Runners** list of {m_runner}s, and click the three dots **...** next to it, then click **Runner details**. The parameters and values in the sections **Runner image URI**, **Runner environment variables**, and **Credentials** are required when configuring your {m_runner} in your cloud infrastructure.

***

## Check Maia runner status

After deploying the {m_runner} in your cloud infrastructure, you should return to {maia} to verify that it's correctly connected and running.

1. Click the menu button in the top left of any {maia} page, then click **Manage runners**.

2. Locate the {m_runner} in the list and check the status:

   * **Running:** The {m_runner} is connected and ready for development and pipeline tasks.
   * **Unknown:** The {m_runner} is in an unknown state.
   * **Pending:** The {m_runner} has been created but has not yet connected to {maia}.
   * **Stopped:** The {m_runner} has been stopped.

3. When the {m_runner} status shows **Running**, it's ready to use.

***

## Restarting your Maia runner

There are a number of reasons why you may need to restart your {m_runner}, such as receiving {m_runner} updates.

To restart a {m_runner}, follow the steps in [Restart a {m_runner}](/docs/guides/restart-runner). In some cases, you may need or choose to [pause](/docs/guides/pause-runner) the {m_runner} before restarting.

***

## Deleting a Maia runner

To delete a {m_runner} from {maia}, locate the {m_runner} in the **Runners** list, then click the three dots **...** → **Remove runner**.

Deleting the {m_runner} from the **Runners** list doesn't remove the underlying Snowflake, AWS, Azure, or Google Cloud resources. You should go into the relevant cloud console and clean up any resources that you no longer require.

* **Snowflake:** Use [Snowpark Container Services](https://docs.snowflake.com/en/snowpark-container-services) to manage and clean up any Snowflake resources associated with the {m_runner}.
* **AWS:** Use the [AWS Console](https://aws.amazon.com/) to identify and delete any resources associated with the {m_runner}, such as EC2 instances and IAM roles.
* **Azure:** Use the [Azure Portal](https://azure.microsoft.com/) to locate and remove any related resources, such as virtual machines and resource groups.
* **Google Cloud:** Use the [Google Cloud Console](https://console.cloud.google.com/) to locate and remove any related resources, such as the GKE cluster, VPC, GCS bucket, Secret Manager secrets, and service accounts.

<Warning>
  Deleting a {m_runner} that is currently running may interrupt scheduled pipelines or pipelines that are currently running. Therefore, you should always stop the {m_runner} service before deleting it.
</Warning>

***

## Using the Maia runner to develop and run pipelines

To use a {m_runner} for developing and then running pipelines, you need to select the {m_runner} when you [create an environment](/docs/guides/environments). See [below](#restricting-a-maia-runner) for details of how to make {m_runner}s available to specific environments.

You can change which {m_runner} an environment uses at any time by [editing](/docs/guides/environments#edit-an-environment) the environment and selecting a different {m_runner}. This is safe to do, as the change will only affect pipelines that are run after the change. So:

* Your open {designer} session won't change.
* Any pipelines that are currently running will continue to run using the old {m_runner}.
* Any existing [schedules](/docs/guides/schedules) will continue to run using the old {m_runner}. To use the new {m_runner}, you would have to change the schedule.

***

## Restricting a Maia runner

You can restrict which {m_runner}s are available to a specific project or environment. This is useful if you have multiple {m_runner}s and want to ensure that a project only uses specific ones.

An unrestricted {m_runner} (the default state when a {m_runner} is created) can always be used by any project or environment. A restricted {m_runner} can only be used by the projects and environments you specify. If you restrict a {m_runner} but don't specify any projects, the {m_runner} won't be accessible to any project.

For details of how to restrict a {m_runner}, read [Restricting {m_runner}s](/docs/guides/restrict-a-runner).

***

## Video

<iframe width="560" height="315" src="https://www.youtube.com/embed/6l1jvghPhvs?enablejsapi=1" title="YouTube video player" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" allowFullScreen />
