{"id":28049,"date":"2025-08-18T07:00:51","date_gmt":"2025-08-18T07:00:51","guid":{"rendered":"https:\/\/cloud-cod.com\/?p=28049"},"modified":"2025-08-18T10:06:44","modified_gmt":"2025-08-18T10:06:44","slug":"deploying-aws-resources-in-multiple-accounts-using-terraform-cloud-and-tf-provider-aliases","status":"publish","type":"post","link":"https:\/\/cloud-cod.com\/index.php\/2025\/08\/18\/deploying-aws-resources-in-multiple-accounts-using-terraform-cloud-and-tf-provider-aliases\/","title":{"rendered":"Deploying AWS resources in Multiple-Accounts using Terraform Cloud and TF Provider Aliases"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"28049\" class=\"elementor elementor-28049\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f3e46c6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f3e46c6\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5deedc3\" data-id=\"5deedc3\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4a250d1 elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"4a250d1\" data-element_type=\"widget\" data-settings=\"{&quot;exclude_headings_by_selector&quot;:[],&quot;marker_view&quot;:&quot;bullets&quot;,&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;,&quot;h4&quot;,&quot;h5&quot;,&quot;h6&quot;],&quot;icon&quot;:{&quot;value&quot;:&quot;fas fa-circle&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor-pro - v3.17.0 - 01-11-2023 *\/\n.elementor-widget-table-of-contents .elementor-toc__header-title{color:var(--header-color)}.elementor-widget-table-of-contents.elementor-toc--collapsed .elementor-toc__toggle-button--collapse,.elementor-widget-table-of-contents:not(.elementor-toc--collapsed) .elementor-toc__toggle-button--expand{display:none}.elementor-widget-table-of-contents .elementor-widget-container{min-height:var(--box-min-height);border:var(--box-border-width,1px) solid var(--box-border-color,#9da5ae);border-radius:var(--box-border-radius,3px);background-color:var(--box-background-color);transition:min-height .4s;overflow:hidden}.elementor-toc__header{display:flex;align-items:center;justify-content:space-between;padding:var(--box-padding,20px);background-color:var(--header-background-color);border-bottom:var(--separator-width,1px) solid var(--box-border-color,#9da5ae)}.elementor-toc__header-title{font-size:18px;margin:0;color:var(--header-color)}.elementor-toc__toggle-button{cursor:pointer;display:inline-flex}.elementor-toc__toggle-button i{color:var(--toggle-button-color)}.elementor-toc__toggle-button svg{height:1em;width:1em;fill:var(--toggle-button-color)}.elementor-toc__spinner-container{text-align:center}.elementor-toc__spinner{font-size:2em}.elementor-toc__spinner.e-font-icon-svg{height:1em;width:1em}.elementor-toc__body{padding:var(--box-padding,20px);max-height:var(--toc-body-max-height);overflow-y:auto}.elementor-toc__body::-webkit-scrollbar{width:7px}.elementor-toc__body::-webkit-scrollbar-thumb{background-color:#babfc5;border-radius:10px}.elementor-toc__list-wrapper{list-style:none;padding:0}.elementor-toc__list-item{margin-bottom:.5em}.elementor-toc__list-item.elementor-item-active{font-weight:700}.elementor-toc__list-item .elementor-toc__list-wrapper{margin-top:.5em;margin-left:var(--nested-list-indent,1em)}.elementor-toc__list-item-text:hover{color:var(--item-text-hover-color);-webkit-text-decoration:var(--item-text-hover-decoration);text-decoration:var(--item-text-hover-decoration)}.elementor-toc__list-item-text.elementor-item-active{color:var(--item-text-active-color);-webkit-text-decoration:var(--item-text-active-decoration);text-decoration:var(--item-text-active-decoration)}.elementor-toc__list-item-text-wrapper{display:flex;align-items:center}.elementor-toc__list-item-text-wrapper:before,.elementor-toc__list-item-text-wrapper i{margin-right:8px;color:var(--marker-color)}.elementor-toc__list-item-text-wrapper svg{margin-right:8px;fill:var(--marker-color);height:var(--marker-size,.5em);width:var(--marker-size,.5em)}.elementor-toc__list-item-text-wrapper i{font-size:var(--marker-size,.5em)}.elementor-toc__list-item-text-wrapper:before{font-size:var(--marker-size,1em)}.elementor-toc--content-ellipsis .elementor-toc__list-item-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.elementor-toc__list-items--collapsible>.elementor-toc__list-wrapper>.elementor-toc__list-item>.elementor-toc__list-wrapper{display:none}.elementor-toc__heading-anchor{position:absolute}.elementor-toc__body .elementor-toc__list-item-text{color:var(--item-text-color);-webkit-text-decoration:var(--item-text-decoration);text-decoration:var(--item-text-decoration)}.elementor-toc__body .elementor-toc__list-item-text:hover{color:var(--item-text-hover-color);-webkit-text-decoration:var(--item-text-hover-decoration);text-decoration:var(--item-text-hover-decoration)}.elementor-toc__body .elementor-toc__list-item-text.elementor-item-active{color:var(--item-text-active-color);-webkit-text-decoration:var(--item-text-active-decoration);text-decoration:var(--item-text-active-decoration)}ol.elementor-toc__list-wrapper{counter-reset:item}ol.elementor-toc__list-wrapper .elementor-toc__list-item{counter-increment:item}ol.elementor-toc__list-wrapper .elementor-toc__list-item-text-wrapper:before{content:counters(item,\".\") \". \"}<\/style>\t\t<div class=\"elementor-toc__header\">\n\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tTable of Contents\t\t\t<\/h4>\n\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__4a250d1\" aria-expanded=\"true\" aria-label=\"Open table of contents\"><i aria-hidden=\"true\" class=\"fas fa-chevron-down\"><\/i><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__4a250d1\" aria-expanded=\"true\" aria-label=\"Close table of contents\"><i aria-hidden=\"true\" class=\"fas fa-chevron-up\"><\/i><\/div>\n\t\t\t\t\t<\/div>\n\t\t<div id=\"elementor-toc__4a250d1\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35d931f elementor-widget elementor-widget-heading\" data-id=\"35d931f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.17.0 - 01-11-2023 *\/\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><h2 class=\"elementor-heading-title elementor-size-default\">Introduction<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0747f74 elementor-widget elementor-widget-text-editor\" data-id=\"0747f74\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.17.0 - 01-11-2023 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\t<p>My previous blog post described h<span style=\"color: #777777; font-family: 'Open Sans', Helvetica, Arial, sans-serif; font-size: 0.875rem;\">ow to deploy AWS Resources across Regions using Terraform. It explained how Terraform Provider Aliases work and helps with multi-region deployments. Now, I will show you how to deploy AWS resources in multiple AWS Accounts using Aliases. The Terraform Cloud will be used to securely store the AWS credentials (Access Key\/Secret Key). The Terraform Provider Aliases are documented here: <a href=\"https:\/\/developer.hashicorp.com\/terraform\/language\/providers\/configuration#alias-multiple-provider-configurations\">Terraform Multiple Provider Configurations<\/a>. Alright, let\u2019s dive right in!<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a08b0d5 elementor-widget elementor-widget-heading\" data-id=\"a08b0d5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Terraform Cloud<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e590efe elementor-widget elementor-widget-text-editor\" data-id=\"e590efe\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Let&#8217;s assume that we have to deploy a couple of AWS VPCs across three different AWS Accounts. What is more, we want to do it using Terraform. We will use long-term credentials: AWS Access Key and Secret Key ( <a href=\"https:\/\/docs.aws.amazon.com\/IAM\/latest\/UserGuide\/id_credentials_access-keys.html\">https:\/\/docs.aws.amazon.com\/IAM\/latest\/UserGuide\/id_credentials_access-keys.html<\/a> ). Every IAM User owns a different set of Access Key \/ Secret Key. Those credentials will be kept in the Terraform Cloud Workspace Variables. Tt will allow Terraform to use those credentials and create the AWS resources.<\/p><p>I will create a new Terraform Cloud Workspace. Each AWS Account requires its own Access Key &#8211; Secret Key pair. Having three AWS Accounts, we need 3 such pairs (three Access Keys and there Secret keys = six variables in total). Let&#8217;s give the variables meaningful names.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7e3f6a1 elementor-widget elementor-widget-image\" data-id=\"7e3f6a1\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.17.0 - 01-11-2023 *\/\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"http:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/terraform_cloud_variables.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"TFC_Variables_credentials\" data-elementor-lightbox-description=\"TFC_Variables_credentials\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjgwODIsInVybCI6Imh0dHBzOlwvXC9jbG91ZC1jb2QuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI1XC8wOFwvdGVycmFmb3JtX2Nsb3VkX3ZhcmlhYmxlcy5wbmcifQ%3D%3D\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"431\" src=\"https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/terraform_cloud_variables-768x431.png\" class=\"attachment-medium_large size-medium_large wp-image-28082\" alt=\"TFC_Variables_credentials\" srcset=\"https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/terraform_cloud_variables-768x431.png 768w, https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/terraform_cloud_variables-300x168.png 300w, https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/terraform_cloud_variables-1024x575.png 1024w, https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/terraform_cloud_variables-1536x862.png 1536w, https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/terraform_cloud_variables.png 1908w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0964980 elementor-widget elementor-widget-text-editor\" data-id=\"0964980\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Now, let\u2019s jump straight into the code. Please note that I will use the same Module as described in my previous blog article, so most of the code may be familiar to you ( <a href=\"https:\/\/cloud-cod.com\/index.php\/2025\/08\/05\/deploying-aws-resources-in-multiple-regions-using-terraform-provider-aliases\/\">https:\/\/cloud-cod.com\/index.php\/2025\/08\/05\/deploying-aws-resources-in-multiple-regions-using-terraform-provider-aliases\/<\/a> ).<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0a3c1e3 elementor-widget elementor-widget-heading\" data-id=\"0a3c1e3\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Module Code<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-325e7aa elementor-widget elementor-widget-text-editor\" data-id=\"325e7aa\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The module (which I store locally as a folder) will create a VPC. The user will have to provide the CIDR range and the Name.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-459786a elementor-widget elementor-widget-text-editor\" data-id=\"459786a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The\u00a0<strong>main.tf<\/strong>\u00a0file:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c5e47e5 elementor-widget elementor-widget-code-highlight\" data-id=\"c5e47e5\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>resource \"aws_vpc\" \"vpc\" {\r\n  provider   = aws.provider\r\n  cidr_block = var.vpc_cidr\r\n  tags = {\r\n    Name = var.vpc_name\r\n  }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a4184e3 elementor-widget elementor-widget-text-editor\" data-id=\"a4184e3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The\u00a0<strong>variables.tf<\/strong>\u00a0file:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7984a85 elementor-widget elementor-widget-code-highlight\" data-id=\"7984a85\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>variable \"vpc_cidr\" {\r\n  type = string\r\n}\r\n\r\nvariable \"vpc_name\" {\r\n  type = string\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d2a0a3f elementor-widget elementor-widget-text-editor\" data-id=\"d2a0a3f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The\u00a0<strong>versions.tf<\/strong>\u00a0file:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7080258 elementor-widget elementor-widget-code-highlight\" data-id=\"7080258\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>terraform {\r\n  required_providers {\r\n    aws = {\r\n      source  = \"hashicorp\/aws\"\r\n      version = \"~> 6.0\"\r\n      configuration_aliases = [ aws.provider ] # provider name will be passed to the module\r\n    }\r\n  }\r\n  required_version = \">= 1.2.0\"\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9947bca elementor-widget elementor-widget-text-editor\" data-id=\"9947bca\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><strong><span data-preserver-spaces=\"true\">Very important!<\/span><\/strong><span data-preserver-spaces=\"true\">\u00a0The usage of the argument called\u00a0<\/span><strong><span data-preserver-spaces=\"true\">configuration_aliases<\/span><\/strong><span data-preserver-spaces=\"true\">\u00a0inside the module allows two things:<\/span><\/p><ul><li><span data-preserver-spaces=\"true\">The provider configuration will be passed from the ROOT to the module (and it is the ROOT that will select the Region for the resource)<\/span><\/li><li><span data-preserver-spaces=\"true\">The resources inside the module will be allowed to use the\u00a0<\/span><strong><span data-preserver-spaces=\"true\">provider<\/span><\/strong><span data-preserver-spaces=\"true\">\u00a0argument.<\/span><\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2992489 elementor-widget elementor-widget-heading\" data-id=\"2992489\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Main Code<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bf09e4b elementor-widget elementor-widget-text-editor\" data-id=\"bf09e4b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p><span style=\"font-size: 0.875rem;\">The root\u00a0<\/span><strong style=\"font-size: 0.875rem;\">versions.tf<\/strong><span style=\"font-size: 0.875rem;\"> file:<\/span><\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-517cdf1 elementor-widget elementor-widget-code-highlight\" data-id=\"517cdf1\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>terraform {\r\n  # please put your backend config here\r\n  cloud {\r\n    organization = \"<your-org>\"\r\n\r\n    workspaces {\r\n      name = \"<tfc-workspace-name>\"\r\n    }\r\n  }\r\n  required_providers {\r\n    aws = {\r\n      source  = \"hashicorp\/aws\"\r\n      version = \"~> 6.0\"\r\n    }\r\n  }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b7b3537 elementor-widget elementor-widget-text-editor\" data-id=\"b7b3537\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The root <strong>variables.tf<\/strong>. Please note we need a pair of Access-Ke\/Secret-Key variables for every Account.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-36a90dc elementor-widget elementor-widget-code-highlight\" data-id=\"36a90dc\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># Account 1\r\nvariable \"aws_account_1_access_key\" {}\r\nvariable \"aws_account_1_secret_key\" {}\r\n# Account 2\r\nvariable \"aws_account_2_access_key\" {}\r\nvariable \"aws_account_2_secret_key\" {}\r\n# Account 3\r\nvariable \"aws_account_3_access_key\" {}\r\nvariable \"aws_account_3_secret_key\" {}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9440ee elementor-widget elementor-widget-text-editor\" data-id=\"d9440ee\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The root\u00a0<strong>providers.tf<\/strong> file. I define three providers with Aliases. Each provider will be used to create AWS resources in different AWS Account:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35420c3 elementor-widget elementor-widget-code-highlight\" data-id=\"35420c3\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>provider \"aws\" {\r\n  alias  = \"account_1\"\r\n  region = \"eu-west-1\"\r\n  access_key = var.aws_account_1_access_key\r\n  secret_key = var.aws_account_1_secret_key\r\n}\r\n\r\nprovider \"aws\" {\r\n  alias  = \"account_2\"\r\n  region = \"eu-west-1\"\r\n  access_key = var.aws_account_2_access_key\r\n  secret_key = var.aws_account_2_secret_key\r\n}\r\n\r\nprovider \"aws\" {\r\n  alias  = \"account_3\"\r\n  region = \"eu-west-1\"\r\n  access_key = var.aws_account_3_access_key\r\n  secret_key = var.aws_account_3_secret_key\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4df5659 elementor-widget elementor-widget-text-editor\" data-id=\"4df5659\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The root\u00a0<strong>main.tf<\/strong>\u00a0file. I create three VPCs by calling my local module three times. Each time I use a different provider alias to deploy resources in different AWS Accounts.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c970159 elementor-widget elementor-widget-code-highlight\" data-id=\"c970159\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>module \"vpc-account-1\" {\r\n  source = \".\/vpc_module\"\r\n\r\n  vpc_name = \"vpc-eu-west-1\"\r\n  vpc_cidr = \"10.80.0.0\/16\"\r\n\r\n  providers = {\r\n  \taws.provider = aws.account_1 # we have to instruct the module what provider to be used\r\n  }\r\n}\r\n\r\nmodule \"vpc-account-2\" {\r\n  source = \".\/vpc_module\"\r\n\r\n  vpc_name = \"vpc-eu-west-1\"\r\n  vpc_cidr = \"10.80.0.0\/16\"\r\n\r\n  providers = {\r\n  \taws.provider = aws.account_2 # we have to instruct the module what provider to be used\r\n  }\r\n}\r\n\r\nmodule \"vpc-account-3\" {\r\n  source = \".\/vpc_module\"\r\n\r\n  vpc_name = \"vpc-eu-west-1\"\r\n  vpc_cidr = \"10.80.0.0\/16\"\r\n\r\n  providers = {\r\n  \taws.provider = aws.account_3 # we have to instruct the module what provider to be used\r\n  }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d113ee1 elementor-widget elementor-widget-heading\" data-id=\"d113ee1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Result<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-751d952 elementor-widget elementor-widget-text-editor\" data-id=\"751d952\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Let&#8217;s check all three AWS Accounts to confirm that VPCs have been created:<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d97f90 elementor-widget elementor-widget-image\" data-id=\"3d97f90\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"http:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/aws_accounts-1-scaled.png\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox-title=\"AWS_multiple_accounts\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJpZCI6MjgwODQsInVybCI6Imh0dHBzOlwvXC9jbG91ZC1jb2QuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI1XC8wOFwvYXdzX2FjY291bnRzLTEtc2NhbGVkLnBuZyJ9\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"216\" src=\"https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/aws_accounts-1-768x216.png\" class=\"attachment-medium_large size-medium_large wp-image-28084\" alt=\"AWS_multiple_accounts\" srcset=\"https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/aws_accounts-1-768x216.png 768w, https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/aws_accounts-1-300x84.png 300w, https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/aws_accounts-1-1024x287.png 1024w, https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/aws_accounts-1-1536x431.png 1536w, https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/aws_accounts-1-2048x575.png 2048w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>The blog article shows how to deploy AWS resources in multiple AWS Accounts with Terraform.<\/p>\n","protected":false},"author":2,"featured_media":28056,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[21,17],"tags":[34,31],"class_list":["post-28049","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aws","category-terraform","tag-aws","tag-terraform"],"uagb_featured_image_src":{"full":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1.png",1872,1246,false],"thumbnail":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1.png",150,100,false],"medium":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1-300x200.png",300,200,true],"medium_large":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1.png",768,511,false],"large":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1.png",800,532,false],"1536x1536":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1.png",1536,1022,false],"2048x2048":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1.png",1872,1246,false],"onepress-blog-small":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1.png",225,150,false],"onepress-small":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1.png",451,300,false],"onepress-medium":["https:\/\/cloud-cod.com\/wp-content\/uploads\/2025\/08\/thumbnail_Terraform_AWS_Proivder_Aliases_small3-1.png",601,400,false]},"uagb_author_info":{"display_name":"Jakub","author_link":"https:\/\/cloud-cod.com\/index.php\/author\/jakub\/"},"uagb_comment_info":158,"uagb_excerpt":"The blog article shows how to deploy AWS resources in multiple AWS Accounts with Terraform.","_links":{"self":[{"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/posts\/28049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/comments?post=28049"}],"version-history":[{"count":43,"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/posts\/28049\/revisions"}],"predecessor-version":[{"id":28103,"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/posts\/28049\/revisions\/28103"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/media\/28056"}],"wp:attachment":[{"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/media?parent=28049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/categories?post=28049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloud-cod.com\/index.php\/wp-json\/wp\/v2\/tags?post=28049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}