本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
取得 的 Amazon S3 請求 IDs AWS 支援
每當您 AWS 支援 因為在 Amazon S3 中遇到錯誤或意外行為而聯絡 時,您必須提供與失敗動作相關聯的請求 IDs。 AWS 支援 會使用這些請求 IDs 來協助解決您遇到的問題。
請求 ID 成對出現、在 Amazon S3 處理的每個回應中傳回 (甚至是錯誤回應),而且可透過詳細日誌取得。取得請求 IDs 的方法有很多種,包括 S3 伺服器存取日誌和 AWS CloudTrail 事件或資料事件。
復原這些日誌之後,請複製並保留這兩個值,因為您在聯絡時需要它們 AWS 支援。如需聯絡的相關資訊 AWS 支援,請參閱聯絡 AWS或 AWS 支援 文件。
使用 AWS CLI 取得請求 IDs
若要在使用 AWS Command Line Interface (AWS CLI) 時取得您的請求 IDs,請將 --debug新增至您的命令。例如,您應該會在偵錯日誌x-amz-id-2中看到 x-amz-request-id和 ,如下所示:
...
2025-04-30 14:35:28,572 - MainThread - botocore.parsers - DEBUG - Response headers: {'x-amz-id-2': 'a+zm50vDJH3LLmCiXvwEo0u0PtPS/qCJaBvB2ZMH9dzyzTiJhiLZkBFFoRfsPfOKztUKT/garCI=', 'x-amz-request-id': 'N4NMN0MJ4VDFZMX9', 'Date': 'Wed, 30 Apr 2025 21:35:29 GMT', 'Content-Type': 'application/xml', 'Transfer-Encoding': 'chunked', 'Server': 'AmazonS3'}
...
使用 Windows PowerShell 取得請求識別碼
如需使用 Windows PowerShell 復原日誌的資訊,請參閱《 AWS 開發人員工具部落格》中的 中的回應記錄 AWS Tools for Windows PowerShell。
使用 AWS CloudTrail 資料事件來取得請求 IDs
使用 CloudTrail 資料事件設定的 Amazon S3 儲存貯體,可記錄 S3 物件層級 API 操作,提供有關使用者、角色或 Amazon S3 中 AWS 服務所採取動作的詳細資訊。您可以透過使用 Athena 查詢 CloudTrail 事件來識別 S3 請求 ID。
如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用 CloudTrail 識別 Amazon S3 請求 CloudTrail。
使用 S3 伺服器存取記錄日誌來取得請求 ID
為 S3 伺服器存取記錄設定的 Amazon S3 儲存貯體,針對向儲存貯體提出的請求,提供詳細的記錄。您可以使用 Athena 查詢伺服器存取日誌來識別 S3 請求 ID。
如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用 查詢請求的存取日誌 Amazon Athena。
使用 HTTP 取得請求 ID
您可以在 HTTP 要求傳抵目標應用程式之前,先記錄 HTTP 要求的位元數,從而取得自己的要求 ID x-amz-request-id 與 x-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 SDKs 取得請求 IDs
下列各節包含使用不同 AWS SDKs設定記錄的資訊。
雖然您可以在每個請求和回應上啟用詳細記錄,但不建議在生產系統中啟用記錄,因為大型請求或回應可能會大幅降低應用程式的速度。
對於 AWS SDK 請求,一對請求 IDs 會如下所示:
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
- C++
-
記錄器的類型和詳細程度會在 SDKOptions引數中的 SDK 初始化期間指定。下列範例會將詳細程度指定為 LogLevel::Debug。
預設記錄器會寫入檔案系統,並使用下列慣例將檔案命名為 aws_sdk_YYYY-MM-DD-HH.log。記錄器會在該小時建立新的檔案。
Aws::SDKOptions options;
options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Debug;
Aws::InitAPI(options);
// ...
Aws::ShutdownAPI(options);
如需詳細資訊,請參閱如何開啟記錄功能? 適用於 AWS GitHub 上 C++ wiki 的 SDK。
- Go
-
您可以使用 SDK for Go 來設定記錄。如需詳細資訊,請參閱《 適用於 Go 的 AWS SDK v2 開發人員指南》中的記錄。
- Java
-
您可以啟用特定請求或回應的記錄,以僅擷取和傳回相關標頭。若要執行此作業,請匯入 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 要求與回應使用詳細記錄功能。如需詳細資訊,請參閱《適用於 Java 的 AWS SDK 開發人員指南》中的詳細連線記錄。
- JavaScript
-
適用於 JavaScript 的 AWS SDK 具有內建記錄器,因此您可以記錄使用它進行的 API 呼叫。若要在主控台中開啟記錄器並列印日誌項目,請將下列陳述式新增至您的程式碼:
AWS.config.logger = console;
如需詳細資訊,請參閱《 適用於 JavaScript 的 AWS SDK 開發人員指南》中的記錄 適用於 JavaScript 的 AWS SDK 通話。
- Kotlin
-
使用 適用於 Kotlin 的 AWS SDK,您可以使用程式碼或環境設定來指定線路層級訊息的日誌模式。您可以設定 HTTP 請求和 HTTP 回應的日誌模式。
若要選擇加入其他記錄,請在建構服務用戶端時設定 logMode 屬性:
import aws.smithy.kotlin.runtime.client.LogMode
// ...
val client = S3Client {
// ...
logMode = LogMode.LogRequestWithBody + LogMode.LogResponse
}
或者,您可以使用 環境變數來設定日誌模式:
export SDK_LOG_MODE=LogRequestWithBody|LogResponse
如需詳細資訊,請參閱《 適用於 Kotlin 的 AWS SDK 開發人員指南》中的記錄。
- .NET
-
您可以使用內建記錄工具 適用於 .NET 的 SDK ,使用 設定System.Diagnostics記錄。如需詳細資訊,請參閱使用AWS 開發人員部落格文章記錄 適用於 .NET 的 SDK。
傳回的記錄預設只會包含錯誤資訊。若要取得請求 ID,必須在設定檔中新增 AWSLogMetrics (以及選用的 AWSResponseLogging)。
- PHP
-
您可以在用戶端建構函數true中將偵錯選項設定為 ,以取得偵錯資訊,包括透過線路傳送的資料。
$s3Client = new Aws\S3\S3Client([
'region' => 'us-standard',
'version' => '2006-03-01',
'debug' => true
]);
如需詳細資訊,請參閱適用於《適用於 PHP 的 AWS SDK 開發人員指南》中的如何得知網路上傳送哪些資料?。
- Python (Boto3)
-
使用 適用於 Python (Boto3) 的 AWS SDK,您可以記錄特定回應。您可以使用此功能僅擷取相關標頭。下列程式碼顯示如何將回應的部分記錄到檔案中:
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 logging
import boto3
boto3.set_stream_logger('', logging.DEBUG)
如需詳細資訊,請參閱適用於 Python (Boto) 的AWS 開發套件 API 參考中的 set_stream_logger。
- Ruby
-
您可以使用適用於 Ruby IDs。您可以使用下列程式碼在用戶端中啟用 HTTP 線路記錄:
s3 = Aws::S3::Client.new(http_wire_trace: true)
線路記錄可以包含敏感資訊,例如您的存取金鑰 ID。在與 AWS Support 共用敏感資訊之前,應對其進行淨化。
您也可以在請求回應或錯誤中找到請求內容物件的請求 ID:
# Finding the request ID from an error:
begin
s3.put_object(bucket: 'bucket', key: 'key', body: 'test')
rescue Aws::S3::Errors::ServiceError => e
puts e.context[:request_id]
puts e.context[:s3_host_id]
end
# Finding the request ID from a successful call:
resp = s3.put_object(bucket: 'bucket', key: 'key', body: 'test')
puts resp.context[:request_id]
puts resp.context[:s3_host_id]
如需詳細資訊,請參閱《 適用於 Ruby 的 AWS SDK 開發人員指南適用於 Ruby 的 AWS SDK 》中的使用用戶端的線路追蹤資訊進行偵錯。
- Rust
-
若要啟用記錄,請新增tracing-subscriber木箱並在 Rust 應用程式中初始化木箱。
將追蹤程式庫新增至您的 Cargo.toml 檔案:
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
然後,在您的 Rust 程式碼中,先在主要函數中初始化記錄器,再呼叫任何 SDK 操作:
tracing_subscriber::fmt::init();
如需詳細資訊,請參閱《 適用於 Rust 的 AWS SDK 開發人員指南》中的在 中設定和使用記錄 適用於 Rust 的 AWS SDK。