使用 Terraform 从 git 存储库加载单个文件

Hep*_*tus 5 terraform terraform-provider-aws aws-parameter-store

我们想要从 git 存储库加载文件并将其放入参数存储中。该文件包含针对多个组织帐户中的每个帐户自定义的配置数据,这些组织帐户是使用 Terraform 构建的,并且在其他方​​面是相同的。数据将存储在AWS SM Parameter Store中。例如将字符串存储为参数的 Terraform 代码是:

resource "aws_ssm_parameter" "parameter_config" {
  name  = "config_object"
  type  = "String"
  value = "long json string with configuration data"
}
Run Code Online (Sandbox Code Playgroud)

我知道 Terraform 有一个file()操作员(参考),并且我知道 TF 可以从远程 git 存储库加载文件,但我不确定是否可以将所有这些整合在一起。

Hig*_*ife 5

有几种方法可以做到这一点。

github第一种是将提供程序与数据源一起使用github_repository_file

terraform {
  required_providers {
    github = {
      source = "integrations/github"
      version = "5.12.0"
    }
  }
}

provider "github" {
  token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  owner = "org-name"
}

data "github_repository_file" "config" {
  repository          = "my-repo"
  branch              = "master"
  file                = "config-file"
}

resource "aws_ssm_parameter" "parameter_config" {
  name  = "config_object"
  type  = "String"
  value = data.github_repository_file.config.content
}
Run Code Online (Sandbox Code Playgroud)

您也可以与http提供商一起执行此操作:

data "http" "config" {
  url = "https://raw.githubusercontent.com/my-org/my-repo/master/config-file"
}

resource "aws_ssm_parameter" "parameter_config" {
  name  = "config_object"
  type  = "String"
  value = data.http.config.response_body
}
Run Code Online (Sandbox Code Playgroud)

请记住,使用http数据源方法时您可能会得到多行字符串分隔符。(例如<<EOT ... EOT:)