If you already have the Userdata Script, you can skip this step. In the Control Plane UI, click Agents in the left menu, select your agent, then choose Download Scripts from the Actions menu. Paste your bootstrap token and copy the YAML from the Userdata Script tab.
Log in to the AWS Console. Once logged in, select the AWS Region at the navigation bar in the top-right corner. Choose the same region where the services it will access are located.
In the AWS Console, navigate to EC2. In the left sidebar, under Instances, select Launch Templates and then click Create launch template.
Enter a unique name for the launch template. (e.g., cpln-agent-launch-template).
Under the Auto Scaling guidance section, check the box to use this template with EC2 Auto Scaling.
Under the Application and OS Images section, select Quick Start and choose Ubuntu (Ubuntu Server 24.04 LTS recommended).
For Instance type, select t3.small or t3.medium for testing purposes. In production environments, refer to the Agent Sizing Guidance to select the appropriate instance type for running an agent. An instance with at least 2 vCPUs and 4 GiB of memory is recommended for optimal performance.
Optional: Under the Key pair (login) section, select or create a new key pair to
enable SSH access to the agent. A key pair is necessary only for accessing the
agent during troubleshooting.
Under the Networking section, select Don't include subnet in the launch template, subnets are configured by EC2 Auto Scaling. Attach a security group and make sure it belongs to the VPC you plan on using when creating the Auto Scaling Group in Step 3 below.
Note: The VPC must have an Internet Gateway attached. To verify, navigate to VPC, click Internet Gateways, find the gateway associated with your VPC, and confirm the state is Attached.
Expand the Advanced details section. Scroll to the bottom and paste the Userdata Script copied in Step 1 into the User data textbox.
In the AWS Console, navigate to EC2. In the left sidebar, scroll down to Auto Scaling, select Auto Scaling Groups, then click Create Auto Scaling group in the right corner.
Enter a name for the Auto Scaling Group. (e.g., cpln-agent).
For the Launch template, select the name you created in Step Two (e.g., cpln-agent-launch-template), and click Next.
Under the Network section, select the VPC used in your launch template from Step Two. For Availability Zones and subnets, select at least one subnet and set Availability Zone distribution to Balanced best effort.
Note: Confirm your subnet has Auto-assign public IPv4 address by navigating back to VPC and clicking Subnets in the AWS console. If it is not enabled, you can also expand Advanced network configuration and click Add network interface, then set Auto-assign public IP to Enable.
Optional: Leave all settings as default and click Next.
For testing, set Desired, Min, and Max capacity all to 1. For production, set Desired capacity to 2, Min capacity to 2, and Max capacity to at least 4. This way you can scale up to multiple agents as needed. Leave all other settings as default, then click Skip to review.
Note: You can also scale down to 0 or scale up to multiple agents for redundancy and reliability.
Review your settings, then scroll down and click Create Auto Scaling group in the bottom-right corner.
The agent virtual machine will begin the deployment process. After a few moments, the agent will be running, connecting to the Control Plane servers, and ready to process requests.To verify, go to the Control Plane UI, click Agents in the left menu, select your agent, and you will see a green heartbeat pinged recently. It may take up to 2-3 minutes to appear after the agent starts.
Step Two - Create a Virtual Machine Scale Set in Azure
If you already have the Userdata Script, you can skip this step. In the Control Plane UI, click Agents in the left menu, select your agent, then choose Download Scripts from the Actions menu. Paste or import the bootstrap config, click Next, and copy or download the YAML from the Userdata Script tab. Click Done.
In the Azure console, navigate to Virtual machine scale sets and click Create.
Select your Subscription and Resource Group. If needed, create a new resource group before proceeding.
Under the Scale set details section, enter a unique name for the Virtual Machine Scale Set. (e.g., cpln-agent).
Select the Region where your Azure resources are located and set Availability Zones to Zones 1, 2, and 3.
Under the Scaling mode section, select Autoscaling, then set the Image to a Ubuntu Server 24.04 LTS (recommended).
For Size, select Standard D2s v3 for testing purposes. An instance with at least 2 vCPUs and 4 GiB of memory is recommended for optimal performance.
Leave the Username as azureuser. For SSH Key Type, select an existing key or generate a new one.
Click Next, skip the Spot section, and click Next: Disks.
For OS Disk Type, select Premium SSD then click Next: Networking.
Select your Virtual Network, Subnet, and Network interface, or create new ones if they do not exist.
Under Load balancing, select None, then click Next: Management.
Leave the defaults and click Next: Health.
Leave the defaults and click Next: Advanced.
Under the Custom data and cloud init section, paste the Userdata Script from Step 1 into the Custom Data field, then click Create. If you created a new key pair, click Download private key and create resource.
The agent virtual machine will begin the deployment process. After a few moments, the agent will be running, connecting to the Control Plane servers, and ready to process requests.To verify, go to the Control Plane UI, click Agents in the left menu, select your agent, and you will see a green heartbeat pinged recently. It may take up to 2-3 minutes to appear after the agent starts.
Now that you have an agent configured and running, it can be used within an identity to allow your
workload to connect to your internal Azure resources.
If you already have the Startup script, you can skip this step. In the Control Plane Console UI, click Agents in the left menu, select your agent, then choose Download Scripts from the Actions menu. Paste your bootstrap token and copy the script shown in the Startup script tab. The Startup script is used to automatically install and configure the Control Plane agent on your VM upon startup.
Some images in GCP also support cloud-init so you can use that instead. Consult the docs for image details. For example, Ubuntu supports cloud-init at the time of this writing while Debian does not.
Log in to the GCP Console. To the left of the search bar, select your target project.
In the GCP Console, navigate to Compute Engine. In the left sidebar, under Virtual Machines, select Instance templates, then click Create instance template.
Enter a name for the Instance template. (e.g., cpln-agent-instance-template).
Under the Location section, select Regional, and choose your preferred region.
Note: The region needs to match where your internal resources are located, as the agent must be in the same VPC and region to connect to them.
For the Machine configuration, select C4 for testing purposes. In production environments, refer to the Agent Sizing Guidance to select the appropriate instance type for running an agent.
Under the Machine Type section, select c4-standard-2 (2 vCPUs, 7 GB memory) or c4-standard-4 (4 vCPUs, 15 GB memory). An instance with at least 2 vCPUs and 4 GiB of memory is recommended for optimal performance.
Under the Boot disk section, set the operating system to Ubuntu and select Ubuntu 26.04 LTS Minimal, then click Select.
Scroll to the bottom of the page and expand Advanced Options, then expand Management. Paste the Startup script from Step 1 into the Automation field and click Create.
In the GCP Console, navigate to Compute Engine. In the left sidebar, scroll down to Instance groups, select Instance groups, then click Create instance group.
Choose New Managed Instance Group (Stateless) and enter a name for the instance group. (e.g., cpln-agent).
For the Instance template, select the name you created in Step Two (e.g., cpln-agent-instance-template).
Under the Location section, select Multiple zones and choose your preferred regions.
For the Target distribution shape, select Balanced to support active-active configuration and evenly distribute instances across all selected zones.
Under the Autoscaling section, click Configure Autoscaling. Set the Autoscaling Mode to On. Update the Minimum and Maximum number of instances as needed, and add any additional autoscaling signals if required.
For testing, set Minimum and Maximum capacity to 1.
For production, set Minimum to 2 and Maximum to at least 4.
Note: You can also scale down to 0 or scale up to multiple agents for redundancy and reliability.
Click Create in the bottom-left corner.
The agent virtual machine will begin the deployment process. After a few moments, the agent will be running, connecting to the Control Plane servers, and ready to process requests.To verify, go to the Control Plane UI, click Agents in the left menu, select your agent, and you will see a green heartbeat pinged recently. It may take up to 2-3 minutes to appear after the agent starts.
Open a new shell and execute the following command. Use the bootstrap file that was created in step one.
cpln agent up --bootstrap-file=path/to/bootstrapConfig.json
If you are using Windows, follow these instructions:
Configure Docker to not use the WSL 2 based engine.
Run the cpln command above using a Windows command prompt and not WSL.
The agent will now be running, connecting to the Control Plane servers, and ready to process requests.
To verify, go to the Control Plane UI, click Agents in the left menu, select your agent, and you will see a green heartbeat pinged recently. It may take up to a minute to appear after the agent starts.
Now that you have an agent configured and running, it can be used within an identity to allow your workload to connect to your local resources.
When running an agent locally, it is running within a local Docker container. When configuring an identity network
resource, you must use the IP of the network adapter that Docker installed on the
local machine.
Prepare your k8s manifests by going to your agent’s page in Control Plane. Select Download Scripts from the Actions menu. Paste the bootstrap token you saved earlier and copy the YAML that shows in the K8S Manifests tab. There you can optionally configure a namespace and number of replicas. The recommended number of replicas is 2.
Assuming you have saved the manifest to a file locally just apply it with kubectl:
# may need to create the namespace using kubectl create ns agent-namespacekubectl apply -f agent-manifests.yaml
Within a few minutes, the agent pods will be ready to handle requests.
Now that you have an agent configured and running, it can be used within an identity to allow your workload to connect to your local resources.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Control Plane","description":"Documentation for Control Plane, a hybrid multi-cloud platform for deploying and managing workloads, Kubernetes, networking, secrets, logs, and infrastructure across AWS, GCP, Azure, and private clouds.","colors":{"primary":"#1563ff","light":"#64a5ef","dark":"#1563ff"},"logo":{"light":"https://mintcdn.com/controlplanecorporation/hwvJiAoqIziVJ3gK/logos/dark.svg?fit=max\u0026auto=format\u0026n=hwvJiAoqIziVJ3gK\u0026q=85\u0026s=ec7b5a4bb958adc4d92dedfb41ab2e3c","dark":"https://mintcdn.com/controlplanecorporation/hwvJiAoqIziVJ3gK/logos/light.svg?fit=max\u0026auto=format\u0026n=hwvJiAoqIziVJ3gK\u0026q=85\u0026s=4904ca0b5a8c55fa87495b8edd04aadc"},"favicon":"https://mintcdn.com/controlplanecorporation/hwvJiAoqIziVJ3gK/logos/favicon.png?fit=max\u0026auto=format\u0026n=hwvJiAoqIziVJ3gK\u0026q=85\u0026s=11640a5f7b1a462c233be7a72afa72d7","api":{"openapi":["https://api.cpln.io/openapi.json","https://audit.cpln.io/openapi.json"],"mdx":{"auth":{"method":"bearer"},"server":"https://api.cpln.io"}},"navbar":{"links":[{"href":"https://console.cpln.io/signin","label":"Sign in"}],"primary":{"type":"button","label":"Sign up","href":"https://console.cpln.io/signup"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/control-plane-corporation","youtube":"https://www.youtube.com/@controlplanecorporation","reddit":"https://www.reddit.com/r/controlplane"}},"search":{"prompt":"Search Control Plane docs..."},"seo":{"indexing":"navigable"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity",{"title":"Install MCP Server","description":"Connect the Control Plane MCP Server to your AI tool","icon":"plug","href":"https://docs.controlplane.com/ai/overview"}],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Website","icon":"compass","href":"https://controlplane.com"},{"anchor":"Status","icon":"signal","href":"https://status.cpln.io/"},{"anchor":"Blog","icon":"newspaper","href":"https://controlplane.com/blog"},{"anchor":"FAQ","icon":"question","href":"https://controlplane.com/faq"},{"anchor":"Product Demos","icon":"video","href":"https://controlplane.com/product-demos"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"controlplanecorporation","hasAudioNarration":false,"actualSubdomain":"controlplanecorporation","customDomains":["docs.controlplane.com"],"gitSource":{"type":"github","owner":"controlplane-docs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aea2e693015c34b9858f850","collectionId":"78e02d9a-ed53-410e-a703-d21f41dcc6d7","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea2e693015c34b9858f850"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aea2e693015c34b9858f850","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"API Reference","count":173},{"language":"default","tag":"Core API","count":164},{"language":"default","tag":"Template Catalog","count":101},{"language":"default","tag":"Templates","count":91},{"language":"default","tag":"Home","count":79},{"language":"default","tag":"How-to Guides","count":72},{"language":"default","tag":"CLI Reference","count":66},{"language":"default","tag":"Reference","count":49},{"language":"default","tag":"Commands","count":38},{"language":"default","tag":"Workload","count":24}],"searchSettings":{"maxResults":5}},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"global.css","content":"html{overflow-y:scroll}"},{"filePath":"style.css","content":"img[src*=\"/icons/mcp-sidebar.svg\"]{filter:brightness(0) saturate(100%) invert(69%) sepia(9%) saturate(309%) hue-rotate(176deg) brightness(95%) contrast(87%)!important}a[aria-current=page] img[src*=\"/icons/mcp-sidebar.svg\"],img[src*=\"/icons/mcp.svg\"]{filter:brightness(0) saturate(100%) invert(28%) sepia(98%) saturate(3000%) hue-rotate(213deg) brightness(102%) contrast(101%)!important}.dark img[src*=\"/icons/mcp-sidebar.svg\"]{filter:brightness(0) saturate(100%) invert(47%) sepia(8%) saturate(420%) hue-rotate(177deg) brightness(94%) contrast(85%)!important}img.sidebar-group-icon[src*=\"/icons/mcp-sidebar.svg\"]{filter:brightness(0)!important}.dark img.sidebar-group-icon[src*=\"/icons/mcp-sidebar.svg\"]{filter:brightness(0) invert(1)!important}.dark a[aria-current=page] img[src*=\"/icons/mcp-sidebar.svg\"],.dark img[src*=\"/icons/mcp.svg\"]{filter:brightness(0) saturate(100%) invert(63%) sepia(74%) saturate(380%) hue-rotate(186deg) brightness(98%) contrast(91%)!important}.dark img[src*=\"/icons/chatgpt.svg\"],.dark img[src*=\"/icons/codex.svg\"],.dark img[src*=\"/icons/cursor.svg\"],.dark img[src*=\"/icons/opencode.svg\"]{filter:invert(1)!important}"}],"page":{"pagePath":"guides/setup-agent","slug":"/guides/setup-agent","pageMetadata":{"title":"Configure an Agent","description":"Install and configure a Control Plane agent on AWS, Azure, GCP, Docker, or Kubernetes for secure connectivity to private network resources.","keywords":["agent install","agent setup","vmss","autoscaling group","instance template","managed instance group","docker agent","kubernetes agent","startup script","user data","hybrid networking","private network"],"boost":5,"href":"/guides/setup-agent"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Install and configure a Control Plane agent on AWS, Azure, GCP, Docker, or Kubernetes for secure connectivity to private network resources.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Click the desired cloud provider and follow the installation and configuration instructions:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#aws`,children:`Amazon Web Services (AWS)`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#azure`,children:`Microsoft Azure`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#gcp`,children:`Google Cloud Platform (GCP)`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#running-locally-in-docker`,children:`Running locally in Docker`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`#kubernetes-k8s-cluster`,children:`Kubernetes (k8s) Cluster`})}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`aws`,children:`AWS`}),`\n`,_jsx(Heading,{level:`3`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Follow the steps below to install and configure an `,_jsx(_components.a,{href:`/reference/agent`,children:`agent`}),` within your Amazon Web Services (AWS) environment.`]}),`\n`,_jsx(Heading,{level:`3`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Review the `,_jsx(_components.a,{href:`/reference/agent`,children:`Agent`}),` reference page.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://aws.amazon.com/`,children:`Amazon Web Services`}),` (AWS) account.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-one-create-an-agent`,children:`Step One - Create an Agent`}),`\n`,_jsxs(_components.p,{children:[`Follow the `,_jsx(_components.a,{href:`/guides/agent`,children:`Create an Agent`}),` guide to define an agent and generate the bootstrap config file that will be used in\n`,_jsx(_components.a,{href:`#step-two-create-a-launch-template-in-aws`,children:`step two`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-two-create-a-launch-template-in-aws`,children:`Step Two - Create a Launch Template in AWS`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`If you already have the `,_jsx(_components.code,{children:`Userdata Script`}),`, you can skip this step. In the Control Plane UI, click `,_jsx(_components.code,{children:`Agents`}),` in the left menu, select your agent, then choose `,_jsx(_components.code,{children:`Download Scripts`}),` from the `,_jsx(_components.code,{children:`Actions`}),` menu. Paste your bootstrap token and copy the YAML from the `,_jsx(_components.code,{children:`Userdata Script`}),` tab.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Log in to the `,_jsx(_components.a,{href:`https://console.aws.amazon.com`,children:`AWS Console`}),`. Once logged in, select the AWS Region at the navigation bar in the top-right corner. Choose the same region where the services it will access are located.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In the AWS Console, navigate to `,_jsx(_components.code,{children:`EC2`}),`. In the left sidebar, under Instances, select `,_jsx(_components.code,{children:`Launch Templates`}),` and then click `,_jsx(_components.code,{children:`Create launch template`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Enter a unique name for the launch template. (e.g., `,_jsx(_components.code,{children:`cpln-agent-launch-template`}),`).`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Auto Scaling guidance`}),` section, check the box to use this template with EC2 Auto Scaling.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Application and OS Images`}),` section, select `,_jsx(_components.code,{children:`Quick Start`}),` and choose `,_jsx(_components.code,{children:`Ubuntu`}),` (Ubuntu Server 24.04 LTS recommended).`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`For `,_jsx(_components.code,{children:`Instance type`}),`, select `,_jsx(_components.code,{children:`t3.small`}),` or `,_jsx(_components.code,{children:`t3.medium`}),` for testing purposes. In production environments, refer to the `,_jsx(_components.a,{href:`/reference/agent#agent-sizing-guidance`,children:`Agent Sizing Guidance`}),` to select the appropriate instance type for running an agent. An instance with at least 2 vCPUs and 4 GiB of memory is recommended for optimal performance.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Optional:`}),` Under the `,_jsx(_components.code,{children:`Key pair (login)`}),` section, select or create a new key pair to\nenable SSH access to the agent. A key pair is necessary only for accessing the\nagent during troubleshooting.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Networking`}),` section, select `,_jsx(_components.code,{children:`Don't include subnet in the launch template`}),`, subnets are configured by EC2 Auto Scaling. Attach a security group and make sure it belongs to the VPC you plan on using when creating the Auto Scaling Group in Step 3 below.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Note:`}),` The VPC must have an `,_jsx(_components.code,{children:`Internet Gateway`}),` attached. To verify, navigate to `,_jsx(_components.code,{children:`VPC`}),`, click `,_jsx(_components.code,{children:`Internet Gateways`}),`, find the gateway associated with your VPC, and confirm the state is `,_jsx(_components.code,{children:`Attached`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Expand the `,_jsx(_components.code,{children:`Advanced details`}),` section. Scroll to the bottom and paste the `,_jsx(_components.code,{children:`Userdata Script`}),` copied in Step 1 into the `,_jsx(_components.code,{children:`User data`}),` textbox.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.code,{children:`Create launch template`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-three-create-an-auto-scaling-group-in-aws`,children:`Step Three - Create an Auto Scaling Group in AWS`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In the AWS Console, navigate to `,_jsx(_components.code,{children:`EC2`}),`. In the left sidebar, scroll down to Auto Scaling, select `,_jsx(_components.code,{children:`Auto Scaling Groups`}),`, then click `,_jsx(_components.code,{children:`Create Auto Scaling group`}),` in the right corner.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Enter a name for the Auto Scaling Group. (e.g., `,_jsx(_components.code,{children:`cpln-agent`}),`).`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`For the Launch template, select the name you created in Step Two (e.g., `,_jsx(_components.code,{children:`cpln-agent-launch-template`}),`), and click `,_jsx(_components.code,{children:`Next`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Network`}),` section, select the VPC used in your launch template from Step Two. For Availability Zones and subnets, select at least `,_jsx(_components.code,{children:`one`}),` subnet and set Availability Zone distribution to `,_jsx(_components.code,{children:`Balanced best effort`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Note:`}),` Confirm your subnet has Auto-assign public IPv4 address by navigating back to `,_jsx(_components.code,{children:`VPC`}),` and clicking `,_jsx(_components.code,{children:`Subnets`}),` in the AWS console. If it is not enabled, you can also expand `,_jsx(_components.code,{children:`Advanced network configuration`}),` and click `,_jsx(_components.code,{children:`Add network interface`}),`, then set `,_jsx(_components.code,{children:`Auto-assign public IP`}),` to `,_jsx(_components.code,{children:`Enable`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Optional:`}),` Leave all settings as default and click `,_jsx(_components.code,{children:`Next`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`For testing, set Desired, Min, and Max capacity all to 1. For production, set Desired capacity to 2, Min capacity to 2, and Max capacity to at least 4. This way you can scale up to multiple agents as needed. Leave all other settings as default, then click `,_jsx(_components.code,{children:`Skip to review`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Note:`}),` You can also scale down to 0 or scale up to multiple agents for redundancy and reliability.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Review your settings, then scroll down and click `,_jsx(_components.code,{children:`Create Auto Scaling group`}),` in the bottom-right corner.`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`The agent virtual machine will begin the deployment process. After a few moments, the agent will be running, connecting to the Control Plane servers, and ready to process requests.`}),`\n`,_jsxs(_components.p,{children:[`To verify, go to the Control Plane UI, click `,_jsx(_components.code,{children:`Agents`}),` in the left menu, select your agent, and you will see a green heartbeat pinged recently. It may take up to 2-3 minutes to appear after the agent starts.`]}),`\n`,_jsx(Heading,{level:`3`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(_components.p,{children:[`Now that you have an agent configured and running, it can be used within an `,_jsx(_components.a,{href:`/reference/identity`,children:`identity`}),` to allow your\n`,_jsx(_components.a,{href:`/reference/workload`,children:`workload`}),` to connect to your internal AWS resources.`]}),`\n`,_jsx(Heading,{level:`2`,id:`azure`,children:`Azure`}),`\n`,_jsx(Heading,{level:`3`,id:`overview-2`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Follow the steps below to install and configure an `,_jsx(_components.a,{href:`/reference/agent`,children:`agent`}),` within your Microsoft Azure environment.`]}),`\n`,_jsx(Heading,{level:`3`,id:`prerequisites-2`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Review the `,_jsx(_components.a,{href:`/reference/agent`,children:`Agent`}),` reference page.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://azure.com`,children:`Microsoft Azure`}),` account.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-one-create-an-agent-2`,children:`Step One - Create an Agent`}),`\n`,_jsxs(_components.p,{children:[`Follow the `,_jsx(_components.a,{href:`/guides/agent`,children:`Create an Agent`}),` guide to define an agent and generate the bootstrap config file that will be used in\n`,_jsx(_components.a,{href:`#step-two-create-a-virtual-machine-scale-set-in-azure`,children:`step two`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-two-create-a-virtual-machine-scale-set-in-azure`,children:`Step Two - Create a Virtual Machine Scale Set in Azure`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`If you already have the `,_jsx(_components.code,{children:`Userdata Script`}),`, you can skip this step. In the Control Plane UI, click `,_jsx(_components.code,{children:`Agents`}),` in the left menu, select your agent, then choose `,_jsx(_components.code,{children:`Download Scripts`}),` from the `,_jsx(_components.code,{children:`Actions`}),` menu. Paste or import the bootstrap config, click `,_jsx(_components.code,{children:`Next`}),`, and copy or download the YAML from the `,_jsx(_components.code,{children:`Userdata Script`}),` tab. Click `,_jsx(_components.code,{children:`Done`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Log in to the `,_jsx(_components.a,{href:`https://portal.azure.com`,children:`Azure Console`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In the Azure console, navigate to `,_jsx(_components.code,{children:`Virtual machine scale sets`}),` and click `,_jsx(_components.code,{children:`Create`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select your `,_jsx(_components.code,{children:`Subscription`}),` and `,_jsx(_components.code,{children:`Resource Group`}),`. If needed, create a new resource group before proceeding.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Scale set details`}),` section, enter a unique name for the Virtual Machine Scale Set. (e.g., `,_jsx(_components.code,{children:`cpln-agent`}),`).`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select the Region where your Azure resources are located and set `,_jsx(_components.code,{children:`Availability Zones`}),` to Zones 1, 2, and 3.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Scaling mode`}),` section, select `,_jsx(_components.code,{children:`Autoscaling`}),`, then set the Image to a `,_jsx(_components.code,{children:`Ubuntu Server 24.04 LTS`}),` (recommended).`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`For `,_jsx(_components.code,{children:`Size`}),`, select `,_jsx(_components.code,{children:`Standard D2s v3`}),` for testing purposes. An instance with at least 2 vCPUs and 4 GiB of memory is recommended for optimal performance.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Leave the Username as `,_jsx(_components.code,{children:`azureuser`}),`. For SSH Key Type, select an existing key or generate a new one.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.code,{children:`Next`}),`, skip the Spot section, and click `,_jsx(_components.code,{children:`Next: Disks`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`For `,_jsx(_components.code,{children:`OS Disk Type`}),`, select Premium SSD then click `,_jsx(_components.code,{children:`Next: Networking`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select your `,_jsx(_components.code,{children:`Virtual Network`}),`, `,_jsx(_components.code,{children:`Subnet`}),`, and `,_jsx(_components.code,{children:`Network interface`}),`, or create new ones if they do not exist.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under `,_jsx(_components.code,{children:`Load balancing`}),`, select `,_jsx(_components.code,{children:`None`}),`, then click `,_jsx(_components.code,{children:`Next: Management`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Leave the defaults and click `,_jsx(_components.code,{children:`Next: Health`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Leave the defaults and click `,_jsx(_components.code,{children:`Next: Advanced`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Custom data and cloud init`}),` section, paste the `,_jsx(_components.code,{children:`Userdata Script`}),` from Step 1 into the `,_jsx(_components.code,{children:`Custom Data`}),` field, then click `,_jsx(_components.code,{children:`Create`}),`. If you created a new key pair, click `,_jsx(_components.code,{children:`Download private key and create resource`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`The agent virtual machine will begin the deployment process. After a few moments, the agent will be running, connecting to the Control Plane servers, and ready to process requests.`}),`\n`,_jsxs(_components.p,{children:[`To verify, go to the Control Plane UI, click `,_jsx(_components.code,{children:`Agents`}),` in the left menu, select your agent, and you will see a green heartbeat pinged recently. It may take up to 2-3 minutes to appear after the agent starts.`]}),`\n`,_jsx(Heading,{level:`3`,id:`next-steps-2`,children:`Next Steps`}),`\n`,_jsxs(_components.p,{children:[`Now that you have an agent configured and running, it can be used within an `,_jsx(_components.a,{href:`/reference/identity`,children:`identity`}),` to allow your\n`,_jsx(_components.a,{href:`/reference/workload`,children:`workload`}),` to connect to your internal Azure resources.`]}),`\n`,_jsx(Heading,{level:`2`,id:`gcp`,children:`GCP`}),`\n`,_jsx(Heading,{level:`3`,id:`overview-3`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Follow the steps below to install and configure an `,_jsx(_components.a,{href:`/reference/agent`,children:`agent`}),` within your Google Cloud Platform (GCP) environment.`]}),`\n`,_jsx(Heading,{level:`3`,id:`prerequisites-3`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Review the `,_jsx(_components.a,{href:`/reference/agent`,children:`Agent`}),` reference page.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://cloud.google.com/`,children:`Google Cloud Platform (GCP)`}),` account.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-one-create-an-agent-3`,children:`Step One - Create an Agent`}),`\n`,_jsxs(_components.p,{children:[`Follow the `,_jsx(_components.a,{href:`/guides/agent`,children:`Create an Agent`}),` guide to define an agent and generate the bootstrap config JSON file that will be used in\n`,_jsx(_components.a,{href:`#step-two-create-an-instance-template-in-gcp`,children:`step two`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-two-create-an-instance-template-in-gcp`,children:`Step Two - Create an Instance Template in GCP`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`If you already have the `,_jsx(_components.code,{children:`Startup script`}),`, you can skip this step. In the Control Plane Console UI, click `,_jsx(_components.code,{children:`Agents`}),` in the left menu, select your agent, then choose `,_jsx(_components.code,{children:`Download Scripts`}),` from the `,_jsx(_components.code,{children:`Actions`}),` menu. Paste your bootstrap token and copy the script shown in the `,_jsx(_components.code,{children:`Startup script`}),` tab. The `,_jsx(_components.code,{children:`Startup script`}),` is used to automatically install and configure the Control Plane agent on your VM upon startup.`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Some images in GCP also support cloud-init so you can use that instead. Consult the docs for image details. For example, Ubuntu supports cloud-init at the time of this writing while Debian does not.`})}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Log in to the `,_jsx(_components.a,{href:`https://console.cloud.google.com`,children:`GCP Console`}),`. To the left of the search bar, select your target project.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In the GCP Console, navigate to `,_jsx(_components.code,{children:`Compute Engine`}),`. In the left sidebar, under Virtual Machines, select `,_jsx(_components.code,{children:`Instance templates`}),`, then click `,_jsx(_components.code,{children:`Create instance template`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Enter a name for the Instance template. (e.g., `,_jsx(_components.code,{children:`cpln-agent-instance-template`}),`).`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Location`}),` section, select `,_jsx(_components.code,{children:`Regional`}),`, and choose your preferred region.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Note:`}),` The region needs to match where your internal resources are located, as the agent must be in the same VPC and region to connect to them.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`For the `,_jsx(_components.code,{children:`Machine configuration`}),`, select `,_jsx(_components.code,{children:`C4`}),` for testing purposes. In production environments, refer to the `,_jsx(_components.a,{href:`/reference/agent#agent-sizing-guidance`,children:`Agent Sizing Guidance`}),` to select the appropriate instance type for running an agent.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Machine Type`}),` section, select `,_jsx(_components.code,{children:`c4-standard-2`}),` (2 vCPUs, 7 GB memory) or `,_jsx(_components.code,{children:`c4-standard-4`}),` (4 vCPUs, 15 GB memory). An instance with at least 2 vCPUs and 4 GiB of memory is recommended for optimal performance.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Boot disk`}),` section, set the operating system to `,_jsx(_components.code,{children:`Ubuntu`}),` and select `,_jsx(_components.code,{children:`Ubuntu 26.04 LTS Minimal`}),`, then click `,_jsx(_components.code,{children:`Select`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Scroll to the bottom of the page and expand `,_jsx(_components.code,{children:`Advanced Options`}),`, then expand `,_jsx(_components.code,{children:`Management`}),`. Paste the `,_jsx(_components.code,{children:`Startup script`}),` from Step 1 into the `,_jsx(_components.code,{children:`Automation`}),` field and click `,_jsx(_components.code,{children:`Create`}),`.`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-three-create-an-instance-group-in-gcp`,children:`Step Three - Create an Instance Group in GCP`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In the GCP Console, navigate to `,_jsx(_components.code,{children:`Compute Engine`}),`. In the left sidebar, scroll down to Instance groups, select `,_jsx(_components.code,{children:`Instance groups`}),`, then click `,_jsx(_components.code,{children:`Create instance group`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Choose `,_jsx(_components.code,{children:`New Managed Instance Group (Stateless)`}),` and enter a name for the instance group. (e.g., `,_jsx(_components.code,{children:`cpln-agent`}),`).`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`For the Instance template, select the name you created in Step Two (e.g., `,_jsx(_components.code,{children:`cpln-agent-instance-template`}),`).`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Location`}),` section, select `,_jsx(_components.code,{children:`Multiple zones`}),` and choose your preferred regions.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`For the Target distribution shape, select `,_jsx(_components.code,{children:`Balanced`}),` to support active-active configuration and evenly distribute instances across all selected zones.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Under the `,_jsx(_components.code,{children:`Autoscaling`}),` section, click `,_jsx(_components.code,{children:`Configure Autoscaling`}),`. Set the `,_jsx(_components.code,{children:`Autoscaling Mode`}),` to `,_jsx(_components.code,{children:`On`}),`. Update the Minimum and Maximum number of instances as needed, and add any additional autoscaling signals if required.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`For testing, set Minimum and Maximum capacity to 1.`}),`\n`,_jsx(_components.li,{children:`For production, set Minimum to 2 and Maximum to at least 4.`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Note:`}),` You can also scale down to 0 or scale up to multiple agents for redundancy and reliability.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.code,{children:`Create`}),` in the bottom-left corner.`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`The agent virtual machine will begin the deployment process. After a few moments, the agent will be running, connecting to the Control Plane servers, and ready to process requests.`}),`\n`,_jsxs(_components.p,{children:[`To verify, go to the Control Plane UI, click `,_jsx(_components.code,{children:`Agents`}),` in the left menu, select your agent, and you will see a green heartbeat pinged recently. It may take up to 2-3 minutes to appear after the agent starts.`]}),`\n`,_jsx(Heading,{level:`3`,id:`next-steps-3`,children:`Next Steps`}),`\n`,_jsxs(_components.p,{children:[`Now that you have an agent configured and running, it can be used within an `,_jsx(_components.a,{href:`/reference/identity`,children:`identity`}),` to allow your `,_jsx(_components.a,{href:`/reference/workload`,children:`workload`}),` to connect to your internal GCP resources.`]}),`\n`,_jsx(Heading,{level:`2`,id:`running-locally-in-docker`,children:`Running locally in Docker`}),`\n`,_jsx(Heading,{level:`3`,id:`overview-4`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Follow the steps below to install and configure an `,_jsx(_components.a,{href:`/reference/agent`,children:`agent`}),` within your private network.`]}),`\n`,_jsx(Heading,{level:`3`,id:`prerequisites-4`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Review the `,_jsx(_components.a,{href:`/reference/agent`,children:`Agent`}),` reference page.`]}),`\n`,_jsxs(_components.li,{children:[`Install the `,_jsx(_components.a,{href:`/cli-reference/installation`,children:`CLI`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Install `,_jsx(_components.a,{href:`https://docs.docker.com/engine/install/`,children:`Docker`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-one-create-an-agent-4`,children:`Step One - Create an Agent`}),`\n`,_jsxs(_components.p,{children:[`Follow the `,_jsx(_components.a,{href:`/guides/agent`,children:`Create an Agent`}),` guide to define an agent and generate the bootstrap config file that will be used in\n`,_jsx(_components.a,{href:`#step-two-launch-agent-locally`,children:`step two`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-two-launch-agent-locally`,children:`Step Two - Launch agent locally`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open a new shell and execute the following command. Use the bootstrap file that was created in `,_jsx(_components.a,{href:`#step-one-create-an-agent-4`,children:`step one`}),`.`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`cpln`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` agent`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` up`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --bootstrap-file=path/to/bootstrapConfig.json`})]}),`\n`]})})}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:`If you are using Windows, follow these instructions:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Configure Docker to `,_jsx(_components.strong,{children:`not`}),` use the WSL 2 based engine.`]}),`\n`,_jsxs(_components.li,{children:[`Run the `,_jsx(_components.code,{children:`cpln`}),` command above using a Windows command prompt and not WSL.`]}),`\n`]})]}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsx(_components.li,{children:`The agent will now be running, connecting to the Control Plane servers, and ready to process requests.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`To verify, go to the Control Plane UI, click `,_jsx(_components.code,{children:`Agents`}),` in the left menu, select your agent, and you will see a green heartbeat pinged recently. It may take up to a minute to appear after the agent starts.`]}),`\n`,_jsx(Heading,{level:`3`,id:`next-steps-4`,children:`Next Steps`}),`\n`,_jsxs(_components.p,{children:[`Now that you have an agent configured and running, it can be used within an `,_jsx(_components.a,{href:`/reference/identity`,children:`identity`}),` to allow your `,_jsx(_components.a,{href:`/reference/workload`,children:`workload`}),` to connect to your local resources.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`When running an agent locally, it is running within a local Docker container. When configuring an `,_jsx(_components.a,{href:`/reference/identity#network-resources-networkresources`,children:`identity network\nresource`}),`, you must use the IP of the network adapter that Docker installed on the\nlocal machine.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`kubernetes-k8s-cluster`,children:`Kubernetes (k8s) Cluster`}),`\n`,_jsx(Heading,{level:`3`,id:`overview-5`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Follow the steps below to install and configure an `,_jsx(_components.a,{href:`/reference/agent`,children:`agent`}),` within your Kubernetes cluster.`]}),`\n`,_jsx(Heading,{level:`3`,id:`prerequisites-5`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Review the `,_jsx(_components.a,{href:`/reference/agent`,children:`Agent`}),` reference page.`]}),`\n`,_jsxs(_components.li,{children:[`Install the `,_jsx(_components.a,{href:`/cli-reference/installation`,children:`CLI`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-one-create-an-agent-5`,children:`Step One - Create an Agent`}),`\n`,_jsxs(_components.p,{children:[`Follow the `,_jsx(_components.a,{href:`/guides/agent`,children:`Create an Agent`}),` guide to define an agent and generate the bootstrap config file that will be used in\n`,_jsx(_components.a,{href:`#step-two-launch-agent-within-a-k8s-cluster`,children:`step two`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`step-two-launch-agent-within-a-k8s-cluster`,children:`Step Two - Launch agent within a K8s cluster`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Prepare your k8s manifests by going to your agent’s page in Control Plane. Select `,_jsx(_components.code,{children:`Download Scripts`}),` from the `,_jsx(_components.code,{children:`Actions`}),` menu. Paste the bootstrap token you saved earlier and copy the YAML that shows in the `,_jsx(_components.code,{children:`K8S Manifests`}),` tab. There you can optionally configure a namespace and number of replicas. The recommended number of replicas is 2.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Assuming you have saved the manifest to a file locally just apply it with `,_jsx(_components.code,{children:`kubectl`}),`:`]}),`\n`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# may need to create the namespace using kubectl create ns agent-namespace`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` apply`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` agent-manifests.yaml`})]}),`\n`]})})}),`\n`,_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsx(_components.li,{children:`Within a few minutes, the agent pods will be ready to handle requests.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`next-steps-5`,children:`Next Steps`}),`\n`,_jsxs(_components.p,{children:[`Now that you have an agent configured and running, it can be used within an `,_jsx(_components.a,{href:`/reference/identity`,children:`identity`}),` to allow your `,_jsx(_components.a,{href:`/reference/workload`,children:`workload`}),` to connect to your local resources.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Configure an Agent","description":"Install and configure a Control Plane agent on AWS, Azure, GCP, Docker, or Kubernetes for secure connectivity to private network resources.","keywords":["agent install","agent setup","vmss","autoscaling group","instance template","managed instance group","docker agent","kubernetes agent","startup script","user data","hybrid networking","private network"],"boost":5,"href":"/guides/setup-agent"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"AWS","slug":"aws","depth":2,"children":[{"title":"Overview","slug":"overview","depth":3,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":3,"children":[]},{"title":"Step One - Create an Agent","slug":"step-one-create-an-agent","depth":3,"children":[]},{"title":"Step Two - Create a Launch Template in AWS","slug":"step-two-create-a-launch-template-in-aws","depth":3,"children":[]},{"title":"Step Three - Create an Auto Scaling Group in AWS","slug":"step-three-create-an-auto-scaling-group-in-aws","depth":3,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":3,"children":[]}]},{"title":"Azure","slug":"azure","depth":2,"children":[{"title":"Overview","slug":"overview-2","depth":3,"children":[]},{"title":"Prerequisites","slug":"prerequisites-2","depth":3,"children":[]},{"title":"Step One - Create an Agent","slug":"step-one-create-an-agent-2","depth":3,"children":[]},{"title":"Step Two - Create a Virtual Machine Scale Set in Azure","slug":"step-two-create-a-virtual-machine-scale-set-in-azure","depth":3,"children":[]},{"title":"Next Steps","slug":"next-steps-2","depth":3,"children":[]}]},{"title":"GCP","slug":"gcp","depth":2,"children":[{"title":"Overview","slug":"overview-3","depth":3,"children":[]},{"title":"Prerequisites","slug":"prerequisites-3","depth":3,"children":[]},{"title":"Step One - Create an Agent","slug":"step-one-create-an-agent-3","depth":3,"children":[]},{"title":"Step Two - Create an Instance Template in GCP","slug":"step-two-create-an-instance-template-in-gcp","depth":3,"children":[]},{"title":"Step Three - Create an Instance Group in GCP","slug":"step-three-create-an-instance-group-in-gcp","depth":3,"children":[]},{"title":"Next Steps","slug":"next-steps-3","depth":3,"children":[]}]},{"title":"Running locally in Docker","slug":"running-locally-in-docker","depth":2,"children":[{"title":"Overview","slug":"overview-4","depth":3,"children":[]},{"title":"Prerequisites","slug":"prerequisites-4","depth":3,"children":[]},{"title":"Step One - Create an Agent","slug":"step-one-create-an-agent-4","depth":3,"children":[]},{"title":"Step Two - Launch agent locally","slug":"step-two-launch-agent-locally","depth":3,"children":[]},{"title":"Next Steps","slug":"next-steps-4","depth":3,"children":[]}]},{"title":"Kubernetes (k8s) Cluster","slug":"kubernetes-k8s-cluster","depth":2,"children":[{"title":"Overview","slug":"overview-5","depth":3,"children":[]},{"title":"Prerequisites","slug":"prerequisites-5","depth":3,"children":[]},{"title":"Step One - Create an Agent","slug":"step-one-create-an-agent-5","depth":3,"children":[]},{"title":"Step Two - Launch agent within a K8s cluster","slug":"step-two-launch-agent-within-a-k8s-cluster","depth":3,"children":[]},{"title":"Next Steps","slug":"next-steps-5","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/controlplanecorporation/20452e834d3719a6/content/legacy-cli-hash-redirects.js","/_mintlify/custom/controlplanecorporation/dd1961f62f732454/content/sync-tabs.js"],"subdomain":"controlplanecorporation","siteName":"Control Plane","title":"Configure an Agent - Control Plane","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-14T14:55:29.745Z","originalFileLocation":"guides/setup-agent.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Install and configure a Control Plane agent on AWS, Azure, GCP, Docker, or Kubernetes for secure connectivity to private network resources.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Control Plane\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Configure an Agent - Control Plane\">\u003cmeta data-mint-head property=\"og:description\" content=\"Install and configure a Control Plane agent on AWS, Azure, GCP, Docker, or Kubernetes for secure connectivity to private network resources.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Control Plane\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.controlplane.com/guides/setup-agent\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://controlplanecorporation.mintlify.app/_mintlify/api/og/v2?division=Configure+Resources\u0026amp;title=Configure+an+Agent\u0026amp;description=Install+and+configure+a+Control+Plane+agent+on+AWS%2C+Azure%2C+GCP%2C+Docker%2C+or+Kubernetes+for+secure+connectivity+to+private+network+resources.\u0026amp;theme=5c8c59bec2193070854fc823\u0026amp;signature=9c17512c8fd7267bd9dd115ed39e6724c6994aa447a963c6a8b6e272b11b64f6\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Configure an Agent - Control Plane\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Install and configure a Control Plane agent on AWS, Azure, GCP, Docker, or Kubernetes for secure connectivity to private network resources.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://controlplanecorporation.mintlify.app/_mintlify/api/og/v2?division=Configure+Resources\u0026amp;title=Configure+an+Agent\u0026amp;description=Install+and+configure+a+Control+Plane+agent+on+AWS%2C+Azure%2C+GCP%2C+Docker%2C+or+Kubernetes+for+secure+connectivity+to+private+network+resources.\u0026amp;theme=5c8c59bec2193070854fc823\u0026amp;signature=9c17512c8fd7267bd9dd115ed39e6724c6994aa447a963c6a8b6e272b11b64f6\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/controlplanecorporation/N_jUg8p-q778yjKC/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Control Plane\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1563ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.controlplane.com/guides/setup-agent\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/setup-agent.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.controlplane.com/#organization\",\"name\":\"Control Plane\",\"url\":\"https://docs.controlplane.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/controlplanecorporation/hwvJiAoqIziVJ3gK/logos/dark.svg?fit=max\u0026auto=format\u0026n=hwvJiAoqIziVJ3gK\u0026q=85\u0026s=ec7b5a4bb958adc4d92dedfb41ab2e3c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.controlplane.com#website\",\"name\":\"Control Plane\",\"url\":\"https://docs.controlplane.com\",\"publisher\":{\"@id\":\"https://docs.controlplane.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.controlplane.com/guides/setup-agent#webpage\",\"url\":\"https://docs.controlplane.com/guides/setup-agent\",\"name\":\"Configure an Agent\",\"description\":\"Install and configure a Control Plane agent on AWS, Azure, GCP, Docker, or Kubernetes for secure connectivity to private network resources.\",\"dateModified\":\"2026-09-14T14:55:29.745Z\",\"isPartOf\":{\"@id\":\"https://docs.controlplane.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.controlplane.com/guides/setup-agent#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.controlplane.com/guides/setup-agent#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Configure Resources\",\"item\":\"https://docs.controlplane.com/guides/configure-cdn\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Configure an Agent\",\"item\":\"https://docs.controlplane.com/guides/setup-agent\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.controlplane.com/guides/setup-agent#article\",\"headline\":\"Configure an Agent\",\"name\":\"Configure an Agent\",\"description\":\"Install and configure a Control Plane agent on AWS, Azure, GCP, Docker, or Kubernetes for secure connectivity to private network resources.\",\"url\":\"https://docs.controlplane.com/guides/setup-agent\",\"mainEntityOfPage\":{\"@id\":\"https://docs.controlplane.com/guides/setup-agent#webpage\"},\"dateModified\":\"2026-09-14T14:55:29.745Z\",\"keywords\":\"agent install, agent setup, vmss, autoscaling group, instance template, managed instance group, docker agent, kubernetes agent, startup script, user data, hybrid networking, private network\",\"publisher\":{\"@id\":\"https://docs.controlplane.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.controlplane.com#website\"}}]}\u003c/script>","siteName":"Control Plane","nav":{"global":{"anchors":[{"anchor":"Website","icon":"compass","href":"https://controlplane.com"},{"anchor":"Status","icon":"signal","href":"https://status.cpln.io/"},{"anchor":"Blog","icon":"newspaper","href":"https://controlplane.com/blog"},{"anchor":"FAQ","icon":"question","href":"https://controlplane.com/faq"},{"anchor":"Product Demos","icon":"video","href":"https://controlplane.com/product-demos"}]},"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/introduction"}]},{"tab":"How-to Guides","groups":[{"group":"How-to Guides","icon":"list-ol","pages":[{"title":"How-to Guides","sidebarTitle":"Overview","href":"/guides/overview"}]},{"group":"CLI Configuration","icon":"terminal","pages":[{"title":"Browser-less CLI Login","href":"/guides/browser-less-cli-login"}]},{"group":"Integrations","icon":"plug","pages":[{"title":"Kubernetes Operator","href":"/guides/cli/cpln-operator"}]},{"group":"Configure Resources","icon":"gear","pages":[{"title":"Configure a CDN","href":"/guides/configure-cdn"},{"title":"Configure a Domain","description":"Configure custom domains for workloads with DNS verification, routing modes, TLS certificates, and path-based routing via Console UI and CLI manifests.","href":"/guides/configure-domain"},{"title":"Configure an Agent","href":"/guides/setup-agent"},{"title":"Connect to RDS with an Agent","description":"Connect a Control Plane workload to an Amazon RDS database in a private VPC using an agent, security groups, and an identity network resource.","href":"/guides/connect-rds-with-agent"},{"title":"Configure an Agent (Legacy)","href":"/guides/setup-agent-legacy"},{"title":"Invite Users","href":"/guides/invite-users"},{"title":"Manage Quotas","href":"/guides/manage-quotas"},{"title":"Query Costs and Usage","href":"/guides/query-costs-and-usage"},{"title":"Rate Limiting","href":"/guides/rate-limiting"},{"title":"Resource Protection","href":"/guides/resource-protection"},{"title":"Service-to-Service Calls","href":"/guides/service-to-service"}]},{"group":"Create Resources","icon":"circle-plus","pages":[{"title":"Create an Agent","href":"/guides/agent"},{"title":"Create an Audit Context","href":"/guides/create-audit-context"},{"title":"Create a Cloud Account","href":"/guides/create-cloud-account"},{"title":"Create a Group","href":"/guides/create-group"},{"title":"Create a GVC","href":"/guides/create-gvc"},{"title":"Create an Identity","href":"/guides/create-identity"},{"title":"Create an Org","href":"/guides/create-org"},{"title":"Create a Policy","href":"/guides/policy"},{"group":"Create a Secret","pages":[{"title":"Create a Secret","sidebarTitle":"Overview","href":"/guides/create-secret/overview"},{"title":"AWS","href":"/guides/create-secret/aws"},{"title":"Azure Connector","href":"/guides/create-secret/azure-connector"},{"title":"Azure SDK","href":"/guides/create-secret/azure-sdk"},{"title":"Dictionary","href":"/guides/create-secret/dictionary"},{"title":"Docker","href":"/guides/create-secret/docker"},{"title":"ECR","href":"/guides/create-secret/ecr"},{"title":"GCP","href":"/guides/create-secret/gcp"},{"title":"Keypair","href":"/guides/create-secret/keypair"},{"title":"NATS Account","href":"/guides/create-secret/nats-account"},{"title":"Opaque","href":"/guides/create-secret/opaque"},{"title":"TLS","href":"/guides/create-secret/tls"},{"title":"Username \u0026 Password","href":"/guides/create-secret/userpass"}]},{"title":"Create a Service Account","href":"/guides/create-service-account"},{"title":"Create a Workload","href":"/guides/create-workload"}]},{"group":"Deployment","icon":"rocket","pages":[{"title":"Apply YAML Manifests","href":"/guides/cpln-apply"},{"title":"Blue/Green Deployments","href":"/guides/blue-green-deployments"},{"title":"Convert Kubernetes Manifests","href":"/guides/cli/cpln-convert"},{"title":"Delete Resources from Manifests","href":"/guides/cpln-delete"},{"title":"Deploy Docker Compose Projects","href":"/guides/compose-deploy"},{"title":"Deploy a Workload to Your Own Hardware","sidebarTitle":"Deploy to Your Own Hardware","href":"/guides/deploy-to-your-own-hardware"},{"title":"Manage Helm Releases","href":"/guides/cpln-helm"}]},{"group":"GitOps","icon":"code-branch","pages":[{"title":"CI/CD Examples","href":"/guides/gitops"},{"title":"Environment Promotion","href":"/guides/environment-promotion"},{"title":"Jenkins Plugin","href":"/guides/jenkins-plugin"}]},{"group":"Images","icon":"docker","pages":[{"title":"Push Images to Registry","href":"/guides/push-image"},{"title":"Pull Images from Registries","href":"/guides/pull-image"},{"title":"Copy Images Between Organizations","href":"/guides/copy-image"},{"title":"Publishing \u0026 Converting VM Images","href":"/guides/vm-images"},{"title":"Build with Buildpacks","href":"/guides/buildpacks"}]},{"group":"Native Networking","icon":"network-wired","pages":[{"title":"Native Networking Setup","href":"/guides/native-networking/native-networking-setup"},{"group":"AWS PrivateLink","pages":[{"title":"PrivateLink with RDS","href":"/guides/native-networking/aws-privatelink/privatelink-rds-terraform"}]},{"group":"GCP Private Service Connect","pages":[{"title":"PSC with Cloud SQL","href":"/guides/native-networking/private-service-connect/cloud-sql"}]}]},{"group":"Observability","icon":"chart-line","pages":[{"title":"Centralized Metrics Management","sidebarTitle":"Metrics Management","href":"/guides/centralized-metrics-management"},{"title":"Default Metrics","href":"/guides/default-metrics"},{"title":"Export Metrics to Prometheus","href":"/guides/export-metrics"}]},{"group":"Sandbox","icon":"laptop-code","pages":[{"title":"Getting Started with Sandbox","href":"/guides/sandbox/getting-started"},{"title":"Building Toolbox Images","href":"/guides/sandbox/toolbox-images"},{"title":"Sandbox Web UI","href":"/guides/sandbox/ui-reference"},{"title":"Container Internals","href":"/guides/sandbox/container-internals"},{"title":"Terminal \u0026 tmux","href":"/guides/sandbox/terminal-tmux"},{"title":"Sandbox Helper CLI","href":"/guides/sandbox/sandbox-helper"},{"title":"Multi-Repo Workspaces","href":"/guides/sandbox/multi-repo"}]},{"group":"Workload Access","icon":"key","pages":[{"title":"Connect to Workloads","href":"/guides/cli/workload/connect"},{"title":"Copy Files to/from Workloads","href":"/guides/cli/cpln-cp"},{"title":"Execute Commands in Workloads","href":"/guides/cli/workload/exec"},{"title":"Port Forward to Workloads","href":"/guides/cli/cpln-port-forward"},{"title":"Run One-off Workloads","href":"/guides/cli/workload/run"},{"title":"Run Commands with Cron Workloads","href":"/guides/cli/workload/cron-run"}]}]},{"tab":"Template Catalog","pages":[{"title":"Template Catalog","href":"/template-catalog/overview"}]},{"tab":"Managed Kubernetes","pages":[{"title":"Managed Kubernetes","href":"/mk8s/overview"}]},{"tab":"CPLN BYOK","pages":[{"title":"CPLN BYOK","href":"/byok/overview"}]},{"tab":"AI Agents","pages":[{"title":"AI Agents","href":"/ai/overview"}]},{"tab":"Infra as Code","pages":[{"title":"Infra as Code","href":"/iac/overview"}]},{"tab":"CLI Reference","pages":[{"title":"CLI Reference","href":"/cli-reference/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/api"}]}]},"basePath":"","title":"Configure an Agent - Control Plane","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":[],"chunks":[]}