Batch는 Compute Engine 가상 머신(VM) 인스턴스에서 일괄 처리 워크로드를 예약, 큐에 추가, 실행할 수 있게 해주는 완전 관리형 서비스입니다. Batch는 자동으로 리소스를 프로비저닝하고 용량을 관리하므로 일괄 워크로드를 규모에 맞게 실행할 수 있습니다.
Workflows를 사용하면 Workflows 구문을 통해 정의한 순서대로 필요한 서비스를 실행할 수 있습니다.
이 튜토리얼에서는 Batch용 Workflows 커넥터를 사용하여 2개의 Compute Engine VM에서 6개의 태스크를 동시에 실행하는 Batch 작업을 예약하고 실행합니다. Batch와 Workflows를 모두 사용하면 이들이 제공하는 이점을 결합하고 전체 프로세스를 효율적으로 프로비저닝 및 조정할 수 있습니다.
Artifact Registry 저장소 만들기
Docker 컨테이너 이미지를 저장할 저장소를 만듭니다.
콘솔
Google Cloud 콘솔에서 저장소 페이지로 이동합니다.
저장소 만들기를 클릭합니다.
저장소 이름으로 containers를 입력합니다.
형식에서 Docker를 선택합니다.
위치 유형으로 Region을 선택합니다.
리전 목록에서 us-central1을 선택합니다.
만들기를 클릭합니다.
gcloud
다음 명령어를 실행합니다.
gcloud artifacts repositories create containers \
--repository-format=docker \
--location=us-central1
us-central1
리전에 containers
라는 Artifact Registry 저장소를 만들었습니다. 지원되는 리전에 대한 자세한 내용은 Artifact Registry 위치를 참고하세요.
코드 샘플 가져오기
Google Cloud 는 이 튜토리얼의 애플리케이션 소스 코드를 GitHub에 저장합니다. 해당 저장소를 클론하거나 샘플을 다운로드할 수 있습니다.
샘플 앱 저장소를 로컬 머신에 클론합니다.
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
또는
main.zip
파일에 샘플을 다운로드하고 압축을 풉니다.샘플 코드가 있는 디렉토리로 변경합니다.
cd batch-samples/primegen
이제 개발 환경에서 애플리케이션의 소스 코드가 준비되었습니다.
Cloud Build를 사용하여 Docker 이미지 빌드
Dockerfile
에는 Cloud Build를 사용하여 Docker 이미지를 빌드하는 데 필요한 정보가 포함되어 있습니다. 다음 명령어를 실행하여 빌드합니다.
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
PROJECT_ID
를 Google Cloud프로젝트 ID로 바꿉니다.
빌드가 완료되면 다음과 비슷한 출력이 표시됩니다.
DONE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID: a54818cc-5d14-467b-bfda-5fc9590af68c
CREATE_TIME: 2022-07-29T01:48:50+00:00
DURATION: 48S
SOURCE: gs://project-name_cloudbuild/source/1659059329.705219-17aee3a424a94679937a7200fab15bcf.tgz
IMAGES: us-central1-docker.pkg.dev/project-name/containers/primegen-service:v1
STATUS: SUCCESS
Dockerfile을 사용하여 primegen-service
라는 Docker 이미지를 빌드하고 containers
라는 Artifact Registry 저장소에 이미지를 푸시했습니다.
Batch 작업을 예약하고 실행하는 워크플로 배포
다음 워크플로는 2개의 Compute Engine VM에서 Docker 컨테이너를 6개의 태스크로 동시에 실행하는 Batch 작업을 예약하고 실행합니다. 그 결과 Cloud Storage 버킷에 저장된 6개의 소수 배치가 생성됩니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
만들기를 클릭합니다.
새 워크플로의 이름을 입력합니다(예:
batch-workflow
).리전 목록에서 us-central1을 선택합니다.
이전에 만든 서비스 계정을 선택합니다.
다음을 클릭합니다.
워크플로 편집기에서 다음 워크플로 정의를 입력합니다.
YAML
JSON
배포를 클릭합니다.
gcloud
워크플로의 소스 코드 파일을 만듭니다.
touch batch-workflow.JSON_OR_YAML
워크플로 형식에 따라
JSON_OR_YAML
을yaml
또는json
으로 바꿉니다.텍스트 편집기에서 다음 워크플로를 소스 코드 파일에 복사합니다.
YAML
JSON
다음 명령어를 입력하여 워크플로를 배포합니다.
gcloud workflows deploy batch-workflow \ --source=batch-workflow.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
SERVICE_ACCOUNT_NAME
을 이전에 만든 서비스 계정의 이름으로 바꿉니다.
워크플로 실행
워크플로를 실행하면 워크플로와 연결된 현재 워크플로 정의가 실행됩니다.
콘솔
Google Cloud 콘솔에서 Workflows 페이지로 이동합니다.
Workflows 페이지에서 batch-workflow 워크플로를 클릭하여 세부정보 페이지로 이동합니다.
워크플로 세부정보 페이지에서 play_arrow 실행을 클릭합니다.
실행을 다시 클릭합니다.
워크플로를 실행하는 데 몇 분 정도 걸립니다.
출력 창에서 워크플로 결과를 확인합니다.
결과는 다음과 비슷하게 표시됩니다.
{ "bucket": "project-name-job-primegen-TIMESTAMP", "jobId": "job-primegen-TIMESTAMP" }
gcloud
워크플로를 실행합니다.
gcloud workflows run batch-workflow \ --location=us-central1
워크플로를 실행하는 데 몇 분 정도 걸립니다.
장기 실행 상태를 확인할 수 있습니다.
마지막으로 완료된 실행 상태를 가져오려면 다음 명령어를 실행합니다.
gcloud workflows executions describe-last
결과는 다음과 비슷하게 표시됩니다.
name: projects/PROJECT_NUMBER/locations/us-central1/workflows/batch-workflow/executions/EXECUTION_ID result: '{"bucket":"project-name-job-primegen-TIMESTAMP","jobId":"job-primegen-TIMESTAMP"}' startTime: '2022-07-29T16:08:39.725306421Z' state: SUCCEEDED status: currentSteps: - routine: main step: returnResult workflowRevisionId: 000001-9ba
출력 버킷의 객체 나열
Cloud Storage 출력 버킷의 객체를 나열하여 결과가 예상한 대로인지 확인할 수 있습니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
버킷 목록에서 콘텐츠를 볼 버킷의 이름을 클릭합니다.
결과는 총 6개의 파일로, 각 파일에는 소수 10,000개가 일괄적으로 나열되며 다음과 비슷합니다.
primes-1-10000.txt primes-10001-20000.txt primes-20001-30000.txt primes-30001-40000.txt primes-40001-50000.txt primes-50001-60000.txt
gcloud
출력 버킷 이름을 검색합니다.
gcloud storage ls
출력은 다음과 비슷합니다.
gs://PROJECT_ID-job-primegen-TIMESTAMP/
출력 버킷의 객체 나열
gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive
TIMESTAMP
을 이전 명령어에서 반환된 타임스탬프로 바꿉니다.출력은 총 6개의 파일로, 각 파일에는 소수 10,000개가 일괄적으로 나열되며 다음과 비슷합니다.
gs://project-name-job-primegen-TIMESTAMP/primes-1-10000.txt gs://project-name-job-primegen-TIMESTAMP/primes-10001-20000.txt gs://project-name-job-primegen-TIMESTAMP/primes-20001-30000.txt gs://project-name-job-primegen-TIMESTAMP/primes-30001-40000.txt gs://project-name-job-primegen-TIMESTAMP/primes-40001-50000.txt gs://project-name-job-primegen-TIMESTAMP/primes-50001-60000.txt