取得 AWS Support 的 Amazon S3 請求 ID - Amazon Simple Storage Service

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

取得 AWS Support 的 Amazon S3 請求 ID

每當您因為在 Amazon S3 中遇到錯誤或非預期行為而要聯絡 AWS Support 時,您必須提供與錯誤動作相關聯的請求 ID。AWS Support 會使用這些請求 ID 協助解決您遇到的問題。

請求 ID 成對出現、在 Amazon S3 處理的每個回應中傳回 (甚至是錯誤回應),而且可透過詳細日誌取得。取得請求 ID 的常用方法有很多,包括 S3 存取日誌和 AWS CloudTrail 事件或資料事件。

當您復原這些日誌之後,請複製並保留這些成對的值,供聯絡 AWS Support 時使用。如需聯絡 AWS Support 的詳細資訊,請參閱聯絡 AWSAWS Support 文件

使用 HTTP 取得請求 ID

您可以在 HTTP 要求傳抵目標應用程式之前,先記錄 HTTP 要求的位元數,從而取得自己的要求 ID x-amz-request-idx-amz-id-2。您有多種第三方工具可供您用來復原 HTTP 要求的詳細日誌。請選擇您信任的工具來執行,當您送出另一個 Amazon S3 HTTP 請求時,接聽 Amazon S3 流量行經的連接埠。

HTTP 請求的請求 ID 對類似下列範例所示:

x-amz-request-id: 79104EXAMPLEB723 x-amz-id-2: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km
注意

在大部分的封包擷取中,多會加密及隱藏 HTTPS 要求。

使用 Web 瀏覽器取得請求 ID

大多數 Web 瀏覽器都會提供開發人員工具,您可用來檢視請求標頭。

傳回錯誤之 Web 瀏覽器要求的要求 ID 對類似下列範例所示。

<Error><Code>AccessDenied</Code><Message>Access Denied</Message> <RequestId>79104EXAMPLEB723</RequestId><HostId>IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km</HostId></Error>

若要從成功的請求取得請求 ID 對,請使用瀏覽器的開發人員工具檢視 HTTP 回應標頭。如需適用於特定瀏覽器的開發人員工具的資訊,請參閱 AWS re:Post 中的 Amazon S3 疑難排解 – 如何復原 S3 請求 ID

使用 AWS 開發套件取得請求 ID

下列各節包含如何使用 AWS 開發套件設定日誌的資訊。雖然您可以啟用詳細記錄功能,記錄每個要求與回應,但不建議在生產系統中啟用記錄,因為大量的要求或回應可能會造成應用程式的速度明顯變慢。

AWS 開發套件請求的請求 ID 對類似下列範例所示。

Status Code: 403, AWS Service: Amazon S3, AWS Request ID: 79104EXAMPLEB723 AWS Error Code: AccessDenied AWS Error Message: Access Denied S3 Extended Request ID: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km

使用適用於 PHP 的開發套件以取得請求 ID

您可使用 PHP 設定記錄功能。如需詳細資訊,請參閱適用於《AWS SDK for PHP 開發人員指南》中的如何得知網路上傳送哪些資料?

使用適用於 Java 的開發套件取得請求 ID

您可以為特定請求或回應啟用記錄功能,只擷取及傳回相關的標頭。若要執行此作業,請匯入 com.amazonaws.services.s3.S3ResponseMetadata 類別。如此一來,您就能將請求存放在變數中,然後再執行實際的要求。若要取得所記錄的請求或回應,請呼叫 getCachedResponseMetadata(AmazonWebServiceRequest request).getRequestID()

PutObjectRequest req = new PutObjectRequest(bucketName, key, createSampleFile()); s3.putObject(req); S3ResponseMetadata md = s3.getCachedResponseMetadata(req); System.out.println("Host ID: " + md.getHostId() + " RequestID: " + md.getRequestId());

或者,您可以對每一個 Java 要求與回應使用詳細記錄功能。如需詳細資訊,請參閱《AWS SDK for Java 開發人員指南》中的詳細連線記錄

使用 AWS SDK for .NET 取得請求 ID

您可以使用內建的 System.Diagnostics 記錄日誌工具設定 AWS SDK for .NET 的記錄日誌功能。如需詳細資訊,請參閱AWS 開發人員部落格文章使用適用於 .NET 的 AWS 開發套件來記錄

注意

傳回的記錄預設只會包含錯誤資訊。若要取得請求 ID,必須在設定檔中新增 AWSLogMetrics (以及選用的 AWSResponseLogging)。

使用適用於 Python (Boto3) 的開發套件取得請求 ID

您可以使用 AWS SDK for Python (Boto3) 來記錄特定回應。您可以使用此功能僅擷取相關標頭。下列程式碼顯示如何將回應的部分記錄到檔案中:

import logging import boto3 logging.basicConfig(filename='logfile.txt', level=logging.INFO) logger = logging.getLogger(__name__) s3 = boto3.resource('s3') response = s3.Bucket(bucket_name).Object(object_key).put() logger.info("HTTPStatusCode: %s", response['ResponseMetadata']['HTTPStatusCode']) logger.info("RequestId: %s", response['ResponseMetadata']['RequestId']) logger.info("HostId: %s", response['ResponseMetadata']['HostId']) logger.info("Date: %s", response['ResponseMetadata']['HTTPHeaders']['date'])

您也可以擷取例外狀況,並在引發例外狀況時記錄相關資訊。如需詳細資訊,請參閱適用於 Python (Boto) 的 AWS 開發套件 API 參考中的從錯誤回應中辨別實用的資訊

此外,您可以使用下列程式碼,配置 Boto3 輸出詳細資訊偵錯記錄檔:

import boto3 boto3.set_stream_logger('', logging.DEBUG)

如需詳細資訊,請參閱適用於 Python (Boto) 的 AWS 開發套件 API 參考中的 set_stream_logger

使用適用於 Ruby 的開發套件取得請求 ID

您可以使用適用於 Ruby 的開發套件版本 1、2 或 3,以取得請求 ID。

  • 使用適用於 Ruby 的開發套件 - 版本 1 – 您可以使用下一行程式碼,全域啟用 HTTP 連線記錄。

    s3 = AWS::S3.new(:logger => Logger.new($stdout), :http_wire_trace => true)
  • 使用適用於 Ruby 的開發套件 - 版本 2 或版本 3 – 您可以使用下一行程式碼,全域啟用 HTTP 連線記錄。

    s3 = Aws::S3::Client.new(:logger => Logger.new($stdout), :http_wire_trace => true)

如需從 AWS 用戶端取得連線資訊的提示,請參閱偵錯提示:從用戶端取得連線追蹤資訊

使用 AWS CLI 取得請求 ID

若要在使用 AWS Command Line Interface (AWS CLI) 時取得請求 ID,請將 --debug 新增至您的 命令。

使用 Windows PowerShell 取得請求識別碼

如需使用 Windows PowerShell 復原日誌的相關資訊,請參閱 .NET 開發部落格文章中的 AWS Tools for Windows PowerShell 中的回應日誌

使用 AWS CloudTrail 資料事件取得請求 ID

使用 CloudTrail 資料事件設定為記錄 S3 物件層級 API 操作的 Amazon S3 儲存貯體,提供使用者、角色或 Amazon S3 中 AWS 服務所採取動作的詳細資訊。您可以透過使用 Athena 查詢 CloudTrail 事件來識別 S3 請求 ID

使用 S3 伺服器存取記錄日誌來取得請求 ID

為 S3 伺服器存取記錄設定的 Amazon S3 儲存貯體,針對向儲存貯體提出的請求,提供詳細的記錄。您可以使用 Athena 查詢伺服器存取日誌來識別 S3 請求 ID。