Terraform 地形及;AWS代码管道-动态定义阶段上的操作

Terraform 地形及;AWS代码管道-动态定义阶段上的操作,terraform,aws-codepipeline,Terraform,Aws Codepipeline,我不确定这是否可行,但我想我应该先问一下 我有一个terraform中定义的codepippeline,有一个具有多个动作的阶段 Stage正在从CodeCommit中提取代码,每个操作都定义了我希望在管道中使用的存储库 我想创建一个包含CodeCommit存储库名称列表的变量,然后为该列表中的每个存储库动态创建一个操作 使用terraform,这可能吗?我知道您可以使用count正常地实现这一点,但我认为这只是在资源级别上 代码片段如下所示: resource "aws_codepipelin

我不确定这是否可行,但我想我应该先问一下

我有一个
terraform
中定义的
codepippeline
,有一个具有多个动作的
阶段

Stage
正在从
CodeCommit
中提取代码,每个操作都定义了我希望在
管道中使用的存储库

我想创建一个包含
CodeCommit
存储库名称列表的变量,然后为该列表中的每个存储库动态创建一个操作

使用
terraform
,这可能吗?我知道您可以使用
count
正常地实现这一点,但我认为这只是在资源级别上

代码片段如下所示:

resource "aws_codepipeline" "Test" {
  name     = "Test"
  role_arn = "${aws_iam_role.Test.arn}"

  "artifact_store" {
    location = "${aws_s3_bucket.Test.bucket}"
    type     = "S3"
  }

  "stage" {
    name = "Source"

    ####LOOP OVER EACH ITEM IN LIST###
    "action" {
        ...
    }
  }

  stage {
    name = "Build"

    ...

    }
  }
}
谢谢你的帮助

编辑:

正在获取一个错误,将其作为空资源的触发器。我也尝试了一些不同的变化:

resource "null_resource" "CodePipeline" {
  count = "${length(var.repositories)}"

  triggers {
    action = {
      category         = "Source"
      name             = "Repository-${element(keys(var.repositories), count.index)}"
      owner            = "AWS"
      provider         = "CodeCommit"
      version          = "1"
      output_artifacts = ["Repository-${element(keys(var.repositories), count.index)}"]

      configuration {
        RepositoryName = "${element(keys(var.repositories), count.index)}"
        BranchName     = "${lookup(var.repositories, element(keys(var.repositories) ,count.index))}"
      }
    }
  }
}

您可以为此使用null_资源,并在阶段中传递操作列表。像这样

resource "null_resource" "actions" {
    count = length(<repo_list_var>)
    triggers {
       #### ACTION ITEMS ###
       ...........
    }
}

resource "aws_codepipeline" "Test" {
    name     = "Test"
    role_arn = "${aws_iam_role.Test.arn}"

    "artifact_store" {
        location = "${aws_s3_bucket.Test.bucket}"
        type     = "S3"
    }

    "stage" {
       name = "Source"
       action = null_resource.actions.*.triggers
    }

    stage {
        name = "Build"

        ...

    }
}
resource“null\u资源”操作{
计数=长度()
触发{
####行动项目###
...........
}
}
资源“aws_代码管道”测试{
name=“测试”
role_arn=“${aws_iam_role.Test.arn}”
“工件库”{
location=“${aws\u s3\u bucket.Test.bucket}”
type=“S3”
}
“舞台”{
name=“来源”
action=null\u resource.actions.*.triggers
}
舞台{
name=“构建”
...
}
}

谢谢您的回复。我正在努力学习
#########
的语法。你有一个例子来说明这应该是什么吗?我想我遇到了一个问题,因为我的操作需要一个
配置
映射,因此在尝试运行
触发器(配置)时出现了这个错误:''预期类型'string',获得不可转换类型'[]映射[string]接口{}'
你能分享吗,你在为###########行动项目##添加什么?当然,用它编辑了原始帖子。谢谢你的帮助!