

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

# Deadline Cloud 리소스 시작하기
<a name="getting-started"></a>

 AWS Deadline Cloud에 대한 사용자 지정 솔루션 생성을 시작하려면 리소스를 설정해야 합니다. 여기에는 팜, 팜에 대해 하나 이상의 대기열, 대기열에 서비스를 제공할 작업자 플릿이 포함됩니다. Deadline Cloud 콘솔을 사용하여 리소스를 생성하거나를 사용할 수 있습니다 AWS Command Line Interface.

이 자습서에서는 AWS CloudShell 를 사용하여 간단한 개발자 팜을 생성하고 작업자 에이전트를 실행합니다. 그런 다음 파라미터 및 첨부 파일을 사용하여 간단한 작업을 제출 및 실행하고, 서비스 관리형 플릿을 추가하고, 완료되면 팜 리소스를 정리할 수 있습니다.

다음 섹션에서는 Deadline Cloud의 다양한 기능과 이러한 기능이 작동하고 함께 작동하는 방법을 소개합니다. 다음 단계는 새로운 워크로드 및 사용자 지정을 개발하고 테스트하는 데 유용합니다.

콘솔을 사용하여 팜을 설정하는 지침은 *Deadline Cloud 사용 설명서*의 [시작하기](https://docs.aws.amazon.com/deadline-cloud/latest/userguide/getting-started.html)를 참조하세요.

**Topics**
+ [Deadline Cloud 팜 생성](create-a-farm.md)
+ [Deadline Cloud 작업자 에이전트 실행](run-worker.md)
+ [Deadline Cloud로 제출](submit-a-job.md)
+ [Deadline Cloud에서 작업 첨부 파일이 있는 작업 제출](run-jobs-job-attachments.md)
+ [Deadline Cloud의 개발자 팜에 서비스 관리형 플릿 추가](service-managed-fleet.md)
+ [Deadline Cloud에서 팜 리소스 정리](cleaning-up.md)

# Deadline Cloud 팜 생성
<a name="create-a-farm"></a>

 AWS Deadline Cloud에서 개발자 팜 및 대기열 리소스를 생성하려면 다음 절차와 같이 AWS Command Line Interface (AWS CLI)를 사용합니다. 또한 AWS Identity and Access Management (IAM) 역할과 고객 관리형 플릿(CMF)을 생성하고 플릿을 대기열에 연결합니다. 그런 다음를 구성 AWS CLI 하고 팜이 지정된 대로 설정되고 작동하는지 확인할 수 있습니다.

이 팜을 사용하여 Deadline Cloud의 기능을 탐색한 다음 새 워크로드, 사용자 지정 및 파이프라인 통합을 개발하고 테스트할 수 있습니다.

**팜을 생성하려면**

1. [세션을 엽니다 AWS CloudShell](https://console.aws.amazon.com/cloudshell/home?region=us-west-2). CloudShell 창을 사용하여 AWS Command Line Interface (AWS CLI) 명령을 입력하여이 자습서의 예제를 실행합니다. 계속 진행하면서 CloudShell 창을 열어 둡니다.

1. 팜의 이름을 생성하고 해당 팜 이름을에 추가합니다`~/.bashrc`. 이렇게 하면 다른 터미널 세션에서 사용할 수 있습니다.

   ```
   echo "DEV_FARM_NAME=DeveloperFarm" >> ~/.bashrc
   source ~/.bashrc
   ```

1. 팜 리소스를 생성하고에 팜 ID를 추가합니다`~/.bashrc`.

   ```
   aws deadline create-farm \
       --display-name "$DEV_FARM_NAME"
   
   echo "DEV_FARM_ID=\$(aws deadline list-farms \
           --query \"farms[?displayName=='\$DEV_FARM_NAME'].farmId \
           | [0]\" --output text)" >> ~/.bashrc
   source ~/.bashrc
   ```

1. 대기열 리소스를 생성하고 대기열 ID를에 추가합니다. `~/.bashrc.` 

   ```
   aws deadline create-queue \
       --farm-id $DEV_FARM_ID \
       --display-name "$DEV_FARM_NAME Queue" \
       --job-run-as-user '{"posix": {"user": "job-user", "group": "job-group"}, "runAs":"QUEUE_CONFIGURED_USER"}'
   
   echo "DEV_QUEUE_ID=\$(aws deadline list-queues \
           --farm-id \$DEV_FARM_ID \
           --query \"queues[?displayName=='\$DEV_FARM_NAME Queue'].queueId \
           | [0]\" --output text)" >> ~/.bashrc
   source ~/.bashrc
   ```

1. 플릿에 대한 IAM 역할을 생성합니다. 이 역할은 대기열에서 작업을 실행하는 데 필요한 보안 자격 증명을 플릿의 작업자 호스트에 제공합니다.

   ```
   aws iam create-role \
       --role-name "${DEV_FARM_NAME}FleetRole" \
       --assume-role-policy-document \
           '{
               "Version": "2012-10-17",		 	 	 
               "Statement": [
                   {
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "credentials.deadline.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           }'
   aws iam put-role-policy \
       --role-name "${DEV_FARM_NAME}FleetRole" \
       --policy-name WorkerPermissions \
       --policy-document \
           '{
               "Version": "2012-10-17",		 	 	 
               "Statement": [
                   {
                       "Effect": "Allow",
                       "Action": [
                           "deadline:AssumeFleetRoleForWorker",
                           "deadline:UpdateWorker",
                           "deadline:DeleteWorker",
                           "deadline:UpdateWorkerSchedule",
                           "deadline:BatchGetJobEntity",
                           "deadline:AssumeQueueRoleForWorker"
                       ],
                       "Resource": "*",
                       "Condition": {
                           "StringEquals": {
                               "aws:PrincipalAccount": "${aws:ResourceAccount}"
                           }
                       }
                   },
                   {
                       "Effect": "Allow",
                       "Action": [
                           "logs:CreateLogStream"
                       ],
                       "Resource": "arn:aws:logs:*:*:*:/aws/deadline/*",
                       "Condition": {
                           "StringEquals": {
                               "aws:PrincipalAccount": "${aws:ResourceAccount}"
                           }
                       }
                   },
                   {
                       "Effect": "Allow",
                       "Action": [
                           "logs:PutLogEvents",
                           "logs:GetLogEvents"
                       ],
                       "Resource": "arn:aws:logs:*:*:*:/aws/deadline/*",
                       "Condition": {
                           "StringEquals": {
                               "aws:PrincipalAccount": "${aws:ResourceAccount}"
                           }
                       }
                   }
               ]
           }'
   ```

1. 고객 관리형 플릿(CMF)을 생성하고 해당 플릿 ID를에 추가합니다`~/.bashrc`.

   ```
   FLEET_ROLE_ARN="arn:aws:iam::$(aws sts get-caller-identity \
           --query "Account" --output text):role/${DEV_FARM_NAME}FleetRole"
   aws deadline create-fleet \
       --farm-id $DEV_FARM_ID \
       --display-name "$DEV_FARM_NAME CMF" \
       --role-arn $FLEET_ROLE_ARN \
       --max-worker-count 5 \
       --configuration \
           '{
               "customerManaged": {
                   "mode": "NO_SCALING",
                   "workerCapabilities": {
                       "vCpuCount": {"min": 1},
                       "memoryMiB": {"min": 512},
                       "osFamily": "linux",
                       "cpuArchitectureType": "x86_64"
                   }
               }
           }'
   
   echo "DEV_CMF_ID=\$(aws deadline list-fleets \
           --farm-id \$DEV_FARM_ID \
           --query \"fleets[?displayName=='\$DEV_FARM_NAME CMF'].fleetId \
           | [0]\" --output text)" >> ~/.bashrc
   source ~/.bashrc
   ```

1. CMF를 대기열에 연결합니다.

   ```
   aws deadline create-queue-fleet-association \
       --farm-id $DEV_FARM_ID \
       --queue-id $DEV_QUEUE_ID \
       --fleet-id $DEV_CMF_ID
   ```

1. Deadline Cloud 명령줄 인터페이스를 설치합니다.

   ```
   pip install deadline
   ```

1. 기본 팜을 팜 ID로 설정하고 대기열을 이전에 생성한 대기열 ID로 설정하려면 다음 명령을 사용합니다.

   ```
   deadline config set defaults.farm_id $DEV_FARM_ID
   deadline config set defaults.queue_id $DEV_QUEUE_ID
   ```

1. (선택 사항) 팜이 사양에 따라 설정되었는지 확인하려면 다음 명령을 사용합니다.
   + 모든 팜 나열 - **deadline farm list**
   + 기본 팜의 모든 대기열 나열 - **deadline queue list**
   + 기본 팜의 모든 플릿 나열 - **deadline fleet list**
   + 기본 팜 가져오기 - **deadline farm get**
   + 기본 대기열 가져오기 - **deadline queue get**
   + 기본 대기열과 연결된 모든 플릿 가져오기 - **deadline fleet get**

## 다음 단계
<a name="gs-create-farm-next"></a>

팜을 생성한 후 플릿의 호스트에서 Deadline Cloud 작업자 에이전트를 실행하여 작업을 처리할 수 있습니다. [Deadline Cloud 작업자 에이전트 실행](run-worker.md)을(를) 참조하세요.

# Deadline Cloud 작업자 에이전트 실행
<a name="run-worker"></a>

개발자 팜의 대기열에 제출하는 작업을 실행하려면 먼저 AWS 워커 호스트에서 Deadline Cloud 워커 에이전트를 개발자 모드로 실행해야 합니다.

이 자습서의 나머지 부분에서는 두 개의 AWS CloudShell 탭을 사용하여 개발자 팜에서 AWS CLI 작업을 수행합니다. 첫 번째 탭에서 작업을 제출할 수 있습니다. 두 번째 탭에서 작업자 에이전트를 실행할 수 있습니다.

**참고**  
CloudShell 세션을 20분 이상 유휴 상태로 두면 시간이 초과되어 작업자 에이전트가 중지됩니다. 작업자 에이전트를 다시 시작하려면 다음 절차의 지침을 따릅니다.

작업자 에이전트를 시작하려면 먼저 Deadline Cloud 팜, 대기열 및 플릿을 설정해야 합니다. [Deadline Cloud 팜 생성](create-a-farm.md)을(를) 참조하세요.

**개발자 모드에서 작업자 에이전트를 실행하려면**

1. 첫 번째 CloudShell 탭에서 팜을 열어 둔 상태에서 두 번째 CloudShell 탭을 연 다음 `demoenv-logs` 및 `demoenv-persist` 디렉터리를 생성합니다.

   ```
   mkdir ~/demoenv-logs 
   mkdir ~/demoenv-persist
   ```

1. PyPI에서 Deadline Cloud 작업자 에이전트 패키지를 다운로드하여 설치합니다.
**참고**  
에서는 에이전트 파일을 Python의 글로벌 사이트 패키지 디렉터리에 설치Windows해야 합니다. Python 가상 환경은 현재 지원되지 않습니다.

   ```
   python -m pip install deadline-cloud-worker-agent
   ```

1. 작업자 에이전트가 작업 실행을 위한 임시 디렉터리를 생성할 수 있도록 하려면 디렉터리를 생성합니다.

   ```
   sudo mkdir /sessions
   sudo chmod 750 /sessions
   sudo chown cloudshell-user /sessions
   ```

1. 에 추가`DEV_CMF_ID`한 변수 `DEV_FARM_ID` 및를 사용하여 개발자 모드에서 Deadline Cloud 작업자 에이전트를 실행합니다`~/.bashrc`.

   ```
   deadline-worker-agent \
       --farm-id $DEV_FARM_ID \
       --fleet-id $DEV_CMF_ID \
       --run-jobs-as-agent-user \
       --logs-dir ~/demoenv-logs \
       --persistence-dir ~/demoenv-persist
   ```

   작업자 에이전트가 `UpdateWorkerSchedule` API 작업을 초기화한 다음 폴링하면 다음 출력이 표시됩니다.

   ```
   INFO    Worker Agent starting
   [2024-03-27 15:51:01,292][INFO    ] 👋 Worker Agent starting
   [2024-03-27 15:51:01,292][INFO    ] AgentInfo 
   Python Interpreter: /usr/bin/python3
   Python Version: 3.9.16 (main, Sep  8 2023, 00:00:00)  - [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)]
   Platform: linux
   ...
   [2024-03-27 15:51:02,528][INFO    ] 📥 API.Resp 📥 [deadline:UpdateWorkerSchedule](200) params={'assignedSessions': {}, 'cancelSessionActions': {}, 'updateIntervalSeconds': 15} ...
   [2024-03-27 15:51:17,635][INFO    ] 📥 API.Resp 📥 [deadline:UpdateWorkerSchedule](200) params=(Duplicate removed, see previous response) ...
   [2024-03-27 15:51:32,756][INFO    ] 📥 API.Resp 📥 [deadline:UpdateWorkerSchedule](200) params=(Duplicate removed, see previous response) ...
   ...
   ```

1. 첫 번째 CloudShell 탭을 선택한 다음 플릿의 작업자를 나열합니다.

   ```
   deadline worker list --fleet-id $DEV_CMF_ID
   ```

   다음과 같은 출력이 표시됩니다.

   ```
   Displaying 1 of 1 workers starting at 0
   
   - workerId: worker-8c9af877c8734e89914047111f
     status: STARTED
     createdAt: 2023-12-13 20:43:06+00:00
   ```

프로덕션 구성에서 Deadline Cloud 작업자 에이전트는 호스트 시스템에서 여러 사용자 및 구성 디렉터리를 관리 사용자로 설정해야 합니다. 사용자만 액세스할 수 있는 자체 개발 팜에서 작업을 실행하므로 이러한 설정을 재정의할 수 있습니다.

## 다음 단계
<a name="gs-run-worker-agent-next"></a>

이제 작업자 에이전트가 작업자 호스트에서 실행 중이므로 작업자에게 작업을 보낼 수 있습니다. 다음을 할 수 있습니다.
+ [Deadline Cloud로 제출](submit-a-job.md) 간단한 OpenJD 작업 번들을 사용합니다.
+ [Deadline Cloud에서 작업 첨부 파일이 있는 작업 제출](run-jobs-job-attachments.md)는 서로 다른 운영 체제를 사용하여 워크스테이션 간에 파일을 공유합니다.

# Deadline Cloud로 제출
<a name="submit-a-job"></a>

작업자 호스트에서 Deadline Cloud 작업을 실행하려면 Open Job Description(OpenJD) 작업 번들을 생성하고 사용하여 작업을 구성합니다. 번들은 예를 들어 작업에 대한 입력 파일과 작업의 출력을 쓸 위치를 지정하여 작업을 구성합니다. 이 주제에는 작업 번들을 구성할 수 있는 방법의 예가 포함되어 있습니다.

이 섹션의 절차를 따르려면 먼저 다음을 완료해야 합니다.
+ [Deadline Cloud 팜 생성](create-a-farm.md)
+ [Deadline Cloud 작업자 에이전트 실행](run-worker.md)

 AWS Deadline Cloud를 사용하여 작업을 실행하려면 다음 절차를 사용합니다. 첫 번째 AWS CloudShell 탭을 사용하여 개발자 팜에 작업을 제출합니다. 두 번째 CloudShell 탭을 사용하여 작업자 에이전트 출력을 봅니다.

**Topics**
+ [simple\$1job 샘플 제출](#submit-a-simplejob-sample)
+ [파라미터와 simple\$1job 함께 제출](#submit-with-parameter)
+ [파일 I/O를 사용하여 simple\$1file\$1job 작업 번들 생성](#create-job-bundle-with-file-io)
+ [다음 단계](#submit-a-job-next)

## simple\$1job 샘플 제출
<a name="submit-a-simplejob-sample"></a>

팜을 생성하고 작업자 에이전트를 실행한 후 simple\$1job 샘플을 Deadline Cloud에 제출할 수 있습니다.

**샘플을 Deadline Cloudsimple\$1job에 제출하려면**

1. 첫 번째 CloudShell 탭을 선택합니다.

1. GitHub에서 샘플을 다운로드합니다.

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

1. 작업 번들 샘플 디렉터리로 이동합니다.

   ```
   cd ~/deadline-cloud-samples/job_bundles/
   ```

1. simple\$1job 샘플을 제출합니다.

   ```
   deadline bundle submit simple_job
   ```

1. 두 번째 CloudShell 탭을 선택하여 호출`BatchGetJobEntities`, 세션 가져오기 및 세션 작업 실행에 대한 로깅 출력을 봅니다.

   ```
   ...
   [2024-03-27 16:00:21,846][INFO    ] 🔷 Session.Starting 🔷 [session-053d77cef82648fe2] Starting new Session. [queue-3ba4ff683ff54db09b851a2ed8327d7b/job-d34cc98a6e234b6f82577940ab4f76c6]
   [2024-03-27 16:00:21,853][INFO    ] 📤 API.Req 📤 [deadline:BatchGetJobEntity] resource={'farm-id': 'farm-3e24cfc9bbcd423e9c1b6754bc1', 'fleet-id': 'fleet-246ee60f46d44559b6cce010d05', 'worker-id': 'worker-75e0fce9c3c344a69bff57fcd83'} params={'identifiers': [{'jobDetails': {'jobId': 'job-d34cc98a6e234b6f82577940ab4'}}]} request_url=https://scheduling.deadline.us-west-2.amazonaws.com/2023-10-12/farms/farm-3e24cfc9bbcd423e /fleets/fleet-246ee60f46d44559b1 /workers/worker- 75e0fce9c3c344a69b /batchGetJobEntity
   [2024-03-27 16:00:22,013][INFO    ] 📥 API.Resp 📥 [deadline:BatchGetJobEntity](200) params={'entities': [{'jobDetails': {'jobId': 'job-d34cc98a6e234b6f82577940ab6', 'jobRunAsUser': {'posix': {'user': 'job-user', 'group': 'job-group'}, 'runAs': 'QUEUE_CONFIGURED_USER'}, 'logGroupName': '/aws/deadline/farm-3e24cfc9bbcd423e9c1b6754bc1/queue-3ba4ff683ff54db09b851a2ed83', 'parameters': '*REDACTED*', 'schemaVersion': 'jobtemplate-2023-09'}}], 'errors': []} request_id=a3f55914-6470-439e-89e5-313f0c6
   [2024-03-27 16:00:22,013][INFO    ] 🔷 Session.Add 🔷 [session-053d77cef82648fea9c69827182] Appended new SessionActions. (ActionIds: ['sessionaction-053d77cef82648fea9c69827182-0']) [queue-3ba4ff683ff54db09b851a2ed8b/job-d34cc98a6e234b6f82577940ab6]
   [2024-03-27 16:00:22,014][WARNING ] 🔷 Session.User 🔷 [session-053d77cef82648fea9c69827182] Running as the Worker Agent's user. (User: cloudshell-user) [queue-3ba4ff683ff54db09b851a2ed8b/job-d34cc98a6e234b6f82577940ac6]
   [2024-03-27 16:00:22,015][WARNING ] 🔷 Session.AWSCreds 🔷 [session-053d77cef82648fea9c69827182] AWS Credentials are not available: Queue has no IAM Role. [queue-3ba4ff683ff54db09b851a2ed8b/job-d34cc98a6e234b6f82577940ab6]
   [2024-03-27 16:00:22,026][INFO    ] 🔷 Session.Logs 🔷 [session-053d77cef82648fea9c69827182] Logs streamed to: AWS CloudWatch Logs. (LogDestination: /aws/deadline/farm-3e24cfc9bbcd423e9c1b6754bc1/queue-3ba4ff683ff54db09b851a2ed83/session-053d77cef82648fea9c69827181) [queue-3ba4ff683ff54db09b851a2ed83/job-d34cc98a6e234b6f82577940ab4]
   [2024-03-27 16:00:22,026][INFO    ] 🔷 Session.Logs 🔷 [session-053d77cef82648fea9c69827182] Logs streamed to: local file. (LogDestination: /home/cloudshell-user/demoenv-logs/queue-3ba4ff683ff54db09b851a2ed8b/session-053d77cef82648fea9c69827182.log) [queue-3ba4ff683ff54db09b851a2ed83/job-d34cc98a6e234b6f82577940ab4]
   ...
   ```
**참고**  
작업자 에이전트의 로깅 출력만 표시됩니다. 작업을 실행하는 세션에 대한 별도의 로그가 있습니다.

1. 첫 번째 탭을 선택한 다음 작업자 에이전트가 작성하는 로그 파일을 검사합니다.

   1. 작업자 에이전트 로그 디렉터리로 이동하여 내용을 확인합니다.

      ```
      cd ~/demoenv-logs
      ls
      ```

   1. 작업자 에이전트가 생성하는 첫 번째 로그 파일을 인쇄합니다.

      ```
      cat worker-agent-bootstrap.log
      ```

      이 파일에는 Deadline Cloud API를 호출하여 플릿에 작업자 리소스를 생성한 다음 플릿 역할을 수임한 방법에 대한 작업자 에이전트 출력이 포함되어 있습니다.

   1. 작업자 에이전트가 플릿에 조인할 때 로그 파일 출력을 인쇄합니다.

      ```
      cat worker-agent.log
      ```

      이 로그에는 작업자 에이전트가 수행하는 모든 작업에 대한 출력이 포함되지만 해당 리소스의 IDs를 제외하고 작업을 실행하는 대기열에 대한 출력은 포함되지 않습니다.

   1. 대기열 리소스 ID와 동일한 디렉터리의 각 세션에 대한 로그 파일을 인쇄합니다.

      ```
      cat $DEV_QUEUE_ID/session-*.log
      ```

      작업이 성공하면 로그 파일 출력은 다음과 유사합니다.

      ```
      cat $DEV_QUEUE_ID/$(ls -t $DEV_QUEUE_ID | head -1)
                                  
      2024-03-27 16:00:22,026 WARNING Session running with no AWS Credentials.
      2024-03-27 16:00:22,404 INFO 
      2024-03-27 16:00:22,405 INFO ==============================================
      2024-03-27 16:00:22,405 INFO --------- Running Task
      2024-03-27 16:00:22,405 INFO ==============================================
      2024-03-27 16:00:22,406 INFO ----------------------------------------------
      2024-03-27 16:00:22,406 INFO Phase: Setup
      2024-03-27 16:00:22,406 INFO ----------------------------------------------
      2024-03-27 16:00:22,406 INFO Writing embedded files for Task to disk.
      2024-03-27 16:00:22,406 INFO Mapping: Task.File.runScript -> /sessions/session-053d77cef82648fea9c698271812a/embedded_fileswa_gj55_/tmp2u9yqtsz
      2024-03-27 16:00:22,406 INFO Wrote: runScript -> /sessions/session-053d77cef82648fea9c698271812a/embedded_fileswa_gj55_/tmp2u9yqtsz
      2024-03-27 16:00:22,407 INFO ----------------------------------------------
      2024-03-27 16:00:22,407 INFO Phase: Running action
      2024-03-27 16:00:22,407 INFO ----------------------------------------------
      2024-03-27 16:00:22,407 INFO Running command /sessions/session-053d77cef82648fea9c698271812a/tmpzuzxpslm.sh
      2024-03-27 16:00:22,414 INFO Command started as pid: 471
      2024-03-27 16:00:22,415 INFO Output:
      2024-03-27 16:00:22,420 INFO Welcome to AWS Deadline Cloud!
      2024-03-27 16:00:22,571 INFO 
      2024-03-27 16:00:22,572 INFO ==============================================
      2024-03-27 16:00:22,572 INFO --------- Session Cleanup
      2024-03-27 16:00:22,572 INFO ==============================================
      2024-03-27 16:00:22,572 INFO Deleting working directory: /sessions/session-053d77cef82648fea9c698271812a
      ```

1. 작업에 대한 정보를 인쇄합니다.

   ```
   deadline job get
   ```

   작업을 제출하면 시스템이 작업을 기본값으로 저장하므로 작업 ID를 입력할 필요가 없습니다.

## 파라미터와 simple\$1job 함께 제출
<a name="submit-with-parameter"></a>

파라미터를 사용하여 작업을 제출할 수 있습니다. 다음 절차에서는 사용자 지정 메시지를 포함하도록 simple\$1job 템플릿을 편집하고 simple\$1job를 제출한 다음 세션 로그 파일을 인쇄하여 메시지를 확인합니다.

**파라미터를 사용하여 simple\$1job 샘플을 제출하려면**

1. 첫 번째 CloudShell 탭을 선택한 다음 작업 번들 샘플 디렉터리로 이동합니다.

   ```
   cd ~/deadline-cloud-samples/job_bundles/
   ```

1. simple\$1job 템플릿의 내용을 인쇄합니다.

   ```
   cat simple_job/template.yaml
   ```

   `Message` 파라미터가 있는 `parameterDefinitions` 섹션은 다음과 같아야 합니다.

   ```
   parameterDefinitions:
   - name: Message
     type: STRING
     default: Welcome to AWS Deadline Cloud!
   ```

1. 파라미터 값과 함께 simple\$1job 샘플을 제출한 다음 작업 실행이 완료될 때까지 기다립니다.

   ```
   deadline bundle submit simple_job \
       -p "Message=Greetings from the developer getting started guide."
   ```

1. 사용자 지정 메시지를 보려면 최신 세션 로그 파일을 확인합니다.

   ```
   cd ~/demoenv-logs
   cat $DEV_QUEUE_ID/$(ls -t $DEV_QUEUE_ID | head -1)
   ```

## 파일 I/O를 사용하여 simple\$1file\$1job 작업 번들 생성
<a name="create-job-bundle-with-file-io"></a>

렌더링 작업은 장면 정의를 읽고 이미지를 렌더링한 다음 해당 이미지를 출력 파일에 저장해야 합니다. 이미지를 렌더링하는 대신 작업을 계산하여 입력의 해시를 생성하여이 작업을 시뮬레이션할 수 있습니다.

**파일 I/O를 사용하여 simple\$1file\$1job 작업 번들을 생성하려면**

1. 첫 번째 CloudShell 탭을 선택한 다음 작업 번들 샘플 디렉터리로 이동합니다.

   ```
   cd ~/deadline-cloud-samples/job_bundles/
   ```

1. 새 이름을 `simple_job` 사용하여의 복사본을 만듭니다`simple_file_job`.

   ```
   cp -r simple_job simple_file_job
   ```

1. 다음과 같이 작업 템플릿을 편집합니다.
**참고**  
이러한 단계에는 nano를 사용하는 것이 좋습니다. 를 사용하려면를 사용하여 붙여넣기 모드를 설정해야 Vim합니다`:set paste`.

   1. 텍스트 편집기에서 템플릿을 엽니다.

      ```
      nano simple_file_job/template.yaml
      ```

   1. 다음 `type`, `objectType`및를 추가합니다`dataFlow``parameterDefinitions`.

      ```
      - name: InFile
        type: PATH
        objectType: FILE
        dataFlow: IN
      - name: OutFile
        type: PATH
        objectType: FILE
        dataFlow: OUT
      ```

   1. 다음 `bash` 스크립트 명령을 입력 파일에서 읽고 출력 파일에 쓰는 파일의 끝에 추가합니다.

      ```
              # hash the input file, and write that to the output
              sha256sum "{{Param.InFile}}" > "{{Param.OutFile}}"
      ```

      업데이트된는 다음과 정확히 일치해야 `template.yaml` 합니다.

      ```
      specificationVersion: 'jobtemplate-2023-09'
      name: Simple File Job Bundle Example
      parameterDefinitions:
      - name: Message
        type: STRING
        default: Welcome to AWS Deadline Cloud!
      - name: InFile
        type: PATH
        objectType: FILE
        dataFlow: IN
      - name: OutFile
        type: PATH
        objectType: FILE
        dataFlow: OUT
      steps:
      - name: WelcomeToDeadlineCloud
        script:
          actions:
            onRun:
              command: '{{Task.File.Run}}'
          embeddedFiles:
          - name: Run
            type: TEXT
            runnable: true
            data: |
              #!/usr/bin/env bash
              echo "{{Param.Message}}"
      
              # hash the input file, and write that to the output
              sha256sum "{{Param.InFile}}" > "{{Param.OutFile}}"
      ```
**참고**  
에서 간격을 조정하려면 들여쓰기 대신 공백을 사용해야 `template.yaml`합니다.

   1. 파일을 저장하고 텍스트 편집기를 종료합니다.

1. 입력 및 출력 파일의 파라미터 값을 제공하여 simple\$1file\$1job을 제출합니다.

   ```
   deadline bundle submit simple_file_job \
       -p "InFile=simple_job/template.yaml" \
       -p "OutFile=hash.txt"
   ```

1. 작업에 대한 정보를 인쇄합니다.

   ```
   deadline job get
   ```
   + 다음과 같은 출력이 표시됩니다.

     ```
     parameters:
       Message:
         string: Welcome to AWS Deadline Cloud!
       InFile:
         path: /local/home/cloudshell-user/BundleFiles/JobBundle-Examples/simple_job/template.yaml
       OutFile:
         path: /local/home/cloudshell-user/BundleFiles/JobBundle-Examples/hash.txt
     ```
   + 상대 경로만 제공했지만 파라미터에는 전체 경로가 설정되어 있습니다. 는 경로의 유형이 일 때 파라미터로 제공되는 모든 경로에 현재 작업 디렉터리를 AWS CLI 조인합니다`PATH`.
   + 다른 터미널 창에서 실행되는 작업자 에이전트가 작업을 픽업하고 실행합니다. 이 작업은 다음 명령을 사용하여 볼 수 있는 `hash.txt` 파일을 생성합니다.

     ```
     cat hash.txt
     ```

     이 명령은 다음과 유사한 출력을 인쇄합니다.

     ```
     eaa2df5d34b54be5ac34c56a24a8c237b8487231a607eaf530a04d76b89c9cd3 /local/home/cloudshell-user/BundleFiles/JobBundle-Examples/simple_job/template.yaml
     ```

## 다음 단계
<a name="submit-a-job-next"></a>

Deadline Cloud CLI를 사용하여 간단한 작업을 제출하는 방법을 학습한 후 다음을 탐색할 수 있습니다.
+ [Deadline Cloud에서 작업 첨부 파일이 있는 작업 제출](run-jobs-job-attachments.md) 다른 운영 체제를 실행하는 호스트에서 작업을 실행하는 방법을 알아봅니다.
+ [Deadline Cloud의 개발자 팜에 서비스 관리형 플릿 추가](service-managed-fleet.md) Deadline Cloud에서 관리하는 호스트에서 작업을 실행합니다.
+ [Deadline Cloud에서 팜 리소스 정리](cleaning-up.md) -이 자습서에서 사용한 리소스를 종료합니다.

# Deadline Cloud에서 작업 첨부 파일이 있는 작업 제출
<a name="run-jobs-job-attachments"></a>

많은 팜은 공유 파일 시스템을 사용하여 작업을 제출하는 호스트와 작업을 실행하는 호스트 간에 파일을 공유합니다. 예를 들어 이전 `simple_file_job` 예제에서 로컬 파일 시스템은 작업을 제출하는 탭 1과 작업자 에이전트를 실행하는 탭 2에서 실행되는 AWS CloudShell 터미널 창 간에 공유됩니다.

공유 파일 시스템은 제출자 워크스테이션과 작업자 호스트가 동일한 로컬 영역 네트워크에 있을 때 유용합니다. 데이터를 액세스하는 워크스테이션 근처의 온프레미스에 저장하는 경우 클라우드 기반 팜을 사용하면 지연 시간이 긴 VPN을 통해 파일 시스템을 공유하거나 클라우드에서 파일 시스템을 동기화해야 합니다. 이러한 옵션 중 어느 것도 설정하거나 작동하기가 쉽지 않습니다.

AWS Deadline Cloud는 이메일 *첨부 파일과 유사한 작업* 첨부 파일이 있는 간단한 솔루션을 제공합니다. 작업 첨부 파일을 사용하여 작업에 데이터를 연결합니다. 그런 다음 Deadline Cloud는 Amazon Simple Storage Service(Amazon S3) 버킷에 작업 데이터를 전송하고 저장하는 세부 정보를 처리합니다.

콘텐츠 생성 워크플로는 종종 반복적입니다. 즉, 사용자가 수정된 파일의 작은 하위 집합으로 작업을 제출합니다. Amazon S3 버킷은 콘텐츠 주소 지정 스토리지에 작업 첨부 파일을 저장하므로 각 객체의 이름은 객체 데이터의 해시를 기반으로 하며 디렉터리 트리의 콘텐츠는 작업에 연결된 매니페스트 파일 형식으로 저장됩니다.

이 섹션의 절차를 따르려면 먼저 다음을 완료해야 합니다.
+ [Deadline Cloud 팜 생성](create-a-farm.md)
+ [Deadline Cloud 작업자 에이전트 실행](run-worker.md)

작업 연결로 작업을 실행하려면 다음 단계를 완료하세요.

**Topics**
+ [대기열에 작업 첨부 파일 구성 추가](#job-attachments-config)
+ [작업 첨부 파일simple\$1file\$1job과 함께 제출](#submit-job-attachments)
+ [작업 첨부 파일이 Amazon S3에 저장되는 방법 이해](#job-attachments-in-depth)
+ [다음 단계](#run-jobs-job-attachments-next)

## 대기열에 작업 첨부 파일 구성 추가
<a name="job-attachments-config"></a>

대기열에서 작업 연결을 활성화하려면 계정의 대기열 리소스에 작업 연결 구성을 추가합니다.

**대기열에 작업 연결 구성을 추가하려면**

1. 첫 번째 CloudShell 탭을 선택한 다음 다음 명령 중 하나를 입력하여 Amazon S3 버킷을 작업 연결에 사용합니다.
   + 기존 프라이빗 Amazon S3 버킷이 없는 경우 새 S3 버킷을 생성하고 사용할 수 있습니다.

     ```
     DEV_FARM_BUCKET=$(echo $DEV_FARM_NAME \
         | tr '[:upper:]' '[:lower:]')-$(xxd -l 16 -p /dev/urandom)
     if [ "$AWS_REGION" == "us-east-1" ]; then LOCATION_CONSTRAINT=
     else LOCATION_CONSTRAINT="--create-bucket-configuration \
         LocationConstraint=${AWS_REGION}"
     fi
     aws s3api create-bucket \
         $LOCATION_CONSTRAINT \
         --acl private \
         --bucket ${DEV_FARM_BUCKET}
     ```
   + 프라이빗 Amazon S3 버킷이 이미 있는 경우 *`MY_BUCKET_NAME`*를 버킷 이름으로 바꿔 사용할 수 있습니다.

     ```
     DEV_FARM_BUCKET=MY_BUCKET_NAME
     ```

1. Amazon S3 버킷을 생성하거나 선택한 후 버킷 이름을 `~/.bashrc`에 추가하여 다른 터미널 세션에서 버킷을 사용할 수 있도록 합니다.

   ```
   echo "DEV_FARM_BUCKET=$DEV_FARM_BUCKET" >> ~/.bashrc
    source ~/.bashrc
   ```

1. 대기열에 대한 AWS Identity and Access Management (IAM) 역할을 생성합니다.

   ```
   aws iam create-role --role-name "${DEV_FARM_NAME}QueueRole" \
       --assume-role-policy-document \
           '{
               "Version": "2012-10-17",		 	 	 
               "Statement": [
                   {
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "credentials.deadline.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           }'
   aws iam put-role-policy \
       --role-name "${DEV_FARM_NAME}QueueRole" \
       --policy-name S3BucketsAccess \
       --policy-document \
               '{
                   "Version": "2012-10-17",		 	 	 
                   "Statement": [
                   {
                       "Action": [
                           "s3:GetObject*",
                           "s3:GetBucket*",
                           "s3:List*",
                           "s3:DeleteObject*",
                           "s3:PutObject",
                           "s3:PutObjectLegalHold",
                           "s3:PutObjectRetention",
                           "s3:PutObjectTagging",
                           "s3:PutObjectVersionTagging",
                           "s3:Abort*"
                       ],
                       "Resource": [
                           "arn:aws:s3:::'$DEV_FARM_BUCKET'",
                           "arn:aws:s3:::'$DEV_FARM_BUCKET'/*"
                       ],
                       "Effect": "Allow"
                   }
               ]
               }'
   ```

1. 작업 연결 설정과 IAM 역할을 포함하도록 대기열을 업데이트합니다.

   ```
   QUEUE_ROLE_ARN="arn:aws:iam::$(aws sts get-caller-identity \
           --query "Account" --output text):role/${DEV_FARM_NAME}QueueRole"
   aws deadline update-queue \
       --farm-id $DEV_FARM_ID \
       --queue-id $DEV_QUEUE_ID \
       --role-arn $QUEUE_ROLE_ARN \
       --job-attachment-settings \
           '{
               "s3BucketName": "'$DEV_FARM_BUCKET'",
               "rootPrefix": "JobAttachments"
           }'
   ```

1. 대기열을 업데이트했는지 확인합니다.

   ```
   deadline queue get
   ```

   다음과 같은 출력이 표시됩니다.

   ```
   ...
   jobAttachmentSettings:
     s3BucketName: DEV_FARM_BUCKET
     rootPrefix: JobAttachments
   roleArn: arn:aws:iam::ACCOUNT_NUMBER:role/DeveloperFarmQueueRole
   ...
   ```

## 작업 첨부 파일simple\$1file\$1job과 함께 제출
<a name="submit-job-attachments"></a>

작업 첨부 파일을 사용하는 경우 작업 번들은 Deadline Cloud에 `PATH` 파라미터 사용과 같은 작업의 데이터 흐름을 결정할 수 있는 충분한 정보를 제공해야 합니다. 의 경우 Deadline Cloud에 데이터 흐름이 입력 `template.yaml` 파일 및 출력 파일에 있음을 알리도록 파일을 simple\$1file\$1job편집했습니다.

대기열에 작업 첨부 파일 구성을 추가한 후 작업 첨부 파일과 함께 simple\$1file\$1job 샘플을 제출할 수 있습니다. 이렇게 하면 로깅 및 작업 출력을 보고 작업 첨부 파일이 simple\$1file\$1job 있는이 작동하는지 확인할 수 있습니다.

**작업 첨부 파일이 있는 simple\$1file\$1job 작업 번들을 제출하려면**

1. 첫 번째 CloudShell 탭을 선택한 다음 `JobBundle-Samples` 디렉터리를 엽니다.

1. 

   ```
   cd ~/deadline-cloud-samples/job_bundles/
   ```

1. simple\$1file\$1job을 대기열에 제출합니다. 업로드를 확인하라는 메시지가 표시되면를 입력합니다**y**.

   ```
   deadline bundle submit simple_file_job \
       -p InFile=simple_job/template.yaml \
       -p OutFile=hash-jobattachments.txt
   ```

1. 작업 첨부 파일 데이터 전송 세션 로그 출력을 보려면 다음 명령을 실행합니다.

   ```
   JOB_ID=$(deadline config get defaults.job_id)
   SESSION_ID=$(aws deadline list-sessions \
           --farm-id $DEV_FARM_ID \
           --queue-id $DEV_QUEUE_ID \
           --job-id $JOB_ID \
           --query "sessions[0].sessionId" \
           --output text)
   cat ~/demoenv-logs/$DEV_QUEUE_ID/$SESSION_ID.log
   ```

1. 세션 내에서 실행된 세션 작업을 나열합니다.

   ```
   aws deadline list-session-actions \
       --farm-id $DEV_FARM_ID \
       --queue-id $DEV_QUEUE_ID \
       --job-id $JOB_ID \
       --session-id $SESSION_ID
   ```

   다음과 같은 출력이 표시됩니다.

   ```
   {
       "sessionactions": [
           {
               "sessionActionId": "sessionaction-123-0",
               "status": "SUCCEEDED",
               "startedAt": "<timestamp>",
               "endedAt": "<timestamp>",
               "progressPercent": 100.0,
               "definition": {
                   "syncInputJobAttachments": {}
               }
           },
           {
               "sessionActionId": "sessionaction-123-1",
               "status": "SUCCEEDED",
               "startedAt": "<timestamp>",
               "endedAt": "<timestamp>",
               "progressPercent": 100.0,
               "definition": {
                   "taskRun": {
                       "taskId": "task-abc-0",
                       "stepId": "step-def"
                   }
               }
           }
       ]
   }
   ```

   첫 번째 세션 작업은 입력 작업 첨부 파일을 다운로드한 반면, 두 번째 작업은 이전 단계에서와 같이 작업을 실행한 다음 출력 작업 첨부 파일을 업로드했습니다.

1. 출력 디렉터리를 나열합니다.

   ```
   ls *.txt
   ```

   와 같은 출력`hash.txt`은 디렉터리에 존재하지만 작업의 출력 파일이 아직 다운로드되지 않았기 때문에 `hash-jobattachments.txt` 존재하지 않습니다.

1. 최신 작업에서 출력을 다운로드합니다.

   ```
   deadline job download-output
   ```

1. 다운로드한 파일의 출력을 봅니다.

   ```
   cat hash-jobattachments.txt
   ```

   다음과 같은 출력이 표시됩니다.

   ```
   eaa2df5d34b54be5ac34c56a24a8c237b8487231a607eaf530a04d76b89c9cd3  /tmp/openjd/session-123/assetroot-abc/simple_job/template.yaml
   ```

## 작업 첨부 파일이 Amazon S3에 저장되는 방법 이해
<a name="job-attachments-in-depth"></a>

 AWS Command Line Interface (AWS CLI)를 사용하여 Amazon S3 버킷에 저장된 작업 첨부 파일에 대한 데이터를 업로드하거나 다운로드할 수 있습니다. Deadline Cloud가 Amazon S3에 작업 첨부 파일을 저장하는 방법을 이해하면 워크로드 및 파이프라인 통합을 개발할 때 도움이 됩니다.

**Deadline Cloud 작업 첨부 파일이 Amazon S3에 저장되는 방법을 검사하려면**

1. 첫 번째 CloudShell 탭을 선택한 다음 작업 번들 샘플 디렉터리를 엽니다.

   ```
   cd ~/deadline-cloud-samples/job_bundles/
   ```

1. 작업 속성을 검사합니다.

   ```
   deadline job get
   ```

   다음과 같은 출력이 표시됩니다.

   ```
   parameters:
     Message:
       string: Welcome to AWS Deadline Cloud!
     InFile:
       path: /home/cloudshell-user/deadline-cloud-samples/job_bundles/simple_job/template.yaml
     OutFile:
       path: /home/cloudshell-user/deadline-cloud-samples/job_bundles/hash-jobattachments.txt
   attachments:
     manifests:
     - rootPath: /home/cloudshell-user/deadline-cloud-samples/job_bundles/
       rootPathFormat: posix
       outputRelativeDirectories:
       - .
       inputManifestPath: farm-3040c59a5b9943d58052c29d907a645d/queue-cde9977c9f4d4018a1d85f3e6c1a4e6e/Inputs/f46af01ca8904cd8b514586671c79303/0d69cd94523ba617c731f29c019d16e8_input.xxh128
       inputManifestHash: f95ef91b5dab1fc1341b75637fe987ee
     fileSystem: COPIED
   ```

   첨부 파일 필드에는 작업이 실행될 때 사용하는 입력 및 출력 데이터 경로를 설명하는 매니페스트 구조 목록이 포함되어 있습니다. 에서 작업을 제출한 시스템의 로컬 디렉터리 경로를 `rootPath` 확인합니다. 매니페스트 파일이 포함된 Amazon S3 객체 접미사를 보려면를 검토합니다`inputManifestFile`. 매니페스트 파일에는 작업 입력 데이터의 디렉터리 트리 스냅샷에 대한 메타데이터가 포함되어 있습니다.

1. Amazon S3 매니페스트 객체를 Pretty-print하여 작업의 입력 디렉터리 구조를 확인합니다.

   ```
   MANIFEST_SUFFIX=$(aws deadline get-job \
        --farm-id $DEV_FARM_ID \
        --queue-id $DEV_QUEUE_ID \
        --job-id $JOB_ID \
        --query "attachments.manifests[0].inputManifestPath" \
        --output text)
    aws s3 cp s3://$DEV_FARM_BUCKET/JobAttachments/Manifests/$MANIFEST_SUFFIX - | jq .
   ```

   다음과 같은 출력이 표시됩니다.

   ```
   {
        "hashAlg": "xxh128",
        "manifestVersion": "2023-03-03",
        "paths": [
        {
            "hash": "2ec297b04c59c4741ed97ac8fb83080c",
            "mtime": 1698186190000000,
            "path": "simple_job/template.yaml",
            "size": 445
        }
        ],
        "totalSize": 445
    }
   ```

1. 출력 작업 첨부 파일에 대한 매니페스트를 포함하는 Amazon S3 접두사를 구성하고 그 아래에 객체를 나열합니다.

   ```
   SESSION_ACTION=$(aws deadline list-session-actions \
       --farm-id $DEV_FARM_ID \
       --queue-id $DEV_QUEUE_ID \
       --job-id $JOB_ID \
       --session-id $SESSION_ID \
       --query "sessionActions[?definition.taskRun != null] | [0]")
   STEP_ID=$(echo $SESSION_ACTION | jq -r .definition.taskRun.stepId)
   TASK_ID=$(echo $SESSION_ACTION | jq -r .definition.taskRun.taskId)
   TASK_OUTPUT_PREFIX=JobAttachments/Manifests/$DEV_FARM_ID/$DEV_QUEUE_ID/$JOB_ID/$STEP_ID/$TASK_ID/
   aws s3api list-objects-v2 --bucket $DEV_FARM_BUCKET --prefix $TASK_OUTPUT_PREFIX
   ```

   출력 작업 연결은 작업 리소스에서 직접 참조되지 않고 대신 팜 리소스 IDs를 기반으로 Amazon S3 버킷에 배치됩니다.

1. 특정 세션 작업 ID에 대한 최신 매니페스트 객체 키를 가져온 다음 매니페스트 객체를 예쁘게 인쇄합니다.

   ```
   SESSION_ACTION_ID=$(echo $SESSION_ACTION | jq -r .sessionActionId)
    MANIFEST_KEY=$(aws s3api list-objects-v2 \
        --bucket $DEV_FARM_BUCKET \
        --prefix $TASK_OUTPUT_PREFIX \
        --query "Contents[*].Key" --output text \
        | grep $SESSION_ACTION_ID \
        | sort | tail -1)
    MANIFEST_OBJECT=$(aws s3 cp s3://$DEV_FARM_BUCKET/$MANIFEST_KEY -)
    echo $MANIFEST_OBJECT | jq .
   ```

   출력`hash-jobattachments.txt`에 다음과 같은 파일 속성이 표시됩니다.

   ```
   {
        "hashAlg": "xxh128",
        "manifestVersion": "2023-03-03",
        "paths": [
        {
            "hash": "f60b8e7d0fabf7214ba0b6822e82e08b",
            "mtime": 1698785252554950,
            "path": "hash-jobattachments.txt",
            "size": 182
        }
        ],
        "totalSize": 182
    }
   ```

   작업에는 작업 실행당 하나의 매니페스트 객체만 있지만 일반적으로 작업 실행당 더 많은 객체를 가질 수 있습니다.

1. `Data` 접두사 아래에서 콘텐츠 주소 지정 Amazon S3 스토리지 출력을 봅니다.

   ```
    FILE_HASH=$(echo $MANIFEST_OBJECT | jq -r .paths[0].hash)
    FILE_PATH=$(echo $MANIFEST_OBJECT | jq -r .paths[0].path)
    aws s3 cp s3://$DEV_FARM_BUCKET/JobAttachments/Data/$FILE_HASH -
   ```

   다음과 같은 출력이 표시됩니다.

   ```
   eaa2df5d34b54be5ac34c56a24a8c237b8487231a607eaf530a04d76b89c9cd3  /tmp/openjd/session-123/assetroot-abc/simple_job/template.yaml
   ```

## 다음 단계
<a name="run-jobs-job-attachments-next"></a>

Deadline Cloud CLI를 사용하여 첨부 파일이 있는 작업을 제출하는 방법을 학습한 후 다음을 탐색할 수 있습니다.
+ [Deadline Cloud로 제출](submit-a-job.md) 작업자 호스트에서 OpenJD 번들을 사용하여 작업을 실행하는 방법을 알아봅니다.
+ [Deadline Cloud의 개발자 팜에 서비스 관리형 플릿 추가](service-managed-fleet.md) Deadline Cloud에서 관리하는 호스트에서 작업을 실행합니다.
+ [Deadline Cloud에서 팜 리소스 정리](cleaning-up.md) -이 자습서에서 사용한 리소스를 종료합니다.

# Deadline Cloud의 개발자 팜에 서비스 관리형 플릿 추가
<a name="service-managed-fleet"></a>

AWS CloudShell 는 더 큰 워크로드를 테스트하기에 충분한 컴퓨팅 용량을 제공하지 않습니다. 또한 여러 작업자 호스트에 작업을 배포하는 작업을 수행하도록 구성되지 않았습니다.

CloudShell을 사용하는 대신 개발자 팜에 Auto Scaling 서비스 관리형 플릿(SMF)을 추가할 수 있습니다. SMF는 대규모 워크로드에 충분한 컴퓨팅 용량을 제공하며 여러 작업자 호스트에 작업을 분산해야 하는 작업을 처리할 수 있습니다.

SMF를 추가하기 전에 Deadline Cloud 팜, 대기열 및 플릿을 설정해야 합니다. [Deadline Cloud 팜 생성](create-a-farm.md)을(를) 참조하세요.

**개발자 팜에 서비스 관리형 플릿을 추가하려면**

1. 첫 번째 AWS CloudShell 탭을 선택한 다음 서비스 관리형 플릿을 생성하고 해당 플릿 ID를에 추가합니다`.bashrc`. 이 작업을 통해 다른 터미널 세션에서 사용할 수 있습니다.

   ```
   FLEET_ROLE_ARN="arn:aws:iam::$(aws sts get-caller-identity \
            --query "Account" --output text):role/${DEV_FARM_NAME}FleetRole"
    aws deadline create-fleet \
        --farm-id $DEV_FARM_ID \
        --display-name "$DEV_FARM_NAME SMF" \
        --role-arn $FLEET_ROLE_ARN \
        --max-worker-count 5 \
        --configuration \
            '{
                "serviceManagedEc2": {
                    "instanceCapabilities": {
                        "vCpuCount": {
                            "min": 2,
                            "max": 4
                        },
                        "memoryMiB": {
                            "min": 512
                        },
                        "osFamily": "linux",
                        "cpuArchitectureType": "x86_64"
                    },
                    "instanceMarketOptions": {
                        "type": "spot"
                    }
                }
            }'
   
    echo "DEV_SMF_ID=$(aws deadline list-fleets \
            --farm-id $DEV_FARM_ID \
            --query "fleets[?displayName=='$DEV_FARM_NAME SMF'].fleetId \
            | [0]" --output text)" >> ~/.bashrc
    source ~/.bashrc
   ```

1. SMF를 대기열에 연결합니다.

   ```
   aws deadline create-queue-fleet-association \
        --farm-id $DEV_FARM_ID \
        --queue-id $DEV_QUEUE_ID \
        --fleet-id $DEV_SMF_ID
   ```

1. 대기열simple\$1file\$1job에 제출합니다. 업로드를 확인하라는 메시지가 표시되면를 입력합니다**y**.

   ```
   deadline bundle submit simple_file_job \
       -p InFile=simple_job/template.yaml \
       -p OutFile=hash-jobattachments.txt
   ```

1. SMF가 올바르게 작동하는지 확인합니다.

   ```
   deadline fleet get
   ```
   + 작업자를 시작하는 데 몇 분 정도 걸릴 수 있습니다. 플릿이 실행 중임을 확인할 때까지 `deadline fleet get` 명령을 반복합니다.
   + 서비스 관리형 플릿`queueFleetAssociationsStatus`의는 입니다`ACTIVE`.
   + SMF는에서 `GROWING`로 `autoScalingStatus` 변경됩니다`STEADY`.

   상태는 다음과 비슷합니다.

   ```
   fleetId: fleet-2cc78e0dd3f04d1db427e7dc1d51ea44
   farmId: farm-63ee8d77cdab4a578b685be8c5561c4a
   displayName: DeveloperFarm SMF
   description: ''
   status: ACTIVE
   autoScalingStatus: STEADY
   targetWorkerCount: 0
   workerCount: 0
   minWorkerCount: 0
   maxWorkerCount: 5
   ```

1. 제출한 작업에 대한 로그를 봅니다. 이 로그는 CloudShell 파일 시스템이 아닌 Amazon CloudWatch Logs의 로그에 저장됩니다.

   ```
    JOB_ID=$(deadline config get defaults.job_id)
    SESSION_ID=$(aws deadline list-sessions \
            --farm-id $DEV_FARM_ID \
            --queue-id $DEV_QUEUE_ID \
            --job-id $JOB_ID \
            --query "sessions[0].sessionId" \
            --output text)
    aws logs tail /aws/deadline/$DEV_FARM_ID/$DEV_QUEUE_ID \
        --log-stream-names $SESSION_ID
   ```

## 다음 단계
<a name="service-managed-fleet-next"></a>

서비스 관리형 플릿을 생성하고 테스트한 후에는 불필요한 요금이 발생하지 않도록 생성한 리소스를 제거해야 합니다.
+ [Deadline Cloud에서 팜 리소스 정리](cleaning-up.md) -이 자습서에서 사용한 리소스를 종료합니다.

# Deadline Cloud에서 팜 리소스 정리
<a name="cleaning-up"></a>

새 워크로드 및 파이프라인 통합을 개발하고 테스트하기 위해이 자습서에서 생성한 Deadline Cloud 개발자 팜을 계속 사용할 수 있습니다. 개발자 팜이 더 이상 필요하지 않은 경우 Amazon CloudWatch Logs에서 팜, 플릿, 대기열, AWS Identity and Access Management (IAM) 역할 및 로그를 포함한 리소스를 삭제할 수 있습니다. 이러한 리소스를 삭제한 후 리소스를 사용하려면 자습서를 다시 시작해야 합니다. 자세한 내용은 [Deadline Cloud 리소스 시작하기](getting-started.md) 단원을 참조하십시오.

**개발자 팜 리소스를 정리하려면**

1. 첫 번째 CloudShell 탭을 선택한 다음 대기열에 대한 모든 대기열-플릿 연결을 중지합니다.

   ```
    FLEETS=$(aws deadline list-queue-fleet-associations \
            --farm-id $DEV_FARM_ID \
            --queue-id $DEV_QUEUE_ID \
            --query "queueFleetAssociations[].fleetId" \
            --output text)
    for FLEET_ID in $FLEETS; do
        aws deadline update-queue-fleet-association \
            --farm-id $DEV_FARM_ID \
            --queue-id $DEV_QUEUE_ID \
            --fleet-id $FLEET_ID \
            --status STOP_SCHEDULING_AND_CANCEL_TASKS
    done
   ```

1. 대기열 플릿 연결을 나열합니다.

   ```
   aws deadline list-queue-fleet-associations \
        --farm-id $DEV_FARM_ID \
        --queue-id $DEV_QUEUE_ID
   ```

   출력이를 보고할 때까지 명령을 다시 실행해야 할 수 있습니다. `"status": "STOPPED"`그런 다음 다음 단계로 진행할 수 있습니다. 이 프로세스는 완료하는 데 몇 분 정도 걸립니다.

   ```
   {
       "queueFleetAssociations": [
           {
               "queueId": "queue-abcdefgh01234567890123456789012id",
               "fleetId": "fleet-abcdefgh01234567890123456789012id",
               "status": "STOPPED",
               "createdAt": "2023-11-21T20:49:19+00:00",
               "createdBy": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/MySessionName",
               "updatedAt": "2023-11-21T20:49:38+00:00",
               "updatedBy": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/MySessionName"
           },
           {
               "queueId": "queue-abcdefgh01234567890123456789012id",
               "fleetId": "fleet-abcdefgh01234567890123456789012id",
               "status": "STOPPED",
               "createdAt": "2023-11-21T20:32:06+00:00",
               "createdBy": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/MySessionName",
               "updatedAt": "2023-11-21T20:49:39+00:00",
               "updatedBy": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/MySessionName"
           }
       ]
   }
   ```

1. 대기열에 대한 모든 대기열-플릿 연결을 삭제합니다.

   ```
   for FLEET_ID in $FLEETS; do
        aws deadline delete-queue-fleet-association \
            --farm-id $DEV_FARM_ID \
            --queue-id $DEV_QUEUE_ID \
            --fleet-id $FLEET_ID
    done
   ```

1. 대기열과 연결된 모든 플릿을 삭제합니다.

   ```
   for FLEET_ID in $FLEETS; do
        aws deadline delete-fleet \
            --farm-id $DEV_FARM_ID \
            --fleet-id $FLEET_ID
    done
   ```

1. 대기열을 삭제합니다.

   ```
   aws deadline delete-queue \
        --farm-id $DEV_FARM_ID \
        --queue-id $DEV_QUEUE_ID
   ```

1. 팜을 삭제합니다.

   ```
   aws deadline delete-farm \
        --farm-id $DEV_FARM_ID
   ```

1. 팜의 다른 AWS 리소스를 삭제합니다.

   1. 플릿 AWS Identity and Access Management (IAM) 역할을 삭제합니다.

      ```
      aws iam delete-role-policy \
           --role-name "${DEV_FARM_NAME}FleetRole" \
           --policy-name WorkerPermissions
      aws iam delete-role \
           --role-name "${DEV_FARM_NAME}FleetRole"
      ```

   1. 대기열 IAM 역할을 삭제합니다.

      ```
      aws iam delete-role-policy \
           --role-name "${DEV_FARM_NAME}QueueRole" \
           --policy-name S3BucketsAccess
      aws iam delete-role \
           --role-name "${DEV_FARM_NAME}QueueRole"
      ```

   1. Amazon CloudWatch Logs 로그 그룹을 삭제합니다. 각 대기열과 플릿에는 고유한 로그 그룹이 있습니다.

      ```
      aws logs delete-log-group \
           --log-group-name "/aws/deadline/$DEV_FARM_ID/$DEV_QUEUE_ID"
      aws logs delete-log-group \
           --log-group-name "/aws/deadline/$DEV_FARM_ID/$DEV_CMF_ID"
      aws logs delete-log-group \
           --log-group-name "/aws/deadline/$DEV_FARM_ID/$DEV_SMF_ID"
      ```