Trace Id is missing
Skip to main content
Azure

HashiCorp Terraform on Azure

Easily manage infrastructure as code using a familiar automation tool.
 

Simplify infrastructure management

Define infrastructure as code with declarative configuration files that can be used to create, manage, and update infrastructure resources, such as virtual machines (VMs), networks, and containers. Use the Terraform configuration language to easily automate resource management across your workflow.

Why Terraform on Azure?

Pre-integrated

Terraform is built into Azure Cloud Shell and authenticated to your subscription, so it’s integrated and ready to go. Build and test modules in Azure with the Azure Terraform extension for Visual Studio Code, providing Terraform command support, resource graph visualization, and Azure Cloud Shell integration directly within Visual Studio Code.

Community-led

Microsoft and HashiCorp engineering teams work together with the Terraform community to continually develop the Azure Terraform provider and modules. Join the GitHub repository to make feature requests, report issues, and contribute.

Enterprise-ready

Streamline operations and provision any infrastructure more securely and efficiently with Terraform Enterprise. Centralize infrastructure deployment within one workflow and provision, govern, and audit any environment.

Explore common Terraform on Azure scenarios

Create a Linux virtual machine.

Create a Kubernetes cluster.

Create a virtual machine scale set.

Configure a virtual network.

Example DevOps workflow with Terraform on Azure

Immutable Infrastructure CI/CD using Jenkins and Terraform on Azure Virtual Architecture overview

Azure is a world-class cloud for hosting virtual machines running Windows or Linux. Whether you use Java, Node.js, Go, or PHP to develop your applications, you'll need a continuous integration and continuous deployment (CI/CD) pipeline to push changes to these virtual machines automatically.
 

Get started quickly

1

Create your Azure free account.

2

Install and configure Terraform.

3

Create a VM using Terraform.

Other HashiCorp solutions on Azure

HashiCorp Vault

Manage secrets and protect sensitive data across dynamic, distributed environments.

HashiCorp Consul

Connect, secure, and configure services across any runtime platform and public or private cloud.

Stay up-to-date with the Microsoft Open Source blog

Dig deeper—learn more about Terraform on Azure

#chatEngagement { color: #fff; background-color: #006abb; border: 1px solid #0078d4; border-radius: 4px; display: inline-block; font-size: 14px; font-weight: 600; padding: 10px 16px; } #chatEngagement:hover, #chatEngagement:active { text-decoration: underline; } #chatDisengagement { color: #0062ad; display: inline-block; font-size: 14px; font-weight: 600; padding-right: 1em; position: relative; text-decoration: none; border: none; background-color: transparent; } #chatEngagement:focus { outline: 1px solid #fff; outline-offset: -4px; text-decoration: underline; } #chatDisengagement:after { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 1L9 6L4 11' stroke='%230062ad'/%3E%3C/svg%3E"); content: ' '; height: 12px; width: 12px; display: inline-flex; vertical-align: middle; margin-left: .2em; transition: all .2s ease-in-out; position: absolute; bottom: -6px; background-color: transparent; } #chatDisengagement:focus { outline-offset: 10px; } #lp-iframe-container { border: 0; bottom: 0; box-shadow: 0 5px 15px 0 #00000033; height: 500px; left: auto !important; min-width: 300px; max-width: 350px; padding: 0; position: fixed; right: 0; top: auto !important; z-index: 1031; } #iFrame { height: 100%; width: 100%; border: 0; } #proactive-chat-dialog { position: fixed; z-index: 10400; bottom: -24px; right: 11px; } #proactive-chat-dialog .chatContainer { min-width: 272px; height: 277px; color: #000; line-height: 0; position: relative; border: 0 !important; background-repeat: no-repeat !important; background-color: #fff !important; margin: auto; padding: 12px; background-size: contain !important; box-shadow: 0 2.8px 2.2px rgba(0, 0, 0, 0.034), 0 6.7px 5.3px rgba(0, 0, 0, 0.048), 0 12.5px 10px rgba(0, 0, 0, 0.06), 0 22.3px 17.9px rgba(0, 0, 0, 0.072), 0 41.8px 33.4px rgba(0, 0, 0, 0.086), 0 100px 80px rgba(0, 0, 0, 0.12); } #proactive-chat-dialog .chatContainer .chat-cta { text-align: center; font-size: 24px; font-weight: 600; position: relative; top: 160px; } #proactive-chat-dialog .chatContainer .chat-buttons { position: relative; top: 185px; width: 100%; display: flex; gap: 1em; justify-content: center; flex-direction: column; } #proactive-chat-dialog .chatContainer .chat-buttons .arrow-link { width: auto; margin: auto; } #proactive-chat-dialog .chatContainer .chat-buttons .arrow-link:after { bottom: -6px; } @media only screen and (min-width: 33.75em) { #proactive-chat-dialog .chatContainer .chat-buttons { top: 200px; flex-direction: row; } } </style> <div id="proactive-chat-dialog" class="proactive-chat-hidden"> <div class="chatContainer" style="background: url('{{module.bg-img-src}}') no-repeat top left" > <div class="chat-cta">{{module.heading}}</div> <div class="chat-buttons"> <button type="button" id="chatEngagement" aria-label="{{chat-engagement.aria-label}}" class="button button--primary01 lp-chatnow" data-lp-event="click" data-bi-id="expand-chat" data-bi-an="chat" data-bi-chtid="azure chat 1" data-bi-chtnm="live person proactive chat" data-bi-bhvr="16" data-bi-tn="button button--primary01 lp-chatnow" > {{chat-engagement.btn-txt}} </button> <button type="button" id="chatDisengagement" aria-label="{{chat-disengagement.aria-label}}" class="arrow-link lp-nothanks" data-lp-event="close" data-bi-id="collapse-chat" data-bi-an="chat" data-bi-chtid="azure chat 1" data-bi-chtnm="live person proactive chat" data-bi-tn="arrow-link lp-nothanks" > {{chat-disengagement.btn-txt}} </button> </div> </div> </div> '/>