{"id":1421,"date":"2019-09-27T16:00:59","date_gmt":"2019-09-27T13:00:59","guid":{"rendered":"https:\/\/artem.services\/?p=1421"},"modified":"2020-03-02T17:28:48","modified_gmt":"2020-03-02T14:28:48","slug":"terraform-terragrunt-%d0%bf%d0%b8%d1%88%d0%b5%d0%bc-%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d1%8c-%d1%87%d0%b0%d1%81%d1%82%d1%8c-1","status":"publish","type":"post","link":"https:\/\/artem.services\/?p=1421","title":{"rendered":"Terraform\/Terragrunt &#8212; \u041f\u0438\u0448\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c. \u0427\u0430\u0441\u0442\u044c 1"},"content":{"rendered":"<p><img loading=\"lazy\" class=\"aligncenter wp-image-99 size-full\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/terraform.png\" alt=\"\" width=\"1210\" height=\"418\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/terraform.png 1210w, https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/terraform-300x104.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/terraform-768x265.png 768w, https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/terraform-1024x354.png 1024w, https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/terraform-954x330.png 954w\" sizes=\"(max-width: 1210px) 100vw, 1210px\" \/><\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <strong>Terraform<\/strong> \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 <strong>AWS<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f 3-\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>Terragrunt<\/strong>&#39;a.<\/p>\n<p>&nbsp;<\/p>\n<p>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ul>\n<li><a href=\"https:\/\/artem.services\/?p=152\" target=\"_blank\" rel=\"noopener noreferrer\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 AWS CLI<\/a><\/li>\n<li><a href=\"https:\/\/artem.services\/?p=97\" target=\"_blank\" rel=\"noopener noreferrer\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Terraform<\/a> (\u0432\u0435\u0440\u0441\u0438\u044f \u0432\u044b\u0448\u0435 12.0)<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Terragrunt<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><!--more--><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f <strong>Terragrunt<\/strong>&#39;\u0430:<\/p>\n<h3>terragrunt.hcl<\/h3>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nterraform {\r\n  extra_arguments &quot;custom_vars&quot; {\r\n    commands = get_terraform_commands_that_need_vars()\r\n    arguments = [\r\n      &quot;-var-file=${get_terragrunt_dir()}\/common.tfvars&quot;,\r\n    ]\r\n  }\r\n}\r\n\r\nremote_state {\r\n  backend = &quot;s3&quot;\r\n  config = {\r\n    bucket         = &quot;tfstate.eu-west-2.artem&quot;\r\n    key            = &quot;${path_relative_to_include()}\/terraform.tfstate&quot;\r\n    region         = &quot;eu-west-2&quot;\r\n    encrypt        = true\r\n    dynamodb_table = &quot;my-lock-table&quot;\r\n  }\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0438\u043c\u044f <strong>S3<\/strong> \u043a\u043e\u0440\u0437\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <strong>Terragrunt<\/strong>&#39;\u0430, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, <strong>Terragrunt<\/strong> \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0435\u0435 \u0441\u0430\u043c. \u0422\u0430\u043a \u0436\u0435 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0440\u0435\u0433\u0438\u043e\u043d.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <strong>Terraform<\/strong>&#39;\u0430 \u0438 <strong>Terragrunt<\/strong>&#39;\u0430:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ntouch common.tfvars variables.tf\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c <strong>VPC<\/strong> \u0438 <strong>Internet Gateway<\/strong> \u0434\u043b\u044f \u043d\u0435\u0433\u043e.<\/p>\n<p>&nbsp;<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 \u0434\u043b\u044f <strong>VPC<\/strong> \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nmkdir -p modules\/vpc\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041c\u043e\u0434\u0443\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u043d\u0438\u043c \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0440\u044f\u0434 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <strong>VPC<\/strong> \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\u0418\u043c\u044f VPC<\/li>\n<li>CIDR<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 &quot;<strong>modules\/vpc\/variables.tf<\/strong>&quot; \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0443\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nvariable &quot;vpc_name&quot; {}\r\nvariable &quot;vpc_cidr&quot; {}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0430\u043c \u043c\u043e\u0434\u0443\u043b\u044c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b &quot;<strong>modules\/vpc\/main.tf<\/strong>&quot; \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n#################### CREATE VPC ####################\r\n\r\nresource &quot;aws_vpc&quot; &quot;vpc&quot; {\r\n  cidr_block = var.vpc_cidr\r\n  enable_dns_hostnames = &quot;true&quot;\r\n  enable_dns_support = &quot;true&quot;\r\n\r\n  tags = {\r\n    Name = var.vpc_name\r\n  }\r\n}\r\n \r\n############# CREATE INTERNET GATEWAY ##############\r\n\r\nresource &quot;aws_internet_gateway&quot; &quot;igw&quot; {\r\n  vpc_id = aws_vpc.vpc.id\r\n \r\n  tags = {\r\n    Name = &quot;${var.vpc_name}-IGW&quot;\r\n  }\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u0442\u0440\u0435\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439:<\/p>\n<ul>\n<li>development<\/li>\n<li>staging<\/li>\n<li>production<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f <strong>Terragrunt<\/strong>&#39;\u0430:<\/p>\n<h3>common.tfvars<\/h3>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n### DEVELOPMENT ENVIRONMENT ####\r\n\r\ndevelopment_aws_region = &quot;us-east-1&quot;\r\ndevelopment_vpc_name = &quot;ARTEM-DEVELOPMENT-USE1&quot;\r\ndevelopment_vpc_cidr = &quot;192.168.0.0\/16&quot;\r\n\r\n######### END OF BLOCK #########\r\n\r\n##### STAGING ENVIRONMENT ######\r\n\r\nstaging_aws_region = &quot;us-east-1&quot;\r\nstaging_vpc_name = &quot;ARTEM-STAGING-USE1&quot;\r\nstaging_vpc_cidr = &quot;192.168.0.0\/16&quot;\r\n\r\n######### END OF BLOCK #########\r\n\r\n#### PRODUCTION ENVIRONMENT ####\r\n\r\nproduction_aws_region = &quot;eu-central-1&quot;\r\nproduction_vpc_name = &quot;ARTEM-PRODUCTION-EUC1&quot;\r\nproduction_vpc_cidr = &quot;192.168.0.0\/16&quot;\r\n\r\n######### END OF BLOCK #########\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <strong>Terraform<\/strong>&#39;\u0430:<\/p>\n<h3>variables.tf<\/h3>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n### DEVELOPMENT ENVIRONMENT ####\r\n\r\nvariable &quot;development_aws_region&quot; {}\r\nvariable &quot;development_vpc_name&quot; {}\r\nvariable &quot;development_vpc_cidr&quot; {}\r\n\r\n######### END OF BLOCK #########\r\n\r\n##### STAGING ENVIRONMENT ######\r\n\r\nvariable &quot;staging_aws_region&quot; {}\r\nvariable &quot;staging_vpc_name&quot; {}\r\nvariable &quot;staging_vpc_cidr&quot; {}\r\n\r\n######### END OF BLOCK #########\r\n\r\n#### PRODUCTION ENVIRONMENT ####\r\n\r\nvariable &quot;production_aws_region&quot; {}\r\nvariable &quot;production_vpc_name&quot; {}\r\nvariable &quot;production_vpc_cidr&quot; {}\r\n\r\n######### END OF BLOCK #########\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 <strong>development<\/strong> \u0441\u0440\u0435\u0434\u044b<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nmkdir -p environments\/development\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd environments\/development\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b &quot;<strong>terragrunt.hcl<\/strong>&quot; \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ninclude {\r\n  path = find_in_parent_folders()\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0418 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u043a\u043e\u0440\u043d\u0435:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nln -s ..\/..\/variables.tf variables.tf\r\nln -s ..\/..\/common.tfvars common.tfvars\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b &quot;<strong>main.tf<\/strong>&quot; \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nterraform {\r\n  backend &quot;s3&quot; {}\r\n}\r\n\r\nprovider &quot;aws&quot; {\r\n  region  = var.development_aws_region\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0412\u0441\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b <strong>Terraform<\/strong>&#39;\u0430 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <strong>VPC<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<h3>vpc.tf<\/h3>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nmodule &quot;vpc&quot; {\r\n  source        = &quot;..\/..\/modules\/vpc&quot;\r\n  vpc_name      = var.development_vpc_name\r\n  vpc_cidr      = var.development_vpc_cidr\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nterragrunt init\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 <strong>Terragrunt<\/strong> \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0440\u0437\u0438\u043d\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0435, \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u0435\u043c\u0441\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 <strong>init<\/strong>&#39;\u0430, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0435\u0440\u0441\u0438\u044e <strong>Terraform<\/strong>&#39;\u0430 \u0438 <strong>AWS<\/strong> \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430, \u043b\u0443\u0447\u0448\u0435 \u044d\u0442\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 &quot;<strong>main.tf<\/strong>&quot;, \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u043a \u0441 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 (\u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043e\u0440\u0437\u0438\u043d\u0443 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0442\u043e \u043c\u044b \u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f)<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nterraform --version\r\nTerraform v0.12.9\r\n+ provider.aws v2.30.0\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3>main.tf<\/h3>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nterraform {\r\n  backend &quot;s3&quot; {}\r\n  required_version = &quot;~&gt; 0.12.9&quot;\r\n}\r\n\r\nprovider &quot;aws&quot; {\r\n  region  = var.development_aws_region\r\n  version = &quot;~&gt; 2.30&quot;\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e \u043e\u0431\u0440\u0430\u0437\u0443 <strong>development<\/strong> \u0441\u0440\u0435\u0434\u044b, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <strong>staging<\/strong> \u0438 <strong>production<\/strong>. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e &quot;<strong>.terraform<\/strong>&quot; \u0432 &quot;<strong>envarinments\/development<\/strong>&quot; \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c <strong>development<\/strong> \u0441\u0440\u0435\u0434\u0443:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nrm -rf environments\/development\/.terraform\/\r\ncp -aR environments\/development environments\/staging\r\ncp -aR environments\/development environments\/production\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f <strong>staging<\/strong>&#39;\u0430:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsed -i 's\/development\/staging\/g' environments\/staging\/{main.tf,vpc.tf}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f <strong>production<\/strong>&#39;\u0430:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsed -i 's\/development\/production\/g' environments\/production\/{main.tf,vpc.tf}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u043a\u0443 \u0434\u043b\u044f \u0432\u0441\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nterragrunt plan-all\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u0439\u043c\u043f\u043b\u0435\u0439\u0442 \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nterragrunt apply\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0418\u043b\u0438 \u0436\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0440\u0430\u0437\u0443, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nterragrunt apply-all\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0430\u0448\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n.\r\n\u251c\u2500\u2500 common.tfvars\r\n\u251c\u2500\u2500 environments\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 development\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 common.tfvars -&gt; ..\/..\/common.tfvars\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 main.tf\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 terragrunt.hcl\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 variables.tf -&gt; ..\/..\/variables.tf\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 vpc.tf\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 production\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 common.tfvars -&gt; ..\/..\/common.tfvars\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 main.tf\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 terragrunt.hcl\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 variables.tf -&gt; ..\/..\/variables.tf\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 vpc.tf\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 staging\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 common.tfvars -&gt; ..\/..\/common.tfvars\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 main.tf\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 terragrunt.hcl\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 variables.tf -&gt; ..\/..\/variables.tf\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 vpc.tf\r\n\u251c\u2500\u2500 modules\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 vpc\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 main.tf\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 variables.tf\r\n\u251c\u2500\u2500 terragrunt.hcl\r\n\u2514\u2500\u2500 variables.tf\r\n\r\n6 directories, 20 files\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0448 \u0448\u0430\u0431\u043b\u043e\u043d \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0432 \u0444\u0430\u0439\u043b &quot;<strong>.gitignore<\/strong>&quot; \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n.terraform\/\r\nterraform.*\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <strong>Git<\/strong> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c:<\/p>\n<pre>https:\/\/bitbucket.org\/artem-gatchenko\/example-terraform-module-part1<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Terraform \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 AWS, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f 3-\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Terragrunt&#39;a. &nbsp; \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f: \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 AWS CLI \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Terraform (\u0432\u0435\u0440\u0441\u0438\u044f \u0432\u044b\u0448\u0435 12.0) \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Terragrunt &nbsp;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13],"tags":[25,1139,14,1137],"_links":{"self":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/1421"}],"collection":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1421"}],"version-history":[{"count":10,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/1421\/revisions"}],"predecessor-version":[{"id":1611,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/1421\/revisions\/1611"}],"wp:attachment":[{"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}