Nomad 변수 생성 및 업데이트

Nomad 변수 생성 및 업데이트 (Create and update Nomad variables)

이 페이지는 Nomad 변수와 상호작용하는 프로세스를 설명해요. nomad var 명령 레퍼런스 또는 Vars HTTP API를 사용해 Nomad 변수를 관리하세요.

출처: 문서

본문

배경 (Background)

Nomad 변수는 파일과 유사한 경로에 구성을 Nomad의 상태 저장소에 직접 안전하게 저장하는 옵션을 제공해요. Nomad 변수 기능과 관련 개념에 대한 완전한 문서는 다음을 참고하세요:

Nomad는 Nomad 변수를 네임스페이스로 범위를 지정하고 ACL 정책에 따라 Nomad 변수에 대한 접근을 허용해요.

Nomad 변수 스펙 생성 (Generate a Nomad variable specification)

nomad var init 명령을 사용해 사용자 정의할 수 있는 Nomad 변수 스펙을 생성하세요.

현재 디렉터리에 예시 변수 스펙을 생성하세요.

$ nomad var init
Example variable specification written to spec.nv.hcl

Nomad 변수 추가 및 업데이트 (Add and update Nomad variables)

nomad var put 명령을 사용해 Nomad 변수를 생성·업데이트하세요. Nomad 변수 스펙 파일, 키-값 쌍 묶음, 또는 둘 다를 포함해 변수 항목을 제공해요. 키와 값의 형식 지정에 대한 세부 사항은 nomad var put 명령 레퍼런스를 참고하세요. 커맨드 라인 인자로 제공하는 값은 명령에 파이프되거나 파일에서 로드된 변수 스펙의 어떤 값보다 우선해요.

또한 nomad var put 명령을 사용해 변수의 모든 항목을 덮어쓸 수 있어요. 마지막으로 변수를 읽은 이후 발생했을 수 있는 다른 쓰기와 충돌을 피하려면 -check-index 플래그를 사용하고 그것을 마지막 수정 인덱스로 설정해야 해요.

이 예시는 Nomad 변수 passcode=my-long-passcode와 user=me를 경로 secret/foo에 써요. 변수는 prod 네임스페이스로 범위가 지정돼요.

$ nomad var put -namespace prod secret/foo passcode=my-long-passcode user=me

이 예시는 "@" 기호로 접두사가 붙은 Nomad 변수 스펙 파일을 사용해요.

$ nomad var put -namespace prod secret/foo @spec.nv.json

하이픈(-)을 사용해 표준 입력에서 변수 값을 읽도록 명령에 지시할 수 있어요. -out 옵션은 명령의 출력을 표시해요.

$ echo "abcd1234" | nomad var put -namespace prod -out secret/foo bar=-
Namespace   = prod
Path        = secret/foo
Create Time = 2025-11-19T11:21:56-04:00
Check Index = 28

Items
bar = abcd1234

이 예시는 secret/foo 경로의 bar 값을 업데이트하고 업데이트된 변수를 JSON 형식으로 출력해요. Nomad 변수를 업데이트할 때는 check-index 값을 포함해야 해요.

$ nomad var put -namespace prod -out json -check-index 28 secret/foo bar=efgh5678

출력은 다음 스니펫과 유사해요.

{
  "Namespace": "prod",
  "Path": "secret/foo",
  "CreateIndex": 28,
  "ModifyIndex": 39,
  "CreateTime": 1663600883130070567,
  "ModifyTime": 1663601343585644939,
  "Items": {
    "bar": "efgh5678",
  }
}

Nomad 변수 삭제 (Delete Nomad variables)

nomad var purge 명령을 사용해 기존 변수를 영구 삭제하세요.

secret/foo 경로의 모든 변수를 삭제하세요.

$ nomad var purge secret/foo

Nomad 변수 조회 (Query Nomad variables)

Get

nomad var get 명령을 사용해 기존 변수의 내용을 가져오세요.

이 예시는 경로 secret/foo에 저장된 변수를 검색해요.

$ nomad var get secret/foo
Namespace   = default
Path        = secret/foo
Create Time = 2025-11-23T11:14:37-04:00
Check Index = 116

Items
passcode = my-long-passcode

secret/foo에 저장된 변수에서 passcode 항목만 반환하세요.

$ nomad var get -item=passcode secret/foo
my-long-passcode

List

nomad var list 명령을 사용해 접근 가능한 변수 경로 목록을 가져오세요.

prod 네임스페이스의 변수를 나열하세요.

$ nomad var list -namespace prod
Namespace  Path                     Last Updated
prod       project/another-example  2025-09-19T11:21:56-04:00
prod       project/example          2025-09-19T11:29:03-04:00

접두사 필터 project/ex와 일치하는 prod 네임스페이스의 변수를 나열하세요.

$ nomad var list -namespace prod project/ex
Namespace  Path             Last Updated
prod       project/example  2025-09-19T11:29:03-04:00

와일드카드 네임스페이스 표시(*)를 사용해 접근할 수 있는 모든 변수를 나열하세요. 많은 셸에서 * 문자는 의미가 있으므로 큰 따옴표(") 또는 작은 따옴표(')로 감싸야 할 수 있어요.

$ nomad var list -namespace '*'
Namespace  Path                     Last Updated
dev        another-project/example  2022-09-19T11:29:54-04:00
dev        project/example          2022-09-19T11:29:54-04:00
dev        system/config            2022-09-19T11:29:54-04:00
prod       project/another-example  2022-09-19T11:21:56-04:00
prod       project/example          2022-09-19T11:29:03-04:00

nomad/jobs 키 아래의 값을 나열하세요.

$ nomad var list nomad/jobs
Namespace  Path                           Last Updated
default    nomad/jobs/example             2022-08-23T10:35:47-04:00
default    nomad/jobs/variable            2022-08-23T10:24:45-04:00
default    nomad/jobs/variable/www        2022-08-23T10:24:45-04:00
default    nomad/jobs/variable/www/nginx  2022-08-23T10:24:46-04:00

nomad/jobs/variable/www 키 아래의 값을 JSON 형식으로 나열하세요.

$ nomad var list -out=json -namespace="*" nomad/jobs/variable/www
[
  {
    "Namespace": "default",
    "Path": "nomad/jobs/variable/www",
    "CreateIndex": 1457,
    "ModifyIndex": 1457,
    "CreateTime": 1662061225600373000,
    "ModifyTime": 1662061225600373000
  },
  {
    "Namespace": "default",
    "Path": "nomad/jobs/variable/www/nginx",
    "CreateIndex": 800,
    "ModifyIndex": 1000,
    "CreateTime": 1662061717905426000,
    "ModifyTime": 1662062162982630000
  }
]

페이지네이션 쿼리를 수행하세요.

$ nomad var list -per-page=3
Namespace  Path                           Last Updated
default    nomad/jobs/example             2022-08-23T10:35:47-04:00
default    nomad/jobs/variable            2022-08-23T10:24:45-04:00
default    nomad/jobs/variable/www        2022-08-23T10:24:45-04:00
Next page token: default.nomad/jobs/variable/www/nginx

다음 페이지를 가져오려면 다음 페이지 토큰을 포함하세요.

$ nomad var list -per-page=3 \
  -page-token=default.nomad/jobs/variable/www/nginx
Namespace  Path                 Last Updated
default    nomad/jobs/variable/www/nginx  2022-08-23T10:24:46-04:00

JSON 형식의 페이지네이션 쿼리를 수행하세요.

$ nomad var list -out=json -namespace="*" -per-page=1 nomad/jobs/variable/www
{
    "Data": [
        {
           "Namespace": "default",
            "Path": "nomad/jobs/variable/www",
            "CreateIndex": 1457,
            "ModifyIndex": 1457,
            "CreateTime": 1662061225600373000,
            "ModifyTime": 1662061225600373000
        }
    ],
    "QueryMeta": {
        "KnownLeader": true,
        "LastContact": 0,
        "LastIndex": 43,
        "NextToken": "default.nomad/jobs/variable/www/nginx",
        "RequestTime": 875792
    }
}

표 형식 버전과 마찬가지로 QueryMeta.NextToken 값을 -page-token 값으로 제공해 다음 페이지를 가져오세요.

Nomad 변수에 접근 잠금 (Lock access to a Nomad variable)

nomad var lock 명령은 분산 잠금 메커니즘을 제공해요. Nomad는 주어진 변수에 잠금을 만들고, 잠금이 보유된 경우에만 지정된 자식 프로세스를 호출해요.

경로 secret/foo의 변수를 15초 동안 잠그세요. 잠금이 성공하면 nomad job run webapp.nomad.hcl을 실행하세요.

$ nomad var lock -ttl=15s secret/foo "nomad job run webapp.nomad.hcl"

"@" 기호로 접두사가 붙은 파일을 전달할 수도 있어요. 이 예시는 spec.nv.json 파일의 변수를 저장하고 잠가요. 잠금이 성공하면 nomad job run webapp.nomad.hcl을 실행하세요.

$ nomad var lock secret/foo @spec.nv.json `nomad job run webapp.nomad.hcl`

다음 단계 (Next steps)

심도 있는 학습을 위해 다음 Nomad 변수 튜토리얼을 참고하세요:

잡 스펙에서 Nomad 변수에 접근하는 방법을 배우려면 Use Nomad variables in tasks를 참고하세요.

더 알아보기 (Learn more)