{"id":32467,"date":"2023-10-11T06:06:42","date_gmt":"2023-10-11T06:06:42","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=32467"},"modified":"2023-10-11T06:07:57","modified_gmt":"2023-10-11T06:07:57","slug":"terraform-backend-tutorial","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/terraform-backend-tutorial\/","title":{"rendered":"Terraform Backend Tutorial"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"484\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-27-1024x484.png\" alt=\"\" class=\"wp-image-40899\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-27-1024x484.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-27-300x142.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-27-768x363.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-27.png 1228w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Terraform is a popular open-source infrastructure as code tool used to create and manage infrastructure resources. The state of the infrastructure resources managed by Terraform is stored in a backend, which can be a remote storage location such as Amazon S3.<\/p>\n\n\n\n<p>To configure Terraform to use an S3 backend, you will need to perform the following steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create an S3 bucket &#8211; create a new S3 bucket or use an existing one for storing the Terraform state file.<\/li>\n\n\n\n<li>Create an S3 access key &#8211; generate an access key and secret key with the appropriate permissions for accessing the S3 bucket.<\/li>\n\n\n\n<li>Configure Terraform backend &#8211; add the following code block to your Terraform configuration file, replacing the values with your specific S3 bucket and access key information:<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">List of Terraform Backends Options<\/h2>\n\n\n\n<p>Terraform uses backends to determine how the state is loaded and how an operation such as <code>apply<\/code> is executed. The backend configuration can control where the state is stored and how the operations are executed.<\/p>\n\n\n\n<p>Here&#8217;s a list of commonly used Terraform backends:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Local<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Stores state on the local filesystem.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Remote<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Uses the Terraform Cloud to store state and optionally execute operations.<\/li>\n\n\n\n<li>It&#8217;s the default backend for Terraform Cloud workspaces.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Consul<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Stores the state in Consul&#8217;s key\/value store.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>AzureRM<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Stores the state in an Azure Storage Blob.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>S3<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Stores state in an Amazon S3 bucket.<\/li>\n\n\n\n<li>It can use DynamoDB for state locking and consistency.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Google Cloud Storage (GCS)<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Stores state in a Google Cloud Storage bucket.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Swift<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Stores state in OpenStack Swift.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Artifactory<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Stores state in JFrog Artifactory.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Etcd V2 &amp; V3<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Store the state in Etcd&#8217;s key\/value store.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Manta<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stores the state in Joyent&#8217;s Manta service.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\" start=\"11\">\n<li><strong>OSS<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stores state in Alibaba Cloud Object Storage Service.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\" start=\"12\">\n<li><strong>Pg<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stores state within a configured PostgreSQL database.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\" start=\"13\">\n<li><strong>Kubernetes<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stores state within a Kubernetes Secret.<\/li>\n\n\n\n<li>Executes operations locally.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">terraform {\n  backend <span class=\"hljs-string\">\"s3\"<\/span> {\n    bucket = <span class=\"hljs-string\">\"your-bucket-name\"<\/span>\n    key    = <span class=\"hljs-string\">\"path\/to\/terraform.tfstate\"<\/span>\n    region = <span class=\"hljs-string\">\"your-aws-region\"<\/span>\n    access_key = <span class=\"hljs-string\">\"your-access-key\"<\/span>\n    secret_key = <span class=\"hljs-string\">\"your-secret-key\"<\/span>\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Initialize the backend &#8211; run the <code>terraform init<\/code> command to initialize the backend configuration and create the state file in the S3 bucket.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">terraform {\n  required_providers {\n    aws = {\n      source  = <span class=\"hljs-string\">\"hashicorp\/aws\"<\/span>\n      version = <span class=\"hljs-string\">\"~&gt; 4.0\"<\/span>\n    }\n  }\n  backend <span class=\"hljs-string\">\"s3\"<\/span> {\n    bucket = <span class=\"hljs-string\">\"art54654654546546456\"<\/span>\n    key    = <span class=\"hljs-string\">\"aug\"<\/span>\n    region = <span class=\"hljs-string\">\"ap-south-1\"<\/span>\n\taccess_key = <span class=\"hljs-string\">\"\"<\/span>\n    secret_key = <span class=\"hljs-string\">\"\"<\/span>\n  }\n}\n\n\n<span class=\"hljs-comment\"># Configure the AWS Provider<\/span>\nprovider <span class=\"hljs-string\">\"aws\"<\/span> {\n  region = <span class=\"hljs-string\">\"ap-south-1\"<\/span>\n  access_key = <span class=\"hljs-string\">\"\"<\/span>\n  secret_key = <span class=\"hljs-string\">\"\"<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Terraform Backend Credentail Pass Through Command line<\/h2>\n\n\n\n<p>$ terraform init -backend-config=&#8221;access_key=ASSSSSSSSSSSSSY&#8221; -backend-config=&#8221;secret_key=VddddddddddddddG&#8221; -reconfigure<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Setup Terraform Backend with Azure Blob Container?<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"567\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-26-1024x567.png\" alt=\"\" class=\"wp-image-40896\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-26-1024x567.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-26-300x166.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-26-768x425.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2023\/10\/image-26.png 1438w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">terraform {\n  required_providers {\n    azurerm = {\n      source = <span class=\"hljs-string\">\"hashicorp\/azurerm\"<\/span>\n      version = <span class=\"hljs-string\">\"3.75.0\"<\/span>\n    }\n\taws = {\n      source = <span class=\"hljs-string\">\"hashicorp\/aws\"<\/span>\n      version = <span class=\"hljs-string\">\"5.20.0\"<\/span>\n    }\n\tgithub = {\n      source = <span class=\"hljs-string\">\"integrations\/github\"<\/span>\n      version = <span class=\"hljs-string\">\"5.39.0\"<\/span>\n    }\n  }\n  backend <span class=\"hljs-string\">\"azurerm\"<\/span> {\n    resource_group_name  = <span class=\"hljs-string\">\"eksuw01-rg\"<\/span>\n    storage_account_name = <span class=\"hljs-string\">\"eksuw01sa\"<\/span>\n    container_name       = <span class=\"hljs-string\">\"rajesh\"<\/span>\n    key                  = <span class=\"hljs-string\">\"prod.terraform.tfstate\"<\/span>\n\tsubscription_id = <span class=\"hljs-string\">\"b3dbe884-c3dc\"<\/span>\n    client_id       = <span class=\"hljs-string\">\"6046fe74-dfd2-4\"<\/span>\n    client_secret   = <span class=\"hljs-string\">\"3XJ8Q~uvlwVL\"<\/span>\n    tenant_id       = <span class=\"hljs-string\">\"f34c8fc4-16b\"<\/span>\n  }\n}\nprovider <span class=\"hljs-string\">\"azurerm\"<\/span> {\n  features {}\n  subscription_id = <span class=\"hljs-string\">\"b3dbe884c\"<\/span>\n  client_id       = <span class=\"hljs-string\">\"6046fe74-d\"<\/span>\n  client_secret   = <span class=\"hljs-string\">\"3XJ8Q~uvlwV\"<\/span>\n  tenant_id       = <span class=\"hljs-string\">\"f34c8fc4-1\"<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Terraform is a popular open-source infrastructure as code tool used to create and manage infrastructure resources. The state of the infrastructure resources managed by Terraform is stored in a backend,&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-32467","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/32467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=32467"}],"version-history":[{"count":6,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/32467\/revisions"}],"predecessor-version":[{"id":40901,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/32467\/revisions\/40901"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=32467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=32467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=32467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}