我按照以下方式组织了我们的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目录?
答案 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而不会相互影响。