작업 태스크 구성하기

작업 태스크 구성하기 (Configure job tasks)

대부분의 애플리케이션은 어떤 종류의 로컬 구성이 필요해요. 명령줄 인자가 가장 간단한 방법이지만, 많은 애플리케이션은 환경 변수나 구성 파일로 제공되는 더 복잡한 구성이 필요해요. 이 섹션은 많은 일반적인 구성 사용 사례를 지원하도록 노마드 작업을 구성하는 방법을 탐구해요.

출처: 문서

본문

애플리케이션 인자 정의

많은 작업은 명령줄 인자로 구성을 수용해요. 예를 들어 제공된 텍스트를 웹페이지로 렌더링하는 작은 go 바이너리인 http-echo 서버를 생각해 봐요. 이 바이너리는 두 개의 파라미터를 수용해요:

  • -listen 플래그는 수신할 address:port를 포함해요.
  • -text — HTML 페이지로 렌더링할 텍스트.

노마드 밖에서는 서버가 이렇게 시작돼요:

$ http-echo -listen=":5678" -text="hello world"

노마드와 동등한 job file은 대략 이렇게 생겼어요:

job "docs" {
  datacenters = ["dc1"]

  group "example" {
    network {
      port "http" {
        static = "5678"
      }
    }

    task "server" {
      driver = "exec"

      config {
        command = "/bin/http-echo"

        args = [
          "-listen",
          ":5678",
          "-text",
          "hello world",
        ]
      }
    }
  }
}

참고: 이 작업 명세의 경우 각 클라이언트의 /bin 폴더에 http-echo를 설치해야 해요. 노마드는 artifact 리소스를 사용해 선택적으로 바이너리를 가져올 수도 있어요.

노마드에는 많은 드라이버가 있으며 대부분은 args 파라미터로 작업에 인자를 전달하는 것을 지원해요. 이 파라미터는 노마드 변수 보간(interpolation)도 지원해요. 예를 들어 이전 작업처럼 정적 포트에 의존하는 대신 노마드가 서비스를 바인딩할 동적 높은 포트를 할당하도록 하려면:

job "docs" {
  datacenters = ["dc1"]

  group "example" {
    network {
      port "http" {
        static = "5678"
      }
    }

    task "server" {
      driver = "exec"

      config {
        command = "/bin/http-echo"

        args = [
          "-listen",
          ":${NOMAD_PORT_http}",
          "-text",
          "hello world",
        ]
      }
    }
  }
}

환경 변수 설정

일부 애플리케이션은 환경 변수로 구성할 수 있어요. Twelve-Factor App 문서는 환경 변수를 통해 애플리케이션을 구성할 것을 권장해요. 노마드는 두 가지 방법으로 사용자 정의 환경 변수를 지원해요:

  • env 스탠자에서의 보간
  • template 스탠자에서의 템플릿화

env 스탠자

각 작업은 환경 변수를 지정하는 env 스탠자를 가질 수 있어요:

task "server" {
  env {
    my_key = "my-value"
  }
}

env 스탠자는 보간도 지원해요:

task "server" {
  env {
    LISTEN_PORT = "${NOMAD_PORT_http}"
  }
}

자세한 내용은 env 스탠자 문서를 참고해 주세요.

템플릿으로 환경 변수 만들기

노마드의 template 스탠자를 사용해 환경 변수를 생성할 수 있어요. 환경 변수는 노드 속성과 메타데이터, 디스크의 파일 내용, Consul 키, 또는 Vault의 시크릿으로 템플릿화할 수 있어요:

template {
  data = <<EOH
LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}"
API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.key}}{{end}}"
CERT={{ file "path/to/cert.pem" | to JSON }}
NODE_ID="{{ env "node.unique.id" }}"
EOH

  destination = "secrets/config.env"
  env         = true
}

템플릿은 디스크에 기록된 뒤 작업이 시작되기 전에 환경 변수로 읽혀요.

외부 구성 파일 로드

많은 애플리케이션은 구성에 파일을 사용해요. 노마드는 artifact 스탠자로 파일을 다운로드하고 작업을 시작하기 전에 템플릿화하는 것을 지원해요. 이를 통해 작업이 제대로 실행하는 데 필요한 구성 파일과 다른 자산을 제공할 수 있어요.

구성 파일을 artifact로 가져와 템플릿화하는 예시 작업은 다음과 같아요:

job "docs" {
  datacenters = ["dc1"]

  group "example" {
    task "server" {
      driver = "exec"

      artifact {
        source      = "http://example.com/config.hcl.tmpl"
        destination = "local/config.hcl.tmpl"
      }

      template {
        source      = "local/config.hcl.tmpl"
        destination = "local/config.hcl"
      }

      config {
        command = "my-app"
        args = [
          "-config", "local/config.hcl",
        ]
      }
    }
  }
}

artifact 리소스에 대한 자세한 내용은 artifact 스탠자 문서를 참고해 주세요.

더 알아보기 (Learn more)