

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Penanganan kesalahan
<a name="error-handling"></a>

Memahami bagaimana dan kapan pengecualian AWS SDK untuk Kotlin melempar penting untuk membangun aplikasi berkualitas tinggi menggunakan SDK. Bagian berikut menjelaskan berbagai kasus pengecualian yang dilemparkan oleh SDK dan cara menanganinya dengan tepat.

## Pengecualian layanan
<a name="service-exceptions"></a>

Pengecualian yang paling umum adalah`AwsServiceException`, dari mana semua pengecualian khusus layanan (seperti`S3Exception`) mewarisi. Pengecualian ini merupakan respons kesalahan dari file Layanan AWS. Misalnya, jika Anda mencoba menghentikan EC2 instance Amazon yang tidak ada, Amazon EC2 mengembalikan respons kesalahan. Detail respons kesalahan disertakan dalam `AwsServiceException` yang dilemparkan. 

Ketika Anda menemukan`AwsServiceException`, ini berarti bahwa permintaan Anda berhasil dikirim ke Layanan AWS tetapi tidak dapat diproses. Ini bisa karena kesalahan dalam parameter permintaan atau karena masalah di sisi layanan.

## Pengecualian klien
<a name="client-exceptions"></a>

`ClientException`menunjukkan bahwa masalah terjadi di dalam kode AWS SDK untuk Kotlin klien, baik saat mencoba mengirim permintaan ke AWS atau saat mencoba mengurai respons dari AWS. A `ClientException` umumnya lebih parah daripada `AwsServiceException` dan menunjukkan bahwa masalah utama mencegah klien memproses panggilan layanan ke Layanan AWS. Misalnya, AWS SDK untuk Kotlin melempar a `ClientException` jika gagal mengurai respons dari layanan.

## Metadata kesalahan
<a name="error-metadata"></a>

Setiap pengecualian layanan dan pengecualian klien memiliki `sdkErrorMetadata` properti. Ini adalah tas properti yang diketik yang dapat digunakan untuk mengambil detail tambahan tentang kesalahan.

Beberapa ekstensi yang telah ditentukan ada untuk `AwsErrorMetadata` jenis secara langsung, termasuk namun tidak terbatas pada yang berikut:
+ `sdkErrorMetadata.requestId`— id permintaan unik
+ `sdkErrorMetadata.errorMessage`— pesan yang dapat dibaca manusia (biasanya cocok dengan`Exception.message`, tetapi mungkin berisi informasi lebih lanjut jika pengecualian tidak diketahui oleh layanan)
+ `sdkErrorMetadata.protocolResponse`— Respons protokol mentah

Contoh berikut menunjukkan mengakses metadata kesalahan.

```
try {
    s3Client.listBuckets { ... }
} catch (ex: S3Exception) {
    val awsRequestId = ex.sdkErrorMetadata.requestId
    val httpResp = ex.sdkErrorMetadata.protocolResponse as? HttpResponse

    println("requestId was: $awsRequestId")
    println("http status code was: ${httpResp?.status}")
}
```