

# AWS Glue 문제 해결
<a name="troubleshooting-glue"></a>

 AWS Glue 작업 시 문제가 발생한다면 이 섹션의 주제를 참조하세요.


|  | 
| --- |
|  AWS Glue의 Apache Spark 문제 해결은 Spark 작업 문제를 진단하고 해결하기 위한 AI 기반 지원을 제공하는 [AWS Glue에서 Apache Spark용 생성형 AI 문제 해결](https://docs.aws.amazon.com/glue/latest/dg/troubleshoot-spark.html)을 참조하세요. 이제 AWS Glue, Amazon EMR-EC2, Amazon EMR Serverless, Amazon SageMaker AI 노트북을 포함한 모든 주요 배포 모드를 지원하는 AI 기반 문제 해결 에이전트로 Apache Spark 문제 해결을 혁신하세요. 이 강력한 에이전트는 자연어 상호 작용, 실시간 워크로드 분석, 스마트 코드 권장 사항을 원활한 경험으로 결합하여 복잡한 디버깅 프로세스를 제거합니다. 구현 세부 정보는 [Amazon EMR용 Apache Spark 문제 해결 에이전트란 무엇인가요?](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/spark-troubleshoot.html)를 참조하세요.  | 

**Topics**
+ [AWS Glue 문제 해결 정보 모으기](troubleshooting-contact-support.md)
+ [Glue 일반 설정 오류 문제 해결](glue-troubleshooting-errors.md)
+ [크롤러가 Lake Formation 권한을 사용하는 경우 발생하는 크롤러 오류](error-crawler-config-lf.md)
+ [로그에서 AWS Glue for Ray 오류 해결](troubleshooting-ray.md)
+ [AWS Glue 기계 학습 예외 사항](exceptions-machine-learning.md)
+ [AWS Glue 할당량](troubleshooting-service-limits.md)

# AWS Glue 문제 해결 정보 모으기
<a name="troubleshooting-contact-support"></a>

AWS Glue의 오류나 예상 밖의 행동이 나타나고 AWS Support에 연결할 필요가 있다면 먼저 실패한 작업과 관련된 이름, ID 및 로그에 대한 정보를 모아야 합니다. 이 정보가 있으면 지원가 해당 문제의 해결을 지원할 수 있습니다.

*계정 ID*와 함께 각 실패 유형에 따라 다음 정보를 모으십시오.

**크롤러가 실패하면 다음 정보를 모으십시오.**  
+ 크롤러 이름

  크롤러 작업의 로그는 `/aws-glue/crawlers` 하에 CloudWatch Logs에 위치합니다.

**테스트 연결이 되지 않으면 다음 정보를 모으십시오.**  
+ 연결 이름
+ 연결 ID
+ `jdbc:protocol://host:port/database-name` 형식의 JDBC 연결 문자열.

  테스트 연결의 로그는 ` /aws-glue/testconnection` 하에 CloudWatch Logs에 위치합니다.

**작업이 실패하면 다음 정보를 모으십시오.**  
+ 작업 이름 
+ `jr_xxxxx` 형식의 작업 실행 ID.

  작업 실행의 로그는 ` /aws-glue/jobs` 하에 CloudWatch Logs에 위치합니다.

# Glue 일반 설정 오류 문제 해결
<a name="glue-troubleshooting-errors"></a>

AWS Glue에서 오류가 발생하면 다음 정보를 사용하여 문제의 원인을 찾아 수정할 수 있습니다.

**참고**  
 AWS Glue GitHub 리포지토리는 [AWS Glue FAQ](https://github.com/aws-samples/aws-glue-samples/blob/master/FAQ_and_How_to.md)에 추가적인 문제 해결 지침을 포함합니다.

**Topics**
+ [오류: 사용 가능하지 않는 리소스](#error-resource-unavailable)
+ [오류: VPC에서 서브넷 ID용 S3 엔드포인트 또는 NAT 게이트웨이를 찾을 수 없습니다.](#error-s3-subnet-vpc-NAT-configuration)
+ [오류: 보안 그룹의 인바운드 규칙이 필요합니다.](#error-inbound-self-reference-rule)
+ [오류: 보안 그룹의 아웃바운드 규칙이 필요합니다.](#error-outbound-self-reference-rule)
+ [오류: 작업 실행에 실패했습니다. 그 이유는 전달된 역할에는 AWS Glue 서비스에 대한 역할 수임 권한이 주어져야 하기 때문입니다.](#error-assume-role-user-policy)
+ [오류: DescribeVpcEndpoints 작업이 승인되지 않았습니다. VPC ID vpc-id를 검증할 수 없습니다.](#error-DescribeVpcEndpoints-permission)
+ [오류: DescribeRouteTables 작업이 승인되지 않았습니다. VPC ID: vpc-id에서 서브넷 ID: 서브넷-id를 검증할 수 없습니다.](#error-DescribeRouteTables-permission)
+ [오류: ec2:DescribeSubnets 호출이 실패했습니다.](#error-DescribeSubnets-permission)
+ [오류: ec2:DescribeSecurityGroups 호출이 실패했습니다.](#error-DescribeSecurityGroups-permission)
+ [오류: AZ용 서브넷을 찾을 수 없습니다.](#error-az-not-available)
+ [오류: JDBC 대상으로 작성할 경우의 작업 실행 예외](#error-job-run-jdbc-target)
+ [오류: Amazon S3: 객체의 스토리지 클래스에 대해 작업이 유효하지 않습니다.](#error-s3-operation-not-valid)
+ [오류: Amazon S3 시간 제한](#error-s3-timeout)
+ [오류: Amazon S3 액세스가 거부되었습니다.](#error-s3-access-denied)
+ [오류: Amazon S3 액세스 키 ID가 없습니다.](#error-s3-accesskeyid-not-found)
+ [오류: `s3a://` URI를 사용해 Amazon S3에 액세스할 때 작업 실행이 실패합니다.](#error-s3a-uri-directory-listing)
+ [오류: Amazon S3 서비스 토큰이 만료되었습니다.](#error-s3-service-token-expired)
+ [오류: 네트워크 인터페이스용 프라이빗 DNS를 찾을 수 없습니다.](#error-no-private-DNS)
+ [오류: 개발 엔드포인트 프로비저닝이 실패했습니다.](#error-development-endpoint-failed)
+ [오류: 노트북 서버 생성이 실패했습니다.](#error-notebook-server-ec2-instance-profile)
+ [오류: 로컬 노트북 시작이 실패했습니다.](#error-local-notebook-fails-to-start)
+ [오류: 크롤러 실행이 실패했습니다.](#error-running-crawler-failed)
+ [오류: 파티션이 업데이트되지 않았습니다.](#error-update-from-job-partitions)
+ [오류: 버전 불일치로 인해 작업 북마크 업데이트 실패](#error-job-bookmarks-limitation)
+ [오류: 작업 북마크가 사용 설정된 경우 작업이 데이터를 재처리합니다.](#error-job-bookmarks-reprocess-data)
+ [오류: AWS Glue에서 VPC 간 장애 조치 동작](#vpc-failover-behavior-error-10)

## 오류: 사용 가능하지 않는 리소스
<a name="error-resource-unavailable"></a>

AWS Glue가 리소스가 사용 가능하지 않다는 메시지를 반환하면 오류 메시지 또는 로그를 보고 해당 문제에 대한 자세한 내용을 확인할 수 있습니다. 다음 작업은 문제 해결을 위한 일반적인 방법을 설명합니다.
+ 사용할 연결과 개발 엔드포인트의 경우, 탄력적 네트워크 인터페이스를 벗어나지 않은 클러스터를 확인합니다.

## 오류: VPC에서 서브넷 ID용 S3 엔드포인트 또는 NAT 게이트웨이를 찾을 수 없습니다.
<a name="error-s3-subnet-vpc-NAT-configuration"></a>

메시지에서 서브넷 ID 및 VPC ID를 선택하여 문제를 진단하십시오.
+ AWS Glue에 필요한 Amazon S3 VPC 엔드포인트 설정이 있는지 확인합니다. 또한, NAT 게이트웨이가 구성 중 일부라면 확인하시오. 자세한 내용은 [Amazon S3용 Amazon VPC 엔드포인트](vpc-endpoints-s3.md) 섹션을 참조하세요.

## 오류: 보안 그룹의 인바운드 규칙이 필요합니다.
<a name="error-inbound-self-reference-rule"></a>

적어도 하나 이상의 보안 그룹은 모든 내보내기 포트를 열어야 합니다. 트래픽을 제한하기 위해서 인바운드 규칙의 소스 보안 그룹은 동일한 보안 그룹으로 제한될 수 있습니다.
+ 사용하는 연결의 경우, 자기 참조적 인바운드 규칙을 위한 보안 그룹을 확인하십시오. 자세한 내용은 [데이터 스토어에 대한 네트워크 액세스 설정](start-connecting.md) 섹션을 참조하세요.
+ 개발 엔드포인트를 사용 중이면 자기 참조적 인바운드 규칙을 위한 보안 그룹을 확인하십시오. 자세한 내용은 [데이터 스토어에 대한 네트워크 액세스 설정](start-connecting.md) 섹션을 참조하세요.

## 오류: 보안 그룹의 아웃바운드 규칙이 필요합니다.
<a name="error-outbound-self-reference-rule"></a>

적어도 하나 이상의 보안 그룹은 모든 들여오기 포트를 열어야 합니다. 트래픽을 제한하기 위해서 아웃바운드 규칙의 소스 보안 그룹은 동일한 보안 그룹으로 제한될 수 있습니다.
+ 사용하는 연결의 경우, 자기 참조적 아웃바운드 규칙을 위한 보안 그룹을 확인하십시오. 자세한 내용은 [데이터 스토어에 대한 네트워크 액세스 설정](start-connecting.md) 섹션을 참조하세요.
+ 개발 엔드포인트를 사용 중이면 자기 참조적 아웃바운드 규칙을 위한 보안 그룹을 확인하십시오. 자세한 내용은 [데이터 스토어에 대한 네트워크 액세스 설정](start-connecting.md) 섹션을 참조하세요.

## 오류: 작업 실행에 실패했습니다. 그 이유는 전달된 역할에는 AWS Glue 서비스에 대한 역할 수임 권한이 주어져야 하기 때문입니다.
<a name="error-assume-role-user-policy"></a>

작업을 정의하는 사용자는 AWS Glue에 대한 `iam:PassRole` 권한이 있어야 합니다.
+ 사용자가 AWS Glue 작업을 만들면, 해당 사용자 역할에 AWS Glue에 대한 `iam:PassRole`이 포함된 정책이 있는지 확인하십시오. 자세한 내용은 [3단계: AWS Glue에 액세스하는 사용자 또는 그룹에 정책 연결](attach-policy-iam-user.md) 섹션을 참조하세요.

## 오류: DescribeVpcEndpoints 작업이 승인되지 않았습니다. VPC ID vpc-id를 검증할 수 없습니다.
<a name="error-DescribeVpcEndpoints-permission"></a>
+ `ec2:DescribeVpcEndpoints` 권한에 대한 정책이 AWS Glue에 전달되었는지 확인합니다.

## 오류: DescribeRouteTables 작업이 승인되지 않았습니다. VPC ID: vpc-id에서 서브넷 ID: 서브넷-id를 검증할 수 없습니다.
<a name="error-DescribeRouteTables-permission"></a>
+ `ec2:DescribeRouteTables` 권한에 대한 정책이 AWS Glue에 전달되었는지 확인합니다.

## 오류: ec2:DescribeSubnets 호출이 실패했습니다.
<a name="error-DescribeSubnets-permission"></a>
+ `ec2:DescribeSubnets` 권한에 대한 정책이 AWS Glue에 전달되었는지 확인합니다.

## 오류: ec2:DescribeSecurityGroups 호출이 실패했습니다.
<a name="error-DescribeSecurityGroups-permission"></a>
+ ` ec2:DescribeSecurityGroups` 권한에 대한 정책이 AWS Glue에 전달되었는지 확인합니다.

## 오류: AZ용 서브넷을 찾을 수 없습니다.
<a name="error-az-not-available"></a>
+ 이 가용 영역에서는 AWS Glue를 사용할 수 없습니다. 메시지에 있는 지정된 영역 중 새로운 서브넷을 다른 가용 영역에서 만들고 사용합니다.

## 오류: JDBC 대상으로 작성할 경우의 작업 실행 예외
<a name="error-job-run-jdbc-target"></a>

JDBC 대상으로 작성하는 작업을 실행하고 있다면 작업은 다음과 같은 상황에서 오류가 발생합니다.
+ 작업이 Microsoft SQL Server 테이블에 쓴다면 테이블은 `Boolean` 유형으로 정의된 열을 가지고 있고 SQL 서버 데이터베이스에서 미리 정의되어야 합니다. [**데이터 대상에 테이블 생성(Create tables in your data target)**] 옵션이 있는 SQL Server 대상을 사용하여 AWS Glue 콘솔에서 작업을 정의하는 경우 소스 열을 데이터 유형이 `Boolean`인 대상 열에 매핑하지 마세요. 작업이 실행되면 오류가 발생할 수 있습니다.

  다음을 수행하여 오류를 피합니다.
  + [**Boolean(부울)**]을 사용하여 기존 테이블을 선택합니다.
  + `ApplyMapping` 변환을 편집하고 소스의 [**Boolean(부울)**] 열을 대상의 숫자 또는 문자열로 매핑합니다.
  + `ApplyMapping` 변환을 편집하여 소스의 [**Boolean(부울)**] 열을 제거합니다.
+ 작업이 Oracle 테이블에 쓴다면 Oracle 객체 이름 길이를 조정해야 합니다. Oracle의 몇 가지 버전에서는 최대 분류자 길이는 30바이트 또는 128바이트로 제한됩니다. 이 제한은 Oracle 대상 데이터 스토어의 테이블 이름과 열 이름에 영향을 줍니다.

  다음을 수행하여 오류를 피합니다.
  + 버전의 제한 범위 안에서 Oracle 대상 테이블 이름을 짓습니다.
  + 기본 열 이름은 데이터의 필드 이름에서 생성됩니다. 열 이름이 한도보다 긴 경우, `ApplyMapping` 또는 `RenameField` 변환을 사용하여 열 이름이 한도를 넘지 않도록 변경합니다.

## 오류: Amazon S3: 객체의 스토리지 클래스에 대해 작업이 유효하지 않습니다.
<a name="error-s3-operation-not-valid"></a>

AWS Glue에서 이 오류가 반환되면 AWS Glue 작업이 Amazon S3 스토리지 클래스 계층에 걸쳐 파티션이 있는 테이블에서 데이터를 읽고 있는 것일 수 있습니다.
+ 스토리지 클래스 제외를 사용하면 해당 스토리지 클래스 계층에서 파티션이 포함된 테이블에 대해 AWS Glue 작업을 실행할 수 있습니다. 제외하지 않으면 이러한 계층에서 데이터를 읽는 작업은 `AmazonS3Exception: The operation is not valid for the object's storage class` 오류와 함께 실패합니다.

  자세한 내용은 [Amazon S3 스토리지 클래스 제외](aws-glue-programming-etl-storage-classes.md) 섹션을 참조하세요.

## 오류: Amazon S3 시간 제한
<a name="error-s3-timeout"></a>

AWS Glue가 연결 제한 시간 오류를 반환한다는 의미는 다른 AWS 리전에서 Amazon S3 버킷으로 액세스를 시도한다는 것입니다.
+ Amazon S3 VPC 엔드포인트는 AWS 리전 내의 버킷으로만 트래픽을 라우팅할 수 있습니다. 버킷을 다른 지역으로 연결할 필요가 있다면 차선책으로 NAT 게이트웨이를 사용합니다. 자세한 내용은 [NAT 게이트웨이](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) 단원을 참조하세요.

## 오류: Amazon S3 액세스가 거부되었습니다.
<a name="error-s3-access-denied"></a>

AWS Glue가 액세스 거부 오류를 Amazon S3 버킷 또는 객체로 반환한다면 제공된 IAM 역할에 데이터 스토어에 대한 권한이 있는 정책이 없다는 뜻입니다.
+ ETL 작업은 소스 또는 대상으로 사용되는 Amazon S3 데이터 스토어로 액세스할 수 있어야 합니다. 크롤러는 크롤하는 Amazon S3 데이터 스토어로 액세스할 수 있어야 합니다. 자세한 내용은 [2단계: AWS Glue에 대한 IAM 역할 생성](create-an-iam-role.md) 섹션을 참조하세요.

## 오류: Amazon S3 액세스 키 ID가 없습니다.
<a name="error-s3-accesskeyid-not-found"></a>

AWS Glue가 작업을 실행하고 있을 때 액세스 키 ID가 존재하지 않는다는 오류를 반환한다면 다음 중 하나가 원인일 수 있습니다.
+ ETL 작업은 IAM 역할을 사용하여 데이터 스토어로 액세스합니다. 작업 시작 전에 작업용 IAM 역할이 삭제된 것은 아닌지 확인합니다.
+ IAM 역할은 데이터 스토어에 대한 액세스 권한을 가지고 있습니다. `s3:ListBucket`이 포함된 모든 연결된 Amazon S3 정책이 올바른지 확인합니다.

## 오류: `s3a://` URI를 사용해 Amazon S3에 액세스할 때 작업 실행이 실패합니다.
<a name="error-s3a-uri-directory-listing"></a>

작업이 *핸들러 클래스로 XML 문서 파싱에 실패 *같은 오류를 반환한다면 ` s3a://` URI를 사용하여 수백 개의 파일을 기록하는 데 실패했기 때문입니다. 대신에 `s3://` URI를 사용하여 데이터 스토어에 액세스합니다. 다음 예외 흔적은 다음과 같은 오류를 찾아봐야 합니다.

```
1.	com.amazonaws.SdkClientException: Failed to parse XML document with handler class com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser$ListBucketHandler
2.	at com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser.parseXmlInputStream(XmlResponsesSaxParser.java:161)
3.	at com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser.parseListBucketObjectsResponse(XmlResponsesSaxParser.java:317)
4.	at com.amazonaws.services.s3.model.transform.Unmarshallers$ListObjectsUnmarshaller.unmarshall(Unmarshallers.java:70)
5.	at com.amazonaws.services.s3.model.transform.Unmarshallers$ListObjectsUnmarshaller.unmarshall(Unmarshallers.java:59)
6.	at com.amazonaws.services.s3.internal.S3XmlResponseHandler.handle(S3XmlResponseHandler.java:62)
7.	at com.amazonaws.services.s3.internal.S3XmlResponseHandler.handle(S3XmlResponseHandler.java:31)
8.	at com.amazonaws.http.response.AwsResponseHandlerAdapter.handle(AwsResponseHandlerAdapter.java:70)
9.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleResponse(AmazonHttpClient.java:1554)
10.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1272)
11.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1056)
12.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
13.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
14.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
15.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
16.	at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
17.	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
18.	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4325)
19.	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4272)
20.	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4266)
21.	at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:834)
22.	at org.apache.hadoop.fs.s3a.S3AFileSystem.getFileStatus(S3AFileSystem.java:971)
23.	at org.apache.hadoop.fs.s3a.S3AFileSystem.deleteUnnecessaryFakeDirectories(S3AFileSystem.java:1155)
24.	at org.apache.hadoop.fs.s3a.S3AFileSystem.finishedWrite(S3AFileSystem.java:1144)
25.	at org.apache.hadoop.fs.s3a.S3AOutputStream.close(S3AOutputStream.java:142)
26.	at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.close(FSDataOutputStream.java:74)
27.	at org.apache.hadoop.fs.FSDataOutputStream.close(FSDataOutputStream.java:108)
28.	at org.apache.parquet.hadoop.ParquetFileWriter.end(ParquetFileWriter.java:467)
29.	at org.apache.parquet.hadoop.InternalParquetRecordWriter.close(InternalParquetRecordWriter.java:117)
30.	at org.apache.parquet.hadoop.ParquetRecordWriter.close(ParquetRecordWriter.java:112)
31.	at org.apache.spark.sql.execution.datasources.parquet.ParquetOutputWriter.close(ParquetOutputWriter.scala:44)
32.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$SingleDirectoryWriteTask.releaseResources(FileFormatWriter.scala:252)
33.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask$3.apply(FileFormatWriter.scala:191)
34.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask$3.apply(FileFormatWriter.scala:188)
35.	at org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1341)
36.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$.org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask(FileFormatWriter.scala:193)
37.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$write$1$$anonfun$3.apply(FileFormatWriter.scala:129)
38.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$write$1$$anonfun$3.apply(FileFormatWriter.scala:128)
39.	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
40.	at org.apache.spark.scheduler.Task.run(Task.scala:99)
41.	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282)
42.	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
43.	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
44.	at java.lang.Thread.run(Thread.java:748)
```

## 오류: Amazon S3 서비스 토큰이 만료되었습니다.
<a name="error-s3-service-token-expired"></a>

Amazon Redshift 간에 데이터를 이동할 때에는 1시간 후에 만료되는 임시 Amazon S3 자격 증명이 사용됩니다. 따라서 실행 시간이 긴 작업은 실패할 수 있습니다. Amazon Redshift 간에 데이터를 이동하기 위해 오래 실행되는 작업을 설정하는 방법은 [aws-glue-programming-etl-connect-redshift-home](aws-glue-programming-etl-connect-redshift-home) 섹션을 참조하세요.

## 오류: 네트워크 인터페이스용 프라이빗 DNS를 찾을 수 없습니다.
<a name="error-no-private-DNS"></a>

작업 또는 개발 엔드포인트가 할당하는 작업을 실패하면 네트워크 설정 문제일 것입니다.
+ Amazon이 제공한 DNS를 사용 중이면 `enableDnsHostnames` 값은 true로 설정해야 합니다. 자세한 내용은 [DNS](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)를 참조하십시오.

## 오류: 개발 엔드포인트 프로비저닝이 실패했습니다.
<a name="error-development-endpoint-failed"></a>

AWS Glue가 성공적으로 개발 엔드포인트를 성공적으로 할당할 수 없다면 네트워크 설정 문제일 것입니다.
+ 개발 엔드포인트를 정의하면 VPC, 서브넷 및 보안 그룹이 특정 요구 사항에 부합한다는 것을 확인하도록 검증할 수 있습니다.
+ 조건부 SSH 퍼블릭 키를 제공했다면 유효한 SSH 퍼블릭 키인지 확인합니다.
+ VPC가 유효한 [**DHCP option set(DHCP 옵션 세트)**]를 사용하도록 VPC 콘솔을 확인합니다. 자세한 내용은 [DHCP 옵션 세트](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)를 참조하십시오.
+ 여전히 클러스터가 프로비저닝 상태로 유지된다면 AWS Support에 문의합니다.

## 오류: 노트북 서버 생성이 실패했습니다.
<a name="error-notebook-server-ec2-instance-profile"></a>

AWS Glue가 개발 엔드포인트의 노트북 서버 생성에 실패했다면 다음과 같은 문제 중 하나일 수 있습니다.
+ AWS Glue는 노트북 서버를 설치할 때 IAM 역할을 Amazon EC2로 전달합니다. IAM 역할은 Amazon EC2의 신뢰 관계를 맺고 있어야 합니다.
+ IAM 역할은 동일한 이름의 인스턴스 프로파일을 가지고 있어야 합니다. IAM 콘솔에서 Amazon EC2를 위한 역할을 생성할 때 동일한 이름의 인스턴스 프로파일이 자동으로 생성됩니다. 유효하지 않은 인스턴스 프로파일 이름 ` iamInstanceProfile.name`에 따라 로그 오류를 확인합니다. 자세한 내용은 [인스턴스 프로파일 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) 섹션을 참조하세요.
+ 역할이 노트북 서버를 생성하기 위해 통과한 정책에서 `aws-glue*` 버킷에 액세스할 수 있는 권한이 있는지 확인합니다.

## 오류: 로컬 노트북 시작이 실패했습니다.
<a name="error-local-notebook-fails-to-start"></a>

로컬 노트북이 시작을 못하고 디렉토리 혹은 폴더를 찾을 수 없다는 오류를 보고 하면 다음과 같은 문제 중 하나일 수 있습니다.
+ Microsoft Windows에서 실행하고 있다면 `JAVA_HOME` 환경 변수가 올바른 자바 디텍터리를 가리키는지 확인하십시오. 이 변수를 업데이트하지 않고서 Java를 업데이트할 수 있습니다. 그리고 존재하지 않는 폴더를 가리키면 Jupyter 노트북은 시작하지 못합니다.

## 오류: 크롤러 실행이 실패했습니다.
<a name="error-running-crawler-failed"></a>

AWS Glue가 크롤러를 성공적으로 카탈로그 데이터에서 실행하지 못하면 다음과 같은 원인 중 하나일 수 있습니다. 먼저 오류가 AWS Glue 콘솔 크롤러 목록에 있는지 확인합니다. 크롤러 이름 옆에 중요 표시 아이콘이 있는지 확인하고 관련 메시지가 아이콘 옆에 뜨는지 확인합니다.
+ `/aws-glue/crawlers`의 CloudWatch Logs에서 크롤러 실행 로그를 확인합니다.

## 오류: 파티션이 업데이트되지 않았습니다.
<a name="error-update-from-job-partitions"></a>

ETL 작업을 실행했을 때 Data Catalog에서 파티션이 업데이트되지 않은 경우 CloudWatch Logs의 `DataSink` 클래스에 있는 다음 로그 문이 유용할 수 있습니다.
+ "`Attempting to fast-forward updates to the Catalog - nameSpace:`" - 이 작업에서 수정을 시도한 데이터베이스, 테이블 및 catalogId를 표시합니다. 이 문이 여기에 없는 경우 `enableUpdateCatalog`가 true로 설정되어 있으며 `getSink()` 파라미터로 또는 ` additional_options`로 제대로 전달되는지 확인하십시오.
+ "`Schema change policy behavior:`" - 전달한 스키마 ` updateBehavior` 값을 표시합니다.
+ "`Schemas qualify (schema compare):`" - true 또는 false입니다.
+ "`Schemas qualify (case-insensitive compare):`" - true 또는 false입니다.
+ 둘 다 false이고 `updateBehavior`가 ` UPDATE_IN_DATABASE`로 설정되어 있지 않은 경우 DynamicFrame 스키마는 Data Catalog 테이블 스키마에 있는 열의 하위 집합과 동일하거나 이를 포함해야 합니다.

파티션 업데이트에 대한 자세한 내용은 [AWS Glue ETL 작업을 사용하여 데이터 카탈로그에서 스키마 업데이트 및 새 파티션 추가](update-from-job.md) 섹션을 참조하세요.

## 오류: 버전 불일치로 인해 작업 북마크 업데이트 실패
<a name="error-job-bookmarks-limitation"></a>

Amazon S3의 다른 데이터 세트에 동일한 변환/로직을 적용하기 위해 AWS Glue 작업을 매개변수화하려고 할 수 있습니다. 제공된 위치에서 처리된 파일을 추적하고자 합니다. 동일한 소스 버킷에서 동일한 작업을 실행하고 동일한/다른 대상에 동시에 쓰는 경우(동시성 >1) 다음 오류와 함께 작업이 실패합니다.

```
py4j.protocol.Py4JJavaError: An error occurred while callingz:com.amazonaws.services.glue.util.Job.commit.:com.amazonaws.services.gluejobexecutor.model.VersionMismatchException: Continuation update failed due to version mismatch. Expected version 2 but found version 3
```

솔루션: 동시성을 1로 설정하거나 작업을 동시에 실행하지 마십시오.

현재 AWS Glue 북마크는 동시 작업 실행을 지원하지 않으며 커밋이 실패합니다.

## 오류: 작업 북마크가 사용 설정된 경우 작업이 데이터를 재처리합니다.
<a name="error-job-bookmarks-reprocess-data"></a>

AWS Glue 작업 북마크를 활성화했는데도 ETL 작업이 앞선 실행에서 이미 처리된 데이터를 재처리하는 경우가 있을 수 있습니다. 이 오류의 일반적인 원인을 확인해 보십시오.

**최대 동시성**  
작업의 최대 동시 실행 횟수를 기본값인 1보다 크게 설정하면 작업 북마크를 방해할 수 있습니다. 이는 작업 북마크가 객체의 마지막 수정 시간을 확인하여 재처리가 필요한 객체를 확인할 때 발생할 수 있습니다. 자세한 내용은 [AWS Glue에서 Spark 작업에 대한 작업 속성 구성](add-job.md)에서 최대 동시성 관련 내용을 참조하십시오.

**작업 객체 누락**  
작업 실행 스크립트는 다음 커밋으로 끝나야 합니다.

```
job.commit()
```

이 객체를 포함한 경우 AWS Glue에서는 작업 실행의 타임스탬프 및 경로를 기록합니다. 동일한 경로로 작업을 다시 실행하면 AWS Glue에서는 새 파일만 처리합니다. 이 객체를 포함하지 않고 작업 북마크를 활성화한 경우, 이 작업은 새 파일과 함께 이미 처리된 파일도 재처리하고 작업의 대상 데이터 스토어에 중복 항목을 생성합니다.

**변환 컨텍스트 파라미터 누락**  
변환 컨텍스트가 `GlueContext` 클래스의 선택적 파라미터이기는 하지만, 이 파라미터를 넣지 않으면 작업 북마크가 제대로 작동하지 않습니다. 이 오류를 해결하려면 [DynamicFrame을 생성할 때](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-glue-context.html#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_catalog) 다음과 같이 변환 컨텍스트 파라미터를 추가합니다.

```
sample_dynF=create_dynamic_frame_from_catalog(database, table_name,transformation_ctx="sample_dynF") 
```

**입력 소스**  
입력 소스에 대해 관계형 데이터베이스(JDBC 연결)를 사용하는 경우 테이블의 기본 키가 순차적인 경우에만 작업 북마크가 작동합니다. 작업 북마크는 업데이트된 행이 아니라 새 행에 대해 작동합니다. 이는 작업 북마크가 이미 있는 기본 키를 검색하기 때문입니다. 입력 소스가 Amazon Simple Storage Service(Amazon S3)인 경우에는 적용되지 않습니다.

**최근 수정 시간**  
Amazon S3 입력 소스의 경우 작업 북마크는 파일 이름이 아니라 객체의 마지막으로 수정된 시간을 검사해 어떤 객체를 재처리해야 하는지 확인합니다. 마지막 작업 실행 이후로 입력 소스 데이터가 수정된 경우, 작업을 다시 실행하면 그 파일이 재처리됩니다.

## 오류: AWS Glue에서 VPC 간 장애 조치 동작
<a name="vpc-failover-behavior-error-10"></a>

AWS Glue 5.1 및 이전 버전에서 작업의 장애 조치에 대해 다음 프로세스가 사용됩니다.

요약: AWS Glue 연결은 작업 실행이 제출될 때 선택됩니다. 작업 실행 시 일부 문제(IP 주소 부족, 소스 연결, 라우팅 문제)가 발생하면 작업 실행이 실패합니다. 재시도가 구성된 경우 AWS Glue는 동일한 연결로 재시도합니다.

1. 각 실행 시도에 대해 AWS Glue는 사용할 수 있는 연결 상태를 찾을 때까지 작업 구성에 나열된 순서대로 연결 상태를 확인합니다. 가용 영역(AZ)에 장애가 발생하는 경우 해당 AZ의 연결에서 확인에 실패하고 건너뜁니다.

1. AWS Glue는 다음을 사용하여 연결을 검증합니다.
   + 유효한 Amazon VPC ID 및 서브넷을 확인합니다.
   + NAT 게이트웨이 또는 Amazon VPC 엔드포인트가 존재하는지 확인합니다.
   + 서브넷에 할당된 IP 주소가 1개 이상인지 확인합니다.
   + AZ가 정상 상태인지 확인합니다.

   AWS Glue는 작업 실행 제출 시에는 연결을 확인할 수 없습니다.

1. Amazon VPC를 사용하는 작업의 경우, 모든 드라이버와 실행기는 작업 실행 제출 시 선택한 연결을 사용하여 동일한 AZ에서 생성됩니다.

1. 재시도가 구성된 경우 AWS Glue는 동일한 연결로 재시도합니다. 이 연결과 관련된 문제가 오래 지속된다고 보장할 수 없기 때문입니다. AZ에 장애가 발생하면 해당 AZ의 기존 작업 실행(작업 실행 단계에 따라 다름)이 실패할 수 있습니다. 재시도를 통해 AZ 장애를 감지하고 새 실행을 위해 다른 AZ를 선택해야 합니다.

# 크롤러가 Lake Formation 권한을 사용하는 경우 발생하는 크롤러 오류
<a name="error-crawler-config-lf"></a>

아래 정보를 사용하여 Lake Formation 보안 인증을 사용하여 크롤러를 구성하는 동안 다양한 문제를 진단하고 수정합니다.

## 오류: The S3 location: s3://examplepath is not registered
<a name="error-s3-location"></a>

Lake Formation 보안 인증을 사용하여 크롤러를 실행하려면 먼저 Lake Formation 권한을 설정해야 합니다. 이 오류를 해결하려면 Lake Formation에 대상 Amazon S3 위치를 등록하세요. 자세한 내용을 알아보려면 [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html)(Amazon S3 위치 등록)을 참조하세요.

## 오류: User/Role is not authorized to perform: lakeformation:GetDataAccess on resource
<a name="error-role-authorization"></a>

IAM 콘솔 또는 AWS CLI을(를) 사용하여 크롤러 역할에 대해 `lakeformation:GetDataAccess` 권한을 추가하세요. 이 권한을 통해 Lake Formation은 데이터에 액세스하기 위한 임시 보안 인증 요청을 승인합니다. 아래 정책을 참조하세요.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "lakeformation:GetDataAccess"
    ],
    "Resource": "*"
  }
}
```

------

## 오류: Insufficient Lake Formation permission(s) on (Database name: exampleDatabase, Table Name: exampleTable)
<a name="error-permissions"></a>

Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))에서 데이터베이스에 대한 크롤러 역할 액세스 권한(` Create`, `Describe`, `Alter`)을 부여합니다. 이는 출력 데이터베이스로 지정됩니다. 테이블에 대한 권한도 부여할 수 있습니다. 자세한 내용을 알아보려면 [명명된 리소스 메서드를 사용하여 데이터베이스 권한 부여](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-cat-perms-named-resource.html)를 참조하세요.

## 오류: Insufficient Lake Formation permission(s) on s3://examplepath
<a name="error-location-permissions"></a>

1.  **교차 계정 크롤링** 

   1. Amazon S3 버킷이 등록된 계정(계정 B)을 사용하여 Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))에 로그인합니다. 크롤러가 실행될 계정에 데이터 위치 권한을 부여합니다. 이렇게 하면 크롤러가 대상 Amazon S3 위치에서 데이터를 읽을 수 있습니다.

   1.  크롤러가 생성된 계정(계정 A)에서 크롤러 실행에 사용되는 IAM 역할에 대상 Amazon S3 위치에 대한 데이터 위치 권한을 부여하여 크롤러가 Lake Formation의 대상에서 데이터를 읽을 수 있도록 합니다. 자세한 내용을 알아보려면 [데이터 위치 권한 부여(외부 계정)](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-external.html)를 참조하세요.

1. **계정 내(크롤러 및 등록된 Amazon S3 위치가 동일한 계정에 있음) 크롤링** - Amazon S3 위치에서 크롤러 실행에 사용되는 IAM 역할에 데이터 위치 권한을 부여하여 크롤러가 Lake Formation의 대상에서 데이터를 읽을 수 있도록 합니다. 자세한 내용을 알아보려면 [Granting data location permissions (same account)](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html)(데이터 위치 권한 부여(동일한 계정))를 참조하세요.

## Lake Formation 보안 인증을 사용한 크롤러 구성에 대해 자주 묻는 질문
<a name="faq-crawler-config-lf"></a>

1.  **AWS 콘솔을 사용하여 Lake Formation 보안 인증을 사용하여 실행되도록 크롤러를 구성하려면 어떻게 해야 합니까?**

   AWS Glue 콘솔([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/))에서 크롤러를 구성하는 동안 **Use Lake Formation credentials for crawling Amazon S3 data source**(Amazon S3 데이터 소스 크롤링에 Lake Formation 자격 증명 사용) 옵션을 선택합니다. 크로스 계정 크롤링의 경우 대상 Amazon S3 위치가 Lake Formation에 등록된 AWS 계정 ID를 지정합니다. 계정 내 크롤링의 경우 **accountId** 필드는 선택 사항입니다.

1.  **AWS CLI을(를) 사용하여 Lake Formation 보안 인증을 사용하여 실행되도록 크롤러를 구성하려면 어떻게 해야 합니까?**

   `CreateCrawler` API 직접 호출 중에 `LakeFormationConfiguration` 추가:

   ```
   "LakeFormationConfiguration": {
       "UseLakeFormationCredentials": true,
       "AccountId": "111111111111" (AWS account ID where the target Amazon S3 location is registered with Lake Formation)
     }
   ```

1.  **Lake Formation 보안 인증을 사용하는 크롤러에 대해 지원되는 대상은 무엇입니까?**

   Lake Formation 보안 인증을 사용하는 크롤러는 Amazon S3(계정 내 및 크로스 계정 크롤링), 계정 내 데이터 카탈로그 대상(기본 위치가 Amazon S3인 경우), Apache Iceberg 대상에 대해서만 지원됩니다.

1.  **Lake Formation 보안 인증을 사용하여 단일 크롤러의 일부로 여러 Amazon S3 버킷을 크롤링할 수 있습니까?**

   아니요, Lake Formation 보안 인증 벤딩을 사용하는 크롤링 대상의 경우 기본 Amazon S3 위치가 동일한 버킷에 속해야 합니다. 예를 들어, 고객은 동일한 버킷(버킷 1) 아래에 있는 경우 여러 대상 위치 `(s3://bucket1/folder1, s3://bucket1/folder2)`을(를) 사용할 수 있습니다. 다른 버킷 지정(s3://bucket1/folder1, s3://bucket2/folder2)은 지원되지 않습니다.

# 로그에서 AWS Glue for Ray 오류 해결
<a name="troubleshooting-ray"></a>

**중요**  
AWS Glue for Ray는 2026년 4월 30일부터 신규 고객에게 더 이상 공개되지 않습니다. AWS Glue for Ray를 사용하려면 해당 날짜 이전에 가입하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. AWS Glue for Ray와 유사한 기능의 경우 Amazon EKS를 살펴보세요. 자세한 내용은 [AWS Glue for Ray 지원 종료](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)를 참조하세요.

AWS Glue를 사용하면 작업 실행 중에 Ray 프로세스에서 생성된 로그에 액세스할 수 있습니다. Ray 작업에서 오류나 예상치 못한 동작이 발생하는 경우 먼저 로그에서 정보를 수집하여 오류의 원인을 파악합니다. 대화형 세션에 대해서도 유사한 로그를 제공합니다. 세션 로그는 `/aws-glue/ray/sessions` 접두사와 함께 제공됩니다.

작업이 실행되면 로그 라인이 CloudWatch에 실시간으로 전송됩니다. 실행을 완료한 후 인쇄 명령문이 CloudWatch 로그에 추가됩니다. 로그는 작업 실행 후 2주 동안 보관됩니다.

## Ray 작업 로그 검사
<a name="troubleshooting-ray-log-locations"></a>

작업이 실패하면 작업 이름과 작업 실행 ID를 수집합니다. 이러한 항목은 AWS Glue 콘솔에서 찾을 수 있습니다. 작업 페이지로 이동한 다음 **Runs**(실행) 탭으로 이동합니다. Ray 작업 로그는 다음과 같은 전용 CloudWatch 로그 그룹에 저장됩니다.
+ `/aws-glue/ray/jobs/script-log/` - 기본 Ray 스크립트에서 내보낸 로그를 저장합니다.
+ `/aws-glue/ray/jobs/ray-monitor-log/` - Ray autoscaler 프로세스에서 내보낸 로그를 저장합니다. 이러한 로그는 헤드 노드에 대해 생성되며 다른 워커 노드에 대해서는 생성되지 않습니다.
+ `/aws-glue/ray/jobs/ray-gcs-logs/` - 글로벌 제어 스토어(GCS) 프로세스에서 생성된 로그를 저장합니다. 이러한 로그는 헤드 노드에 대해 생성되며 다른 워커 노드에 대해서는 생성되지 않습니다.
+ `/aws-glue/ray/jobs/ray-process-logs/` - 헤드 노드에서 실행되는 다른 Ray 프로세스(주로 대시보드 에이전트)에서 생성된 로그를 저장합니다. 이러한 로그는 헤드 노드에 대해 생성되며 다른 워커 노드에 대해서는 생성되지 않습니다.
+ ` /aws-glue/ray/jobs/ray-raylet-logs/` - 각 raylet 프로세스에서 생성된 로그를 저장합니다. 이러한 로그는 헤드 노드를 포함하여 각 워커 노드에 대해 단일 스트림으로 수집됩니다.
+ `/aws-glue/ray/jobs/ray-worker-out-logs/` - 클러스터의 각 작업자에 대한 `stdout` 로그를 저장합니다. 이러한 로그는 헤드 노드를 포함한 각 워커 노드에서 생성됩니다.
+ `/aws-glue/ray/jobs/ray-worker-err-logs/` - 클러스터의 각 작업자에 대한 `stderr` 로그를 저장합니다. 이러한 로그는 헤드 노드를 포함한 각 워커 노드에서 생성됩니다.
+ `/aws-glue/ray/jobs/ray-runtime-env-log/` - Ray 설정 프로세스에 대한 로그를 저장합니다. 이러한 로그는 헤드 노드를 포함한 각 워커 노드에서 생성됩니다.

## Ray 작업 오류 해결
<a name="troubleshooting-ray-errors"></a>

Ray 로그 그룹의 구성을 이해하고 오류 해결에 도움이 되는 로그 그룹을 찾으려면 Ray 아키텍처에 대한 배경 정보를 알고 있으면 도움이 됩니다.

AWS Glue ETL에서 작업자는 인스턴스에 해당합니다. AWS Glue 작업에 대한 작업자를 구성할 때 해당 작업 전용 인스턴스의 유형과 수량을 설정합니다. Ray에서는 **작업자라는 용어를 다양한 방식으로 사용합니다.

Ray에서는 **헤드 노드와 **워커커 노드를 사용하여 Ray 클러스터 내에서 인스턴스의 책임을 구분합니다. Ray 워커 노드는 분산 계산 결과를 얻기 위해 계산을 수행하는 여러 **액터 프로세스를 호스팅할 수 있습니다. 함수의 복제본을 실행하는 액터를 **복제본이라고 합니다. 복제본 액터를 작업자 프로세스라고도 합니다. 복제본은 클러스터를 조정하기 위한 추가 프로세스를 실행하기 때문에 헤드라고 하는 헤드 노드에서도 실행될 수 있습니다.

계산에 기여하는 각 액터는 자체 로그 스트림을 생성합니다. 이를 통해 다음과 같은 몇 가지 인사이트를 얻을 수 있습니다.
+ 로그를 내보내는 프로세스 수가 작업에 할당된 작업자 수보다 많을 수 있습니다. 각 인스턴스의 각 코어에는 주로 액터가 있습니다.
+  Ray 헤드 노드는 클러스터 관리 및 시작 로그를 내보냅니다. 반면 Ray 워커 노드는 수행된 작업에 대한 로그만 내보냅니다.

Ray 아키텍처에 대한 자세한 내용은 Ray 설명서의 [아키텍처 백서]( https://docs.ray.io/en/latest/ray-contribute/whitepaper.html)를 참조하세요.

### 문제 영역: Amazon S3 액세스
<a name="troubleshooting-ray-errors-s3"></a>

작업 실행 실패 메시지를 확인합니다. 충분한 정보가 제공되지 않는 경우 `/aws-glue/ray/jobs/script-log/` 섹션을 확인하세요.

### 문제 영역: PIP 종속성 관리
<a name="troubleshooting-ray-errors-dependencies"></a>

`/aws-glue/ray/jobs/ray-runtime-env-log/`을 검토합니다.

### 문제 영역: 메인 프로세스의 중간 값 검사
<a name="troubleshooting-ray-errors-main-process"></a>

기본 스크립트에서 `stderr` 또는 `stdout`에 쓰고 `/aws-glue/ray/jobs/script-log/`에서 로그를 검색합니다.

### 문제 영역: 하위 프로세스의 중간 값 검사
<a name="troubleshooting-ray-errors-worker-process"></a>

`remote` 함수에서 `stderr` 또는 `stdout`에 씁니다. 그런 다음 `/aws-glue/ray/jobs/ray-worker-out-logs/` 또는 `/aws-glue/ray/jobs/ray-worker-err-logs/`에서 로그를 검색합니다. 함수가 복제본에서 실행되었을 수 있으므로 원하는 출력을 찾기 위해 여러 로그를 검사해야 할 수 있습니다.

### 문제가 있는 영역: 오류 메시지에서 IP 주소 해석
<a name="troubleshooting-ray-errors-ips"></a>

특정 오류 상황에서는 작업에서 IP 주소가 포함된 오류 메시지를 생성할 수 있습니다. 이러한 IP 주소는 임시 주소이며 클러스터에서 노드를 식별하고 노드 사이에서 통신하는 데 사용됩니다. 노드의 로그는 IP 주소를 기반으로 고유한 접미사를 사용하는 로그 스트림에 게시됩니다.

CloudWatch에서는 이 접미사를 식별하여 로그를 필터링해 이 IP 주소에 특정한 로그를 검사할 수 있습니다. 예를 들어 주어진 *FAILED\$1IP* 및 *JOB\$1RUN\$1ID*에 대해 다음을 사용해 접미사를 식별할 수 있습니다.

```
filter @logStream like /JOB_RUN_ID/
| filter @message like /IP-/
| parse @message "IP-[*]" as ip
| filter ip like /FAILED_IP/
| fields replace(ip, ":", "_") as uIP
| stats count_distinct by uIP as logStreamSuffix
| display logStreamSuffix
```

# AWS Glue 기계 학습 예외 사항
<a name="exceptions-machine-learning"></a>

이 주제에서는 기계 학습과 관련된 AWS Glue 예외에 대한 HTTP 오류 코드 및 문자열에 대해 설명합니다. 작업을 수행할 때 발생할 수 있는 각 기계 학습 작업에 대해 오류 코드 및 오류 문자열이 제공됩니다. 또한 오류를 일으킨 작업을 다시 시도할 수 있는지 여부를 확인할 수 있습니다.

## CancelMLTaskRunActivity
<a name="exceptions-machine-learning-CancelMLTaskRunActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”
  + “[transformName] 변환을 위한 [accountId] 계정에서 [taskRunId]에 대한 ML 작업 실행을 찾을 수 없습니다.”

  재시도 가능: 아니요.

## CreateMLTaskRunActivity
<a name="exceptions-machine-learning-CreateMLTransformActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ InvalidInputException (400)
  + “예기치 않은 입력으로 인해 내부 서비스 오류가 발생했습니다.”
  + “변환에서 AWS Glue 테이블 입력 소스를 지정해야 합니다.”
  + “입력 소스 열 [columnName]에 카탈로그에 정의된 잘못된 데이터 형식이 있습니다.”
  + “정확히 하나의 입력 레코드 테이블을 제공해야 합니다.”
  + “데이터베이스 이름을 지정해야 합니다.”
  + “테이블 이름을 지정해야 합니다.”
  + “스키마가 변환에 정의되지 않았습니다.”
  + “스키마는 주어진 기본 키 [primaryKey]를 포함해야 합니다.”
  + “데이터 카탈로그 스키마를 가져오는 중 문제가 발생했습니다. [message].”
  + “최대 용량과 작업자 수/유형을 동시에 설정할 수 없습니다.”
  + “WorkerType과 NumberOfWorkers 둘 다 설정해야 합니다.”
  + “MaxCapacity는 >=[maxCapacity]이어야 합니다.”
  + “NumberOfWorkers는 >=[maxCapacity]이어야 합니다.”
  + “최대 재시도는 음수가 아니어야 합니다.”
  +  “일치 항목 찾기 파라미터가 설정되지 않았습니다.”
  + “일치 항목 찾기 파라미터에 기본 키를 지정해야 합니다.”

  재시도 가능: 아니요.
+ AlreadyExistsException (400)
  + “이름이 [transformName]인 변형이 이미 있습니다.”

  재시도 가능: 아니요.
+ IdempotentParameterMismatchException (400)
  + “[transformName] 변환에 대한 멱등성 생성 요청에 일치하지 않는 파라미터가 있습니다.”

  재시도 가능: 아니요.
+ InternalServiceException (500)
  + “종속성 오류가 발생했습니다.”

  재시도 가능: 예.
+ ResourceNumberLimitExceededException (400)
  + “ML 변환 수([count])가 [limit] 변환의 제한을 초과했습니다.”

  재시도 가능: 예, 이 새 변환을 위한 공간을 만들기 위해 변환을 삭제한 후 재시도합니다.

## DeleteMLTransformActivity
<a name="exceptions-machine-learning-DeleteMLTransformActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”

  재시도 가능: 아니요.

## GetMLTaskRunActivity
<a name="exceptions-machine-learning-GetMLTaskRunActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”
  + “[transformName] 변환을 위한 [accountId] 계정에서 [taskRunId]에 대한 ML 작업 실행을 찾을 수 없습니다.”

  재시도 가능: 아니요.

## GetMLTaskRunsActivity
<a name="exceptions-machine-learning-GetMLTaskRunsActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”
  + “[transformName] 변환을 위한 [accountId] 계정에서 [taskRunId]에 대한 ML 작업 실행을 찾을 수 없습니다.”

  재시도 가능: 아니요.

## GetMLTransformActivity
<a name="exceptions-machine-learning-GetMLTransformActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”

  재시도 가능: 아니요.

## GetMLTransformsActivity
<a name="exceptions-machine-learning-GetMLTransformsActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “계정 ID는 비워 둘 수 없습니다.”
  + “[column] 열에는 정렬이 지원되지 않습니다.”
  + “[column]은(는) 비워 둘 수 없습니다.”
  + “예기치 않은 입력으로 인해 내부 서비스 오류가 발생했습니다.”

  재시도 가능: 아니요.

## GetSaveLocationForTransformArtifactActivity
<a name="exceptions-machine-learning-GetSaveLocationForTransformArtifactActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “지원되지 않는 아티팩트 유형 [artifactType]입니다.”
  + “예기치 않은 입력으로 인해 내부 서비스 오류가 발생했습니다.”

  재시도 가능: 아니요.

## GetTaskRunArtifactActivity
<a name="exceptions-machine-learning-GetTaskRunArtifactActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”
  + “[transformName] 변환을 위한 [accountId] 계정에서 [taskRunId]에 대한 ML 작업 실행을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “파일 이름 '[fileName]’이(가) 게시에 유효하지 않습니다.”
  + “[taskType] 작업 유형에 대한 아티팩트를 검색할 수 없습니다.”
  + “[artifactType]에 대한 아티팩트를 검색할 수 없습니다.”
  + “예기치 않은 입력으로 인해 내부 서비스 오류가 발생했습니다.”

  재시도 가능: 아니요.

## PublishMLTransformModelActivity
<a name="exceptions-machine-learning-PublishMLTransformModelActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”
  + “계정 ID - [accountId] - 및 변환 ID - [transformId]에서 버전 - [version] 버전이 있는 기존 모델을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “파일 이름 '[fileName]’이(가) 게시에 유효하지 않습니다.”
  + “부호 없는 문자열 [string] 앞에 잘못된 마이너스 부호가 있습니다.”
  + “[string]의 끝에 잘못된 숫자가 있습니다.”
  +  “문자열 값 [string]은(는) 부호 없는 long 범위를 초과합니다.”
  + “예기치 않은 입력으로 인해 내부 서비스 오류가 발생했습니다.”

  재시도 가능: 아니요.

## PullLatestMLTransformModelActivity
<a name="exceptions-machine-learning-PullLatestMLTransformModelActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “예기치 않은 입력으로 인해 내부 서비스 오류가 발생했습니다.”

  재시도 가능: 아니요.
+ ConcurrentModificationException (400)
  + “파라미터가 일치하지 않는 레이싱 입력으로 인해 훈련할 모델 버전을 만들 수 없습니다.”
  + “변환 ID [transformId]에 대한 ML 변환 모델이 오래되었거나 다른 프로세스에 의해 업데이트되고 있습니다. 다시 시도하십시오.”

  재시도 가능: 예.

## PutJobMetadataForMLTransformActivity
<a name="exceptions-machine-learning-PutJobMetadataForMLTransformActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”
  + “[transformName] 변환을 위한 [accountId] 계정에서 [taskRunId]에 대한 ML 작업 실행을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “예기치 않은 입력으로 인해 내부 서비스 오류가 발생했습니다.”
  + “알 수 없는 작업 메타데이터 유형 [jobType]입니다.”
  +  “업데이트할 작업 실행 ID를 제공해야 합니다.”

  재시도 가능: 아니요.

## StartExportLabelsTaskRunActivity
<a name="exceptions-machine-learning-StartExportLabelsTaskRunActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”
  + “계정 ID [accountId]에 변환 ID [transformId]에 대한 labelset가 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “[message].”
  + “제공된 S3 경로가 변환과 동일한 리전에 있지 않습니다. 예상한 리전은 [region]이지만 받은 리전은 [region]입니다.”

  재시도 가능: 아니요.

## StartImportLabelsTaskRunActivity
<a name="exceptions-machine-learning-StartExportLabelsTaskRunActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “[message].”
  + “잘못된 레이블 파일 경로입니다.”
  + “[labelPath]에서 레이블 파일에 액세스할 수 없습니다. [message].”
  + “변환에 제공된 IAM 역할을 사용할 수 없습니다. 역할: [role]입니다.”
  + “크기가 0인 잘못된 레이블 파일입니다.”
  + “제공된 S3 경로가 변환과 동일한 리전에 있지 않습니다. 예상한 리전은 [region]이지만 받은 리전은 [region]입니다.”

  재시도 가능: 아니요.
+ ResourceNumberLimitExceededException (400)
  + “레이블 파일이 [limit]MB 제한을 초과했습니다.”

  재시도 가능: 아니오. 레이블 파일을 여러 개의 작은 파일로 나누는 것이 좋습니다.

## StartMLEvaluationTaskRunActivity
<a name="exceptions-machine-learning-StartMLEvaluationTaskRunActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “정확히 하나의 입력 레코드 테이블을 제공해야 합니다.”
  + “데이터베이스 이름을 지정해야 합니다.”
  + “테이블 이름을 지정해야 합니다.”
  + “일치 항목 찾기 파라미터가 설정되지 않았습니다.”
  + “일치 항목 찾기 파라미터에 기본 키를 지정해야 합니다.”

  재시도 가능: 아니요.
+ MLTransformNotReadyException (400)
  + “이 작업은 준비 상태에 있는 변환에만 적용할 수 있습니다.”

  재시도 가능: 아니요.
+ InternalServiceException (500)
  + “종속성 오류가 발생했습니다.”

  재시도 가능: 예.
+ ConcurrentRunsExceededException (400)
  + “ML 작업 실행 수 [count]이(가) 작업 실행 [limit]의 변환 제한을 초과했습니다.”
  + “ML 작업 실행 수 [count]이(가) 작업 실행 [limit]의 제한을 초과했습니다.”

  재시도 가능: 예, 작업 실행이 완료될 때까지 기다린 후 재시도합니다.

## StartMLLabelingSetGenerationTaskRunActivity
<a name="exceptions-machine-learning-StartMLLabelingSetGenerationTaskRunActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “정확히 하나의 입력 레코드 테이블을 제공해야 합니다.”
  + “데이터베이스 이름을 지정해야 합니다.”
  + “테이블 이름을 지정해야 합니다.”
  + “일치 항목 찾기 파라미터가 설정되지 않았습니다.”
  + “일치 항목 찾기 파라미터에 기본 키를 지정해야 합니다.”

  재시도 가능: 아니요.
+ InternalServiceException (500)
  + “종속성 오류가 발생했습니다.”

  재시도 가능: 예.
+ ConcurrentRunsExceededException (400)
  + “ML 작업 실행 수 [count]이(가) 작업 실행 [limit]의 변환 제한을 초과했습니다.”

  재시도 가능: 예, 작업 실행이 완료된 후 재시도합니다.

## UpdateMLTransformActivity
<a name="exceptions-machine-learning-UpdateMLTransformActivity"></a>

이 활동에는 다음과 같은 예외가 있습니다.
+ EntityNotFoundException (400)
  + “[transformName] 핸들이 있는 [accountId] 계정에서 MLTransform을 찾을 수 없습니다.”

  재시도 가능: 아니요.
+ InvalidInputException (400)
  + “이름이 [transformName]인 다른 변환이 이미 있습니다.”
  + “[message].”
  + “변환 이름은 비워 둘 수 없습니다.”
  + “최대 용량과 작업자 수/유형을 동시에 설정할 수 없습니다.”
  + “WorkerType과 NumberOfWorkers 둘 다 설정해야 합니다.”
  + “MaxCapacity는 >=[minMaxCapacity]이어야 합니다.”
  + “NumberOfWorkers는 >=[minNumWorkers]이어야 합니다.”
  + “최대 재시도는 음수가 아니어야 합니다.”
  + “예기치 않은 입력으로 인해 내부 서비스 오류가 발생했습니다.”
  + “일치 항목 찾기 파라미터가 설정되지 않았습니다.”
  + “일치 항목 찾기 파라미터에 기본 키를 지정해야 합니다.”

  재시도 가능: 아니요.
+ AlreadyExistsException (400)
  + “이름이 [transformName]인 변형이 이미 있습니다.”

  재시도 가능: 아니요.
+ IdempotentParameterMismatchException (400)
  + “[transformName] 변환에 대한 멱등성 생성 요청에 일치하지 않는 파라미터가 있습니다.”

  재시도 가능: 아니요.

# AWS Glue 할당량
<a name="troubleshooting-service-limits"></a>

AWS Support에 연락하여 *AWS 일반 참조*에 나열된 서비스 할당량에 대해 [할당량 증가를 요청](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)할 수 있습니다. 다르게 표시되지 않는 한 리전별로 각 할당량이 적용됩니다. 자세한 내용은 [AWS Glue 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/glue.html)을 참조하세요.