

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對 Glue 常見設定錯誤進行故障診斷
<a name="glue-troubleshooting-errors"></a>

如果您在 中遇到錯誤 AWS Glue，請使用以下資訊來協助您尋找問題來源並加以修正。

**注意**  
 AWS Glue GitHub 儲存庫包含[AWS Glue 常見問答集](https://github.com/aws-samples/aws-glue-samples/blob/master/FAQ_and_How_to.md)中的其他疑難排解指引。

**Topics**
+ [錯誤：資源無法使用](#error-resource-unavailable)
+ [錯誤：無法在 VPC 中找到 subnetId 的 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 動作未授權。無法驗證子網路 id：Subnet-id in VPC id: vpc-id](#error-DescribeRouteTables-permission)
+ [錯誤：無法呼叫 ec2:DescribeSubnets](#error-DescribeSubnets-permission)
+ [錯誤：無法呼叫 ec2:DescribeSecurityGroups](#error-DescribeSecurityGroups-permission)
+ [錯誤：找不到可用區域的子網路](#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)
+ [錯誤：筆記本伺服器 CREATE\_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)
+ [錯誤： 中的 VPCs之間的容錯移轉行為 AWS Glue](#vpc-failover-behavior-error-10)

## 錯誤：資源無法使用
<a name="error-resource-unavailable"></a>

如果 AWS Glue 傳回資源無法使用的訊息，您可以檢視錯誤訊息或日誌，以協助您進一步了解問題。以下任務說明一般的故障診斷方法。
+ 針對您所使用的任何連線和開發端點，請檢查您的叢集是否仍有彈性網路界面可用。

## 錯誤：無法在 VPC 中找到 subnetId 的 S3 端點或 NAT 閘道
<a name="error-s3-subnet-vpc-NAT-configuration"></a>

檢查訊息中的子網路 ID 和 VPC ID，以協助診斷問題。
+ 確認您已設定 Amazon S3 VPC 端點，此為 AWS Glue的要求。此外，如果組態內有 NAT 閘道，請檢查。如需詳細資訊，請參閱[Amazon S3 的 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 任務時，請確認使用者的角色包含 的政策`iam:PassRole` AWS Glue。如需詳細資訊，請參閱[步驟 3：連接政策到存取 AWS Glue 的使用者或群組](attach-policy-iam-user.md)。

## 錯誤：DescribeVpcEndpoints 動作未授權。無法驗證 VPC ID vpc-id
<a name="error-DescribeVpcEndpoints-permission"></a>
+ 檢查傳遞給 的政策 AWS Glue 以取得 `ec2:DescribeVpcEndpoints`許可。

## 錯誤：DescribeRouteTables 動作未授權。無法驗證子網路 id：Subnet-id in VPC id: vpc-id
<a name="error-DescribeRouteTables-permission"></a>
+ 檢查傳遞給 的政策 AWS Glue 以取得 `ec2:DescribeRouteTables`許可。

## 錯誤：無法呼叫 ec2:DescribeSubnets
<a name="error-DescribeSubnets-permission"></a>
+ 檢查傳遞給 的政策 AWS Glue 以取得 `ec2:DescribeSubnets`許可。

## 錯誤：無法呼叫 ec2:DescribeSecurityGroups
<a name="error-DescribeSecurityGroups-permission"></a>
+ 檢查傳遞給 的政策 AWS Glue 以取得 ` ec2:DescribeSecurityGroups`許可。

## 錯誤：找不到可用區域的子網路
<a name="error-az-not-available"></a>
+ 可用區域可能無法使用 AWS Glue。建立並使用可用區域中新的子網路，與訊息中所指定的可用區域不同。

## 錯誤：寫入到 JDBC 目標時發生任務執行例外
<a name="error-job-run-jdbc-target"></a>

執行寫入到 JDBC 目標的任務時，任務在下列情況下可能發生錯誤：
+ 如果您的任務寫入到 Microsoft SQL Server 資料表，且資料表有定義為 `Boolean` 類型的資料欄，則資料表必須預先在 SQL Server 資料庫中定義。當您使用 SQL Server 目標搭配 選項在**資料目標中建立資料表**，在 AWS Glue 主控台上定義任務時，請勿將任何來源資料欄映射至具有資料類型 的目標資料欄`Boolean`。執行任務時可能會發生錯誤。

  您可以執行以下動作避免錯誤：
  + 選擇含有** 布林值 **欄的現有資料表。
  + 編輯 `ApplyMapping` 轉換，並將來源的**布林值**欄映射至目標的數字或字串。
  + 編輯 `ApplyMapping` 轉換，移除來源中的**布林值**欄。
+ 如果您的任務寫入到 Oracle 資料表，您可能需要調整 Oracle 物件名稱的長度。在某些版本的 Oracle，最大的 ID 長度限制為 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 的資料時，所使用的臨時 Amazon S3 憑證將於 1 小時之後過期。如果您有長時間執行的任務，則可能會失敗。如需如何設定長時間執行任務以便移動 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 主控台中，檢查您的 VPC 是否使用有效的 **DHCP 選項集**。如需詳細資訊，請參閱 [DHCP 選項集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。
+ 如果叢集仍為 PROVISIONING 狀態，請聯絡 AWS 支援。

## 錯誤：筆記本伺服器 CREATE\_FAILED
<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 目錄。無需更新此變數即可更新 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 任務時，在資料目錄中未更新分割區，在 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 結構描述必須相同，或包含資料目錄資料表結構描述中看到的欄子集。

如需有關更新分割區的詳細資訊，請參閱 [使用 AWS Glue ETL 任務，在 Data Catalog 中更新結構描述並新增新的分區](update-from-job.md)。

## 錯誤：由於版本不相符，任務書籤更新失敗
<a name="error-job-bookmarks-limitation"></a>

您可能正在嘗試將 AWS Glue 任務參數化，以在 Amazon S3 中的不同資料集上套用相同的轉換/邏輯。您希望在提供的位置上追蹤已處理的檔案。當您在同一個來源儲存貯體上執行同一個任務並同時寫入相同/不同的目的地 (並行數 > 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 的任務並行執行數目上限，可能會干擾任務書籤。當任務書籤檢查物件的上次修改時間以驗證哪些物件需要重新處理時，可能會發生這種情況。如需詳細資訊，請參閱[在 中設定 Spark 任務的任務屬性 AWS Glue](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 輸入來源，任務書籤會檢查物件的上次修改時間而不是檔案名稱，以確認哪些物件需要重新處理。如果自上次任務執行之後已修改您的輸入來源資料，則在您重新執行任務時重新處理檔案。

## 錯誤： 中的 VPCs之間的容錯移轉行為 AWS Glue
<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 端點是否存在。
   + 檢查子網路是否具備超過 0 個所分配的 IP 地址。
   + 檢查 AZ 是否狀態良好。

   AWS Glue 無法在提交任務執行時驗證連線。

1. 對於使用 Amazon VPC 的任務，所有驅動程式和執行器都會在同一個 AZ 中建立，並在任務執行提交時選取連線。

1. 如果已設定重試， AWS Glue 將使用相同的連線重試。這是因為我們無法保證此連線在長期運作下不會發生問題。若 AZ 失敗，則該 AZ 中現有的任務執行 (視任務執行的階段而定) 可能會失敗。重試應會偵測 AZ 故障，並為新的執行選擇其他 AZ。