

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 대기열 환경에서 환경 변수 설정
<a name="set-environment-variables"></a>

많은 애플리케이션 및 프레임워크는 환경 변수를 사용하여 기능 설정, 로깅 수준 및 표시 구성을 제어합니다. [Open Job Description(OpenJD) 환경을](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment) 사용하여 범위 내의 모든 태스크 명령이 상속하는 환경 변수를 설정할 수 있습니다.

## 환경 변수 범위
<a name="set-env-vars-scope"></a>

AWS Deadline Cloud는 대기열에 연결하는 대기열 환경의 환경 변수를 적용합니다. 작업 템플릿 내에서 [OpenJD ](https://github.com/OpenJobDescription/openjd-specifications/wiki/2023-09-Template-Schemas#4-environment)환경을 사용하여 작업 및 단계 수준에서 환경 변수를 정의할 수도 있습니다. 더 좁은 범위에서 정의된 변수는 더 넓은 범위에서 동일한 이름의 변수를 재정의합니다.
+ **대기열 환경** - Deadline Cloud의 대기열에 연결하는 템플릿입니다. 변수는 대기열에 제출된 모든 작업에 적용됩니다. 고정 값에 대한 `variables` 맵으로 변수를 설정하거나 동적 값에 스크립트를 사용할 수 있습니다.
+ **작업 환경** - 작업 템플릿의 `jobEnvironments`에 정의되어 있습니다. 변수는 작업의 모든 단계와 작업에 적용됩니다. 작업 수준 변수는 동일한 이름의 대기열 수준 변수를 재정의합니다.
+ **단계 환경** - 작업 템플릿의 `stepEnvironments`에 정의되어 있습니다. 변수는 해당 단계의 태스크에만 적용됩니다. 단계 수준 변수는 동일한 이름의 작업 수준 또는 대기열 수준 변수를 재정의합니다.

## 대기열 환경에서 변수 설정
<a name="set-env-vars-queue-env"></a>

고정 값에 대한 `variables` 맵을 사용하거나 동적 값에 대한 `onEnter` 작업과 `script` 함께를 사용하여 대기열 환경에서 환경 변수를 설정할 수 있습니다.

다음 대기열 환경 템플릿은 `variables` 맵을 사용하여 `QT_QPA_PLATFORM` 변수를 로 설정`offscreen`하므로 [Qt 프레임워크](https://www.qt.io/product/framework)를 사용하는 애플리케이션이 대화형 디스플레이 없이 작업자 호스트에서 실행될 수 있습니다.

```
specificationVersion: 'environment-2023-09'
environment:
  name: QtOffscreen
  variables:
    QT_QPA_PLATFORM: offscreen
```

가상 환경 수정 `PATH` 또는 활성화와 같은 동적 값의 경우 형식으로 줄을 인쇄하여 stdout하는 스크립트`openjd_env: {{VAR}}={{value}}`를 사용합니다. `openjd_env:` 접두사가 필요합니다. 접두사 없이 `export`, 또는 기타 `echo`쉘 메커니즘을 사용하면 변수가 작업 및 작업에 전파되지 않습니다.

다음 대기열 환경 템플릿은 스크립트를 사용하여 `QT_QPA_PLATFORM` 변수를 설정합니다.

```
specificationVersion: 'environment-2023-09'
environment:
  name: QtOffscreen
  script:
    actions:
      onEnter:
        command: bash
        args:
        - "{{Env.File.Enter}}"
    embeddedFiles:
    - name: Enter
      type: TEXT
      data: |
        #!/bin/env bash
        set -euo pipefail
        echo "openjd_env: QT_QPA_PLATFORM=offscreen"
```

대기열 환경을 대기열에 연결하려면 Deadline Cloud 콘솔 또는를 사용합니다 AWS CLI. 자세한 내용은 AWS Deadline Cloud 사용 설명서의 [대기열 환경 생성을](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/create-queue-environment.html) 참조하세요. 다음 AWS CLI 명령은 템플릿 파일에서 대기열 환경을 생성합니다.

```
aws deadline create-queue-environment \
    --farm-id {{FARM_ID}} \
    --queue-id {{QUEUE_ID}} \
    --priority 1 \
    --template-type YAML \
    --template file://{{my-queue-env.yaml}}
```

conda 가상 환경 생성 및 활성화와 같은 보다 복잡한 예는 GitHub의 [Deadline Cloud 대기열 환경 샘플을](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/queue_environments) 참조하세요.

## 작업 템플릿에서 변수 설정
<a name="set-env-vars-job-template"></a>

작업 템플릿에서 `jobEnvironments` 또는 `stepEnvironments` 항목에 `variables` 맵을 추가합니다. 각 항목은 키-값 페어입니다. 여기서 키는 변수 이름이고 값은 변수 값입니다.

다음 작업 템플릿은 `QT_QPA_PLATFORM` 환경 변수를 로 설정`offscreen`하여 [Qt Framework](https://www.qt.io/product/framework)를 사용하는 애플리케이션이 대화형 디스플레이 없이 작업자 호스트에서 실행되도록 합니다.

```
specificationVersion: 'jobtemplate-2023-09'
name: MyJob
jobEnvironments:
- name: JobEnv
  variables:
    QT_QPA_PLATFORM: offscreen
```

단일 환경 정의에서 여러 변수를 설정할 수 있습니다.

```
jobEnvironments:
- name: JobEnv
  variables:
    JOB_VERBOSITY: MEDIUM
    JOB_PROJECT_ID: {{my-project-id}}
    JOB_ENDPOINT_URL: {{https://my-host-name/my/path}}
    QT_QPA_PLATFORM: offscreen
```

`{{Param.{{ParameterName}}}}` 구문을 사용하여 변수 값의 작업 파라미터를 참조할 수 있습니다.

```
jobEnvironments:
- name: JobEnv
  variables:
    JOB_EXAMPLE_PARAM: "{{Param.ExampleParam}}"
```

특정 단계의 작업 수준 변수를 재정의하려면 변수 이름이 동일한 `stepEnvironments` 항목을 정의합니다. 다음 예제에서는 `JOB_PROJECT_ID` 작업 수준에서 값을 로 정의한 `project-12`다음 단계 수준에서 값을 로 재정의합니다`step-project-12`. 단계의 작업은 단계 수준 값을 사용합니다.

```
specificationVersion: 'jobtemplate-2023-09'
name: MyJob
jobEnvironments:
- name: JobEnv
  variables:
    JOB_PROJECT_ID: project-12
steps:
- name: MyStep
  stepEnvironments:
  - name: StepEnv
    variables:
      JOB_PROJECT_ID: step-project-12
```

## 시도: 환경 변수 샘플 실행
<a name="set-env-vars-example"></a>

Deadline Cloud 샘플 리포지토리에는 [환경 변수 설정 및 보기를 보여주는 작업 번들이](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_env_vars/template.yaml) 포함되어 있습니다. 샘플 작업 템플릿은 작업 및 단계 수준에서 변수를 정의한 다음 병합된 결과를 인쇄하는 작업을 실행합니다. 다음 절차에 따라 샘플을 실행하고 결과를 검사합니다.

### 사전 조건
<a name="set-prerequisites"></a>

1. 대기열 및 연결된 Linux 플릿이 있는 Deadline Cloud 팜이 없는 경우 Deadline Cloud [콘솔의 안내 온보딩 환경에 따라 기본 설정으로 Deadline Cloud](https://console.aws.amazon.com/deadlinecloud/home) 팜을 생성합니다.

1. 워크스테이션에 Deadline Cloud CLI 및 AWS Deadline Cloud 모니터가 없는 경우 [Deadline Cloud 제출자 설정](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/submitter.html)의 단계를 따릅니다.

1. `git`를 사용하여 [Deadline Cloud 샘플 GitHub 리포지토리](https://github.com/aws-deadline/deadline-cloud-samples)를 복제합니다.

   ```
   git clone https://github.com/aws-deadline/deadline-cloud-samples.git
   cd deadline-cloud-samples/job_bundles
   ```

### 샘플 실행
<a name="set-run-example"></a>

1. Deadline Cloud CLI를 사용하여 `job_env_vars` 샘플을 제출합니다.

   ```
   deadline bundle submit job_env_vars
   ```

1. Deadline Cloud 모니터에서 진행 상황을 모니터링할 새 작업을 선택합니다. 대기열과 연결된 Linux플릿에 작업자를 사용할 수 있게 되면 몇 초 안에 작업이 완료됩니다. 작업을 선택한 다음 작업 패널의 오른쪽 상단 메뉴에서 **로그 보기를** 선택합니다.

### 세션 작업과 정의 비교
<a name="set-compare-actions"></a>

로그 보기에는 세 가지 세션 작업이 표시됩니다. 텍스트 편집기에서 [job\_env\_vars/template.yaml](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_env_vars/template.yaml) 파일을 열어 각 작업을 작업 템플릿의 정의와 비교합니다.

1. **JobEnv 세션 시작** 작업을 선택합니다. 로그 출력에는 설정 중인 작업 수준 환경 변수가 표시됩니다.

   ```
   Setting: JOB_VERBOSITY=MEDIUM
   Setting: JOB_EXAMPLE_PARAM=An example parameter value
   Setting: JOB_PROJECT_ID=project-12
   Setting: JOB_ENDPOINT_URL=https://internal-host-name/some/path
   Setting: QT_QPA_PLATFORM=offscreen
   ```

   작업 템플릿의 다음 줄은이 환경을 정의합니다.

   ```
   jobEnvironments:
   - name: JobEnv
     variables:
       JOB_VERBOSITY: MEDIUM
       JOB_EXAMPLE_PARAM: "{{Param.ExampleParam}}"
       JOB_PROJECT_ID: project-12
       JOB_ENDPOINT_URL: https://internal-host-name/some/path
       QT_QPA_PLATFORM: offscreen
   ```

1. **StepEnv 세션 시작** 작업을 선택합니다. 로그 출력에는 재정의된를 포함한 단계 수준 변수가 표시됩니다`JOB_PROJECT_ID`.

   ```
   Setting: STEP_VERBOSITY=HIGH
   Setting: JOB_PROJECT_ID=step-project-12
   ```

   작업 템플릿의 다음 줄은이 환경을 정의합니다.

   ```
   stepEnvironments:
   - name: StepEnv
     variables:
       STEP_VERBOSITY: HIGH
       JOB_PROJECT_ID: step-project-12
   ```

1. **작업 실행** 세션 작업을 선택합니다. 로그 출력에는 작업에 사용할 수 있는 병합된 환경 변수가 표시됩니다. 는 단계 수준 값를 `JOB_PROJECT_ID` 사용합니다`step-project-12`.

   ```
   Environment variables starting with JOB_*:
   JOB_ENDPOINT_URL=https://internal-host-name/some/path
   JOB_EXAMPLE_PARAM='An example parameter value'
   JOB_PROJECT_ID=step-project-12
   JOB_VERBOSITY=MEDIUM
   
   Environment variables starting with STEP_*:
   STEP_VERBOSITY=HIGH
   ```