如何在 terraform 中获取 k8s 作业的输出

问题描述

我在 terraform 中使用 kubernetes 提供程序,并在 AWS 上的 EKS 集群上运行 kubernetes 作业。 我想从作业中获取一些输出并将它们存储在我的 terraform 变量(或 AWS 参数存储)中,以便我可以在其他地方的 terraform 文件中使用它们。
我不知道该怎么做。
作业能否将此信息写入文件并将其放回收到的配置映射中?或者 terraform 有没有办法解析 k8s 作业的日志(标准输出)?

这里或多或少是我的 terraform 文件

resource "kubernetes_job" "my_job" {

  Metadata {
    name = "my_job"
    namespace = var.namespace
  }
  spec {
    template {
      Metadata {}
      spec {
       volume {
                name = local.config_name
                config_map {
                            name = kubernetes_config_map.my_job.Metadata[0].name
                            default_mode = "0777"
                           }
                }
             container {
                    name        = "my_container"
                    image       = "123456789012.dkr.ecr.us-east-1.amazonaws.com/my_container:6.4.1.37"
                    command     = ["/bin/bash","/opt/utilities/run_pre_db_script.sh"]
                    working_dir = "/opt/utilities"
                    volume_mount {

                                name =  local.config_name
                                mount_path = "/opt/my_container_mount"
                              }
             }
        restart_policy = "Never"
      }
    }
  }
  timeouts {
    create="5m"
  }
  wait_for_completion = true
}

解决方法

Terraform 无法解析作业生成的日志,更改 configmap 值是不明智的,因为它会在您的配置和生产状态之间产生差异。

我能想到的最佳解决方案是让作业生成动态生成的 tarraform 文件/terraform 参数文件,将它们提交到存储其余 terraform 文件的商店(例如 git 存储库) .

完成后,您可以让下一次 terraform 调用检索作业的结果并将其合并到下一次执行中。