{"id":60654,"date":"2026-03-03T09:48:53","date_gmt":"2026-03-03T09:48:53","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=60654"},"modified":"2026-03-03T09:48:53","modified_gmt":"2026-03-03T09:48:53","slug":"terraform-step-by-step-use-local-cli-to-modify-remote-state-in-tfe","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/terraform-step-by-step-use-local-cli-to-modify-remote-state-in-tfe\/","title":{"rendered":"Terraform: Step\u2011By\u2011Step: Use Local CLI to Modify Remote State in TFE"},"content":{"rendered":"\n<p>Below is a <strong>step\u2011by\u2011step tutorial<\/strong> for using the Terraform CLI against a <strong>VCS\u2011connected HCP\/TFE workspace<\/strong>, plus a <strong>command catalog<\/strong> for all the common remote actions.<\/p>\n\n\n\n<p><strong>Step\u2011By\u2011Step: Use Local CLI to Modify Remote State in TFE<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Verify your Terraform version matches the workspace requirement<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">   terraform version<\/code><\/span><\/pre>\n\n\n<p>If the workspace requires <code>~&gt;1.14.0<\/code>, make sure you\u2019re on <code>1.14.x<\/code>.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Authenticate to HCP\/TFE<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">   terraform login<\/code><\/span><\/pre>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Set the remote workspace (pick one method) Option A: Use env vars (fast + explicit)<\/li>\n<\/ol>\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\">   <span class=\"hljs-keyword\">export<\/span> TF_CLOUD_ORGANIZATION=<span class=\"hljs-string\">\"Drivemode\"<\/span>\n   <span class=\"hljs-keyword\">export<\/span> TF_WORKSPACE=<span class=\"hljs-string\">\"evp-aws-development-core\"<\/span><\/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<p>Option B: Use workspace selection after init<\/p>\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 init\n   terraform workspace <span class=\"hljs-keyword\">list<\/span>\n   terraform workspace select evp-aws-development-core<\/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<ol start=\"4\" class=\"wp-block-list\">\n<li>Initialize the backend<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">   terraform init<\/code><\/span><\/pre>\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Confirm the remote state is reachable<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">   terraform state <span class=\"hljs-keyword\">list<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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<ol start=\"6\" class=\"wp-block-list\">\n<li>Modify remote state (example: untaint)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">   terraform untaint <span class=\"hljs-string\">'module.k8s_az_anchor&#91;0].kubernetes_manifest.priority_class&#91;0]'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><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<ol start=\"7\" class=\"wp-block-list\">\n<li>Verify the plan is now clean<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">   terraform plan<\/code><\/span><\/pre>\n\n\n<p>That flow <strong>modifies the remote state in TFE<\/strong> because your backend is remote and the CLI is authenticated.<\/p>\n\n\n\n<p><strong>Remote Run Commands (All Common Commands That Run Remote Actions)<\/strong><\/p>\n\n\n\n<p>These commands <strong>create or change remote resources<\/strong> (or interact with remote state):<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Plan (remote run)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">   terraform plan<\/code><\/span><\/pre>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Apply (remote run)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">   terraform apply<\/code><\/span><\/pre>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Destroy (remote run)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">   terraform destroy<\/code><\/span><\/pre>\n\n\n<p>Alternative:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">   terraform apply -destroy<\/code><\/span><\/pre>\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Import (writes to remote state)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">   terraform import <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">resource_address<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">remote_id<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Refresh only (safe read\/update of state)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">   terraform plan -refresh-only<\/code><\/span><\/pre>\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>State list (remote state)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">   terraform state <span class=\"hljs-keyword\">list<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><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<ol start=\"7\" class=\"wp-block-list\">\n<li>State show (remote state)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">   terraform state show <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">resource_address<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ol start=\"8\" class=\"wp-block-list\">\n<li>State move (remote state)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">   terraform state mv <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">old_address<\/span>&gt;<\/span> <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">new_address<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ol start=\"9\" class=\"wp-block-list\">\n<li>State remove (remote state)<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">   terraform state rm <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">resource_address<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ol start=\"10\" class=\"wp-block-list\">\n<li>State pull (remote \u2192 local file) <code>terraform state pull > \/tmp\/tfstate.json<\/code><\/li>\n\n\n\n<li>State push (local file \u2192 remote) <code>terraform state push \/tmp\/tfstate.json<\/code><\/li>\n\n\n\n<li>Replace provider in state (remote state) <code>terraform state replace-provider &lt;old_provider> &lt;new_provider><\/code><\/li>\n\n\n\n<li>Taint \/ Untaint (if supported by your version) <code>terraform taint &lt;resource_address> terraform untaint &lt;resource_address><\/code><\/li>\n\n\n\n<li>Force unlock remote state (rare) <code>terraform force-unlock &lt;LOCK_ID><\/code><\/li>\n\n\n\n<li>Show outputs (remote state)<br><code>bash terraform output<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>Important behavior in VCS\u2011connected workspaces<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CLI runs use your <strong>local config snapshot<\/strong>, not the Git branch snapshot.<\/li>\n\n\n\n<li>If CLI\u2011driven runs are disabled in the workspace, <code>plan\/apply\/import<\/code> will fail.<\/li>\n\n\n\n<li>State commands still work <strong>if your org policy allows<\/strong> and your version matches.<\/li>\n<\/ul>\n\n\n\n<p>If you want, I can tailor this to your exact workspace settings. Which one is your workspace using?<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>VCS\u2011connected + CLI runs allowed<\/li>\n\n\n\n<li>VCS\u2011connected + CLI runs disabled<\/li>\n\n\n\n<li>CLI\u2011driven workspace (no VCS)<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Below is a step\u2011by\u2011step tutorial for using the Terraform CLI against a VCS\u2011connected HCP\/TFE workspace, plus a command catalog for all the common remote actions. Step\u2011By\u2011Step: Use Local CLI to&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[11138],"tags":[],"class_list":["post-60654","post","type-post","status-publish","format-standard","hentry","category-best-tools"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/60654","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=60654"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/60654\/revisions"}],"predecessor-version":[{"id":60655,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/60654\/revisions\/60655"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=60654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=60654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=60654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}