为什么terragrunt破坏以前创建的资源

时间:2018-04-21 23:28:46

标签: terraform terragrunt

我按照以下方式组织了我们的terraform代码:

/**
 * @param \PhpOffice\PhpWord\Element\AbstractContainer $container
 *        E.g. a section or table cell.
 * @param string $text String with literal line breaks as CR-LF, LF or CR.
 * @param string|array|\PhpOffice\PhpWord\Style\Paragraph $paragraphStyle
 * @param string|array|\PhpOffice\PhpWord\Style\Font $fontStyle
 *
 * @return \PhpOffice\PhpWord\Element\TextRun
 */
function addTextWithLineBreaks(
  \PhpOffice\PhpWord\Element\AbstractContainer $container,
  $text,
  $fontStyle,
  $paragraphStyle
) {
  $textRun = $container->addTextRun($paragraphStyle);
  foreach (preg_split('/(\\r\\n?+|\\n)/',
    $text,
    -1,
    PREG_SPLIT_DELIM_CAPTURE
  ) as $i => $part) {
    if ($i & 1) {
      $textRun->addTextBreak(1, $fontStyle, $paragraphStyle);
    } else {
      $textRun->addText($part, $fontStyle, $paragraphStyle);
    }
  }
  return $textRun;
}

在每个组件目录下,我将定义共享模块的属性

     $ tree infrastructure
    infrastructure
    ├── ecr
    │   └── terraform.tfvars
    ├── ecs
    │   ├── ecs-iam.json
    │   └── terraform.tfvars
    └── terraform.tfvars

    2 directories, 4 files
    $cat infrastructure/terraform.tfvars 
    terragrunt = {
     remote_state {
    backend = "s3"
    config {
      bucket     = "terraform-dev-state-west2"
      key        = "dev/terraform.tfstate"
      region     = "us-west-2"
      encrypt    = true
    }
  }
}

我可以去ecr或ecs这样的个人目录,运行" terragrunt init; terragrunt apply"没有问题。它将创建AWS ECR或AWS ECS集群。但是当我在ECR目录中运行terragrunt时,它将破坏以前创建的ECS集群。如果我首先创建ECR资源,然后cd ecs运行terragrunt,它将破坏ECR资源。即使我将ECR依赖项放在ECS terraform.tfvars文件中,它也有相同的结果。 我认为这是因为terragrunt并未包含来自" infrastructure"下的所有子文件夹的资源定义。如果是这种情况,是否有可能以这种方式构建terraform目录?

1 个答案:

答案 0 :(得分:0)

是的,我可以将基础架构组件分成不同的文件夹。但是,您必须保持每个组件的不同密钥,以便不同的组件之间不共享状态。这是我的改变。

$cat infrastructure/terraform.tfvars 
    terragrunt = {
     remote_state {
    backend = "s3"
    config {
      bucket     = "terraform-dev-state-west2"
      key        = "${path_relative_to_include()}/terraform.tfstate"
      region     = "us-west-2"
      encrypt    = true
    }
  }
}

在此更改后,我可以在子文件夹下运行terragrunt而不会相互影响。