블루프린트 레이아웃 스크립트 생성 - AWS Glue

블루프린트 레이아웃 스크립트 생성

블루프린트 레이아웃 스크립트에는 워크플로에서 엔터티를 생성하는 함수가 포함되어야 합니다. 원하는 대로 이 함수의 이름을 지정할 수 있습니다. AWS Glue에서는 구성 파일을 사용하여 함수의 정규화된 이름을 확인합니다.

레이아웃 함수는 다음을 수행합니다.

  • (선택 사항) Job 클래스를 인스턴스화하여 Job 객체를 생성하고 CommandRole 등의 인수를 전달합니다. AWS Glue 콘솔 또는 API를 사용하여 작업을 생성하는 경우 지정할 작업 속성입니다.

  • (선택 사항) Crawler 클래스를 인스턴스화하여 Crawler 객체를 생성하고 이름, 역할 및 대상 인수를 전달합니다.

  • 객체(워크플로 엔터티) 간의 종속성을 나타내려면 DependsOnWaitForDependencies 추가 인수를 Job()Crawler()에 전달합니다. 이러한 인수는 이 섹션의 뒷부분에서 설명합니다.

  • Workflow 클래스를 인스턴스화하여 AWS Glue에 반환되는 워크플로 객체를 생성하고 Name 인수, Entities 인수, 선택적 OnSchedule 인수를 전달합니다. 이 Entities 인수는 워크플로에 포함할 모든 작업 및 크롤러를 지정합니다. Entities 객체를 구성하는 방법을 보려면 이 섹션의 뒷부분에 나오는 샘플 프로젝트를 참조하세요.

  • Workflow 객체를 반환합니다.

Job, CrawlerWorkflow 클래스의 정의는 AWS Glue 블루프린트 클래스 참조 섹션을 참조하세요.

레이아웃 함수에 사용할 수 있는 입력 인수는 다음과 같습니다.

인수 설명
user_params 블루프린트 파라미터 이름 및 값의 Python 딕셔너리. 자세한 내용은 블루프린트 파라미터 지정 단원을 참조하십시오.
system_params 두 가지 속성(regionaccountId)을 포함하는 Python 딕셔너리.

다음은 Layout.py라는 파일의 샘플 레이아웃 생성기 스크립트입니다.

import argparse import sys import os import json from awsglue.blueprint.workflow import * from awsglue.blueprint.job import * from awsglue.blueprint.crawler import * def generate_layout(user_params, system_params): etl_job = Job(Name="{}_etl_job".format(user_params['WorkflowName']), Command={ "Name": "glueetl", "ScriptLocation": user_params['ScriptLocation'], "PythonVersion": "2" }, Role=user_params['PassRole']) post_process_job = Job(Name="{}_post_process".format(user_params['WorkflowName']), Command={ "Name": "pythonshell", "ScriptLocation": user_params['ScriptLocation'], "PythonVersion": "2" }, Role=user_params['PassRole'], DependsOn={ etl_job: "SUCCEEDED" }, WaitForDependencies="AND") sample_workflow = Workflow(Name=user_params['WorkflowName'], Entities=Entities(Jobs=[etl_job, post_process_job])) return sample_workflow

샘플 스크립트는 필요한 Blueprint 라이브러리를 가져오고 2개의 작업으로 워크플로를 생성하는 generate_layout 함수를 포함합니다. 이것은 매우 간단한 스크립트입니다. 보다 복잡한 스크립트는 추가 로직 및 파라미터를 사용하여 많은 작업과 크롤러 또는 다양한 수의 작업과 크롤러가 있는 워크플로를 생성할 수 있습니다.

DependsOn 인수 사용

DependsOn 인수는 이 엔터티가 워크플로 내의 다른 엔터티에 대해 갖는 종속성의 딕셔너리 표현입니다. 형식은 다음과 같습니다.

DependsOn = {dependency1 : state, dependency2 : state, ...}

이 딕셔너리의 키는 엔터티의 이름이 아닌 객체 참조를 나타내는 반면 값은 감시할 상태에 해당하는 문자열입니다. AWS Glue는 적절한 트리거를 유추합니다. 유효한 상태는 조건 구조를 참조하세요.

예를 들어 작업은 크롤러의 성공적인 완료에 따라 달라질 수 있습니다. 다음과 같이 이름이 crawler2인 크롤러 객체를 정의하는 경우

crawler2 = Crawler(Name="my_crawler", ...)

그러면 crawler2에 종속된 객체에는 다음과 같은 생성자 인수가 포함됩니다.

DependsOn = {crawler2 : "SUCCEEDED"}

예:

job1 = Job(Name="Job1", ..., DependsOn = {crawler2 : "SUCCEEDED", ...})

엔터티에 대해 DependsOn이 생략된 경우 해당 엔터티는 워크플로 시작 트리거에 따라 달라집니다.

WaitForDependencies 인수 사용

WaitForDependencies 인수는 작업 또는 크롤러 엔터티가 종속된 모든 엔터티가 완료될 때까지 또는 하나라도완료될 때까지 기다려야 하는지 여부를 정의합니다.

허용되는 값은 "AND" 또는 "ANY"입니다.

OnSchedule 인수 사용

Workflow 클래스 생성자의 OnSchedule 인수는 워크플로에 대한 시작 트리거 정의를 정의하는 cron 표현식입니다.

이 인수가 지정되면 AWS Glue는 해당 일정으로 일정 트리거를 생성합니다. 지정되지 않은 경우 워크플로의 시작 트리거는 온디맨드 트리거입니다.