<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linode regions - Architect the cloud</title>
	<atom:link href="https://blog.slepcevic.net/tag/linode-regions/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.slepcevic.net</link>
	<description></description>
	<lastBuildDate>Mon, 03 Jun 2024 22:57:36 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Easy way to deploy Linode instances across all (core) regions using Terraform</title>
		<link>https://blog.slepcevic.net/easy-way-to-deploy-linode-instances-across-all-core-regions-using-terraform/</link>
					<comments>https://blog.slepcevic.net/easy-way-to-deploy-linode-instances-across-all-core-regions-using-terraform/#respond</comments>
		
		<dc:creator><![CDATA[Alesandro Slepčević]]></dc:creator>
		<pubDate>Mon, 03 Jun 2024 22:57:35 +0000</pubDate>
				<category><![CDATA[Akamai Connected Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Terraform]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Linode regions]]></category>
		<guid isPermaLink="false">https://blog.slepcevic.net/?p=426</guid>

					<description><![CDATA[<p>In preparations for a upcoming blog post related to running AI workloads on Akamai Connected Cloud, I needed to deploy instances in all available Linode regions. Since there&#8217;s no way that I&#8217;ll manually create a list of regions, I thought...</p>
<p>The post <a href="https://blog.slepcevic.net/easy-way-to-deploy-linode-instances-across-all-core-regions-using-terraform/">Easy way to deploy Linode instances across all (core) regions using Terraform</a> first appeared on <a href="https://blog.slepcevic.net">Architect the cloud</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>In preparations for a upcoming blog post related to running AI workloads on Akamai Connected Cloud, I needed to deploy instances in all available Linode regions. Since there&#8217;s no way that I&#8217;ll manually create a list of regions, I thought it would be cool to use Terraforms HTTP provider to dynamically fetch the list of regions and deploy an instance to it. </p>



<p></p>



<h3 class="wp-block-heading">What’s the Plan?</h3>



<p></p>



<ol class="wp-block-list">
<li><strong>Fetch the list of regions</strong>: Use Terraform&#8217;s HTTP provider to retrieve the list of Linode regions via the Linode API.</li>



<li><strong>Deploy Instances</strong>: Use Terraform’s Linode provider to deploy instances in each of these regions.</li>



<li><strong>Grab some coffee</strong>: Sit back and relax while Terraform does the heavy lifting.</li>
</ol>



<h3 class="wp-block-heading">Pre-requisites</h3>



<p>Before we begin, make sure you have:</p>



<ul class="wp-block-list">
<li>A Linode account (If not, sign up <a href="https://www.linode.com/" target="_blank" rel="noopener" title="">here</a>).</li>



<li>A Linode API token (Grab it from your <a href="https://cloud.linode.com/profile/tokens" target="_blank" rel="noopener" title="">Linode dashboard</a>).</li>



<li>Terraform installed on your machine (Download it from <a href="https://developer.hashicorp.com/terraform/install" target="_blank" rel="noopener" title="">here</a>).</li>
</ul>



<h3 class="wp-block-heading">Step-by-Step Guide</h3>



<h4 class="wp-block-heading">Step 1: Define Providers and Variables</h4>



<p>We’ll start by defining our providers and variables. The HTTP provider will fetch the regions, and the Linode provider will deploy our instances.</p>



<p></p>



<pre class="wp-block-code"><code>provider "http" {}

variable "token" {
type = string
default = "mytoken" # Replace with your actual Linode API token
}</code></pre>



<h4 class="wp-block-heading">Step 2: Fetch Regions from Linode API.</h4>



<p>Next, let’s fetch the list of regions using the HTTP provider. We’ll decode the JSON response to extract the region IDs. </p>



<p><strong>Please note that if you uncomment the &#8220;request_headers&#8221; part, you will get a list of regions only available to your user/account. </strong> By default you will get a list of all public regions. </p>



<pre class="wp-block-code"><code>data "http" "regions" {
  url = "https://api.linode.com/v4/regions"

#   request_headers = {
#     Authorization = "Bearer ${var.token}"
#   }
}

locals {
  regions = &#91;for region in jsondecode(data.http.regions.response_body).data : region.id]
}</code></pre>



<h4 class="wp-block-heading">Step 3: Deploy Linode Instances</h4>



<p>Now comes the fun part! We’ll utilize Terraform’s &#8220;<code>for_each"</code> feature to loop through the regions and deploy a virtual machine. </p>



<pre class="wp-block-code"><code><code>provider "linode" {
  token = var.token
}

resource "linode_instance" "instances" {
  for_each = toset(local.regions)

  label    = "linode-${each.key}"
  region   = each.key
  type     = "g6-standard-1"  # Example Linode type, adjust as needed
  image    = "linode/ubuntu20.04"  # Example image, adjust as needed
  root_pass = "your_secure_password"  # Replace with a secure password
  authorized_keys = &#91;file("~/.ssh/id_rsa.pub")]  # Adjust path to your public key
}<span style="background-color: initial; font-family: inherit; font-size: inherit; color: initial;"></span></code></code></pre>



<h4 class="wp-block-heading">Step 4: Outputs</h4>



<p>Finally, let’s define some outputs to see the regions and instances we’ve created.</p>



<pre class="wp-block-code"><code><code>output "regions" {
  value = local.regions
}

output "instances" {
  value = { for instance in linode_instance.instances : instance.id => instance }
}
</code></code></pre>



<h3 class="wp-block-heading">Wrapping Up</h3>



<p>And there you have it! With just a few lines of code, we’ve automated the deployment of Linode instances across all regions. Terraform takes care of the heavy lifting, allowing you to focus on what matters most – enjoying a cup of coffee while your infrastructure magically sets itself up :D+</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="974" height="441" src="http://blog.slepcevic.net/wp-content/uploads/2024/06/Screenshot-2024-06-04-004302.png" alt="" class="wp-image-434" srcset="https://blog.slepcevic.net/wp-content/uploads/2024/06/Screenshot-2024-06-04-004302.png 974w, https://blog.slepcevic.net/wp-content/uploads/2024/06/Screenshot-2024-06-04-004302-300x136.png 300w, https://blog.slepcevic.net/wp-content/uploads/2024/06/Screenshot-2024-06-04-004302-768x348.png 768w" sizes="(max-width: 974px) 100vw, 974px" /></figure>



<p>Until next time, Alex!</p><p>The post <a href="https://blog.slepcevic.net/easy-way-to-deploy-linode-instances-across-all-core-regions-using-terraform/">Easy way to deploy Linode instances across all (core) regions using Terraform</a> first appeared on <a href="https://blog.slepcevic.net">Architect the cloud</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.slepcevic.net/easy-way-to-deploy-linode-instances-across-all-core-regions-using-terraform/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 
Lazy Loading (feed)

Served from: blog.slepcevic.net @ 2026-01-01 20:11:59 by W3 Total Cache
-->