AWS Glue의 블루프린트 오류 해결 - AWS Glue

AWS Glue의 블루프린트 오류 해결

AWS Glue 블루프린트를 사용할 때 오류가 발생하면 다음 해결 방법에 따라 문제의 원인을 찾아 해결할 수 있습니다.

오류: PySpark 모듈 누락

AWS Glue에서 ["레이아웃 생성기 함수 ModuleNotFoundError를 실행하는 동안 알 수 없는 오류 발생: 'pyspark'라는 모듈 없음(Unknown error executing layout generator function ModuleNotFoundError: No module named 'pyspark')"]이라는 오류를 반환합니다.

블루프린트 아카이브의 압축을 풀면 다음 중 하나와 같을 수 있습니다.

$ unzip compaction.zip Archive: compaction.zip creating: compaction/ inflating: compaction/blueprint.cfg inflating: compaction/layout.py inflating: compaction/README.md inflating: compaction/compaction.py $ unzip compaction.zip Archive: compaction.zip inflating: blueprint.cfg inflating: compaction.py inflating: layout.py inflating: README.md

첫 번째 사례에서는 블루프린트와 관련된 모든 파일이 compaction이라는 폴더 아래에 배치된 다음 compaction.zip이라는 zip 파일로 변환되었습니다.

두 번째 사례에서는 블루프린트에 필요한 모든 파일이 폴더에 포함되지 않고 zip 파일인 compaction.zip 아래에 루트 파일로 추가되었습니다.

위 포맷 중 하나로 파일을 생성할 수 있습니다. 그러나 blueprint.cfg에 레이아웃을 생성하는 스크립트의 함수 이름에 대한 올바른 경로가 있는지 확인합니다.

사례 1: 다음과 같이 blueprint.cfglayoutGenerator가 있어야 합니다.

layoutGenerator": "compaction.layout.generate_layout"

사례 2: 다음과 같이 blueprint.cfglayoutGenerator가 있어야 합니다.

layoutGenerator": "layout.generate_layout"

이 경로가 올바르게 포함되지 않은 경우 표시된 대로 오류가 발생할 수 있습니다. 예를 들어 사례 2와 같은 폴더 구조를 가지고 있고 사례 1과 같이 layoutGenerator가 표시되어 있다면 위의 오류가 발생할 수 있습니다.

오류: 블루프린트 Config 파일 누락

AWS Glue에서 ["레이아웃 생성기 함수 FileNotFoundError를 실행하는 동안 알 수 없는 오류 발생: [Errno 2] 해당 파일 또는 디렉터리 없음: '/tmp/compaction/blueprint.cfg'(Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory: '/tmp/compaction/blueprint.cfg')"]라는 오류를 반환합니다.

blueprint.cfg는 ZIP 아카이브의 루트 수준이나 ZIP 아카이브와 같은 이름의 폴더 내에 있어야 합니다.

블루프린트 ZIP 아카이브를 추출할 때 blueprint.cfg가 다음 경로 중 하나에 있어야 합니다. 다음 경로 중 하나에서 없으면 위의 오류가 발생할 수 있습니다.

$ unzip compaction.zip Archive: compaction.zip creating: compaction/ inflating: compaction/blueprint.cfg $ unzip compaction.zip Archive: compaction.zip inflating: blueprint.cfg

오류: 가져온 파일 누락

AWS Glue에서 ["레이아웃 생성기 함수 FileNotFoundError를 실행하는 동안 알 수 없는 오류 발생: [Errno 2] 해당 파일 또는 디렉터리 없음: * *'demo-project/foo.py'(Unknown error executing layout generator function FileNotFoundError: [Errno 2] No such file or directory: * *'demo-project/foo.py')"]이라는 오류를 반환합니다.

레이아웃 생성 스크립트에 다른 파일을 읽을 수 있는 기능이 있는 경우 가져올 파일의 전체 경로를 지정해야 합니다. 예를 들어 Conversion.py 스크립트는 Layout.py에서 참조될 수 있습니다. 자세한 정보는 샘플 블루프린트 프로젝트를 참조하세요.

오류: 리소스에서 iamPassRole을 수행할 권한이 없음

AWS Glue에서 ["사용자: arn:aws:sts::123456789012:assumed-role/AWSGlueServiceRole/GlueSession에게 리소스 arn:aws:iam::123456789012:role/AWSGlueServiceRole에서 iam:PassRole을 수행할 권한이 부여되지 않음(User: arn:aws:sts::123456789012:assumed-role/AWSGlueServiceRole/GlueSession is not authorized to perform: iam:PassRole on resource: arn:aws:iam::123456789012:role/AWSGlueServiceRole)"]이라는 오류를 반환합니다.

워크플로의 작업 및 크롤러가 블루프린트에서 워크플로를 생성하기 위해 전달된 역할과 동일한 역할을 수임하는 경우 블루프린트 역할 자체에 iam:PassRole 권한이 포함되어야 합니다.

워크플로의 작업 및 크롤러가 블루프린트에서 워크플로 엔터티를 생성하기 위해 전달된 역할과 다른 역할을 수임하는 경우 블루프린트 역할에 블루프린트 역할 대신 수임한 다른 역할에 대한 iam:PassRole 권한이 포함되어야 합니다.

자세한 정보는 블루프린트 역할에 대한 권한을 참조하세요.

오류: 잘못된 cron 일정

AWS Glue에서 ["일정 cron(0 0 * * * *)이 잘못되었습니다.(The schedule cron(0 0 * * * *) is invalid.)"]라는 오류를 반환합니다.

올바른 cron 표현식을 제공합니다. 자세한 내용은 크롤러와 작업을 위한 시간 기반 일정을 참조하십시오.

오류: 같은 이름의 트리거가 이미 있음

AWS Glue에서 ["오류: 같은 이름의 트리거가 이미 있음(Error: a trigger with the same name already exists)"]이라는 오류를 반환합니다.

블루프린트에서는 워크플로 생성을 위해 레이아웃 스크립트에서 트리거를 정의할 필요가 없습니다. 트리거 생성은 두 작업 간에 정의된 종속성을 기반으로 블루프린트 라이브러리에서 관리합니다.

트리거의 이름은 다음과 같습니다.

  • 워크플로의 시작 트리거의 경우 이름은 <workflow_name>_starting_trigger입니다.

  • 하나 또는 여러 업스트림 노드의 완료에 종속되는 워크플로의 노드(작업/크롤러)의 경우. AWS Glue는 이름이 <workflow_name>_<node_name>_trigger인 트리거를 정의합니다.

이 오류는 동일한 이름의 트리거가 이미 존재함을 의미합니다. 기존 트리거를 삭제하고 워크플로 생성을 다시 실행할 수 있습니다.

참고

워크플로를 삭제해도 워크플로 내의 노드는 삭제되지 않습니다. 워크플로가 삭제되더라도 트리거가 남아 있을 수 있습니다. 이로 인해 '워크플로가 이미 존재함' 오류가 발생하지 않을 수 있지만 워크플로를 생성하고 삭제한 다음 동일한 블루프린트에서 동일한 이름으로 다시 생성하려고 하는 경우 '트리거가 이미 존재함' 오류가 발생할 수 있습니다.

오류: 이름이 foo인 워크플로가 이미 있습니다.

워크플로 이름은 고유해야 합니다. 다른 이름으로 시도합니다.

오류: 지정된 layoutGenerator 경로에서 모듈을 찾을 수 없음

AWS Glue에서 "레이아웃 생성기 함수 ModuleNotFoundError를 실행하는 동안 알 수 없는 오류 발생: 'crawl_s3_locations'라는 모듈 없음(Unknown error executing layout generator function ModuleNotFoundError: No module named 'crawl_s3_locations')"이라는 오류를 반환합니다.

layoutGenerator": "crawl_s3_locations.layout.generate_layout"

예를 들어 위의 layoutGenerator 경로가 있는 경우 블루프린트 아카이브의 압축을 풀면 다음과 같아야 합니다.

$ unzip crawl_s3_locations.zip Archive: crawl_s3_locations.zip creating: crawl_s3_locations/ inflating: crawl_s3_locations/blueprint.cfg inflating: crawl_s3_locations/layout.py inflating: crawl_s3_locations/README.md

아카이브의 압축을 풀 때 블루프린트 아카이브가 다음과 같으면 위와 같은 오류가 발생할 수 있습니다.

$ unzip crawl_s3_locations.zip Archive: crawl_s3_locations.zip inflating: blueprint.cfg inflating: layout.py inflating: README.md

crawl_s3_locations라는 폴더가 없는 것을 볼 수 있으며 layoutGenerator 경로가 모듈 crawl_s3_locations를 통해 레이아웃 파일을 참조할 때 위의 오류가 발생할 수 있습니다.

오류: 연결 필드에 검증 오류

AWS Glue에서 "레이아웃 생성기 함수 TypeError를 실행하는 동안 알 수 없는 오류 발생: 키 연결에 대한 값 ['foo']는 <class 'dict'> 유형이어야 함!(Unknown error executing layout generator function TypeError: Value ['foo'] for key Connections should be of type <class 'dict'>!)"라는 오류가 발생했습니다.

검증 오류입니다. Job 클래스의 Connections 필드에 딕셔너리가 필요하고 대신 값 목록이 제공되어 오류가 발생합니다.

User input was list of values Connections= ['string'] Should be a dict like the following Connections*=*{'Connections': ['string']}

블루프린트에서 워크플로를 생성하는 동안 이러한 런타임 오류를 방지하려면 블루프린트 테스트에 설명된 대로 워크플로, 작업 및 크롤러 정의를 검증할 수 있습니다.

레이아웃 스크립트에서 AWS Glue 작업, 크롤러 및 워크플로를 정의하려면 AWS Glue 블루프린트 클래스 참조의 구문을 참조하세요.