

 AWS SDK untuk Java 1.x mencapai end-of-support pada 31 Desember 2025. Kami menyarankan Anda bermigrasi ke [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html)untuk terus menerima fitur baru, peningkatan ketersediaan, dan pembaruan keamanan.

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

# Menggunakan AWS SDK untuk Java
<a name="basics"></a>

Bagian ini memberikan informasi umum yang penting tentang pemrograman dengan AWS SDK untuk Java yang berlaku untuk semua layanan yang mungkin Anda gunakan dengan SDK.

Untuk informasi dan contoh pemrograman khusus layanan (untuk Amazon EC2, Amazon S3, Amazon SWF, dll.), Lihat Contoh [AWS SDK untuk Java Kode](prog-services.md).

**Topics**
+ [

# Praktik Terbaik untuk AWS Pengembangan dengan AWS SDK untuk Java
](best-practices.md)
+ [

# Membuat Klien Layanan
](creating-clients.md)
+ [Memberikan kredensyal sementara](credentials.md)
+ [

# Wilayah AWS Seleksi
](java-dg-region-selection.md)
+ [

# Penanganan Pengecualian
](java-dg-exceptions.md)
+ [

# Pemrograman Asinkron
](basics-async.md)
+ [

# AWS SDK untuk Java Panggilan Pencatatan
](java-dg-logging.md)
+ [

# Konfigurasi Klien
](section-client-configuration.md)
+ [

# Kebijakan Kontrol Akses
](java-dg-access-control.md)
+ [

# Mengatur JVM TTL untuk pencarian nama DNS
](jvm-ttl-dns.md)
+ [

# Mengaktifkan Metrik untuk AWS SDK untuk Java
](generating-sdk-metrics.md)

# Praktik Terbaik untuk AWS Pengembangan dengan AWS SDK untuk Java
<a name="best-practices"></a>

Praktik terbaik berikut dapat membantu Anda menghindari masalah atau masalah saat Anda mengembangkan AWS aplikasi dengan aplikasi AWS SDK untuk Java. Kami telah mengatur praktik terbaik berdasarkan layanan.

## S3
<a name="s3"></a>

### Hindari ResetExceptions
<a name="s3-avoid-resetexception"></a>

Saat Anda mengunggah objek Amazon S3 dengan menggunakan aliran (baik melalui `AmazonS3` klien atau`TransferManager`), Anda mungkin mengalami masalah konektivitas jaringan atau batas waktu. Secara default, AWS SDK untuk Java upaya untuk mencoba kembali transfer yang gagal dengan menandai aliran input sebelum dimulainya transfer dan kemudian mengatur ulang sebelum mencoba lagi.

Jika aliran tidak mendukung tanda dan reset, SDK akan melempar a [ResetException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ResetException.html)ketika ada kegagalan sementara dan percobaan ulang diaktifkan.

 **Praktik Terbaik** 

Kami menyarankan Anda menggunakan aliran yang mendukung menandai dan mengatur ulang operasi.

Cara yang paling dapat diandalkan untuk menghindari a [ResetException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ResetException.html)adalah dengan menyediakan data dengan menggunakan [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) atau [FileInputStream](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/FileInputStream.html), yang AWS SDK untuk Java dapat ditangani tanpa dibatasi oleh batas tanda dan reset.

Jika aliran bukan [FileInputStream](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/FileInputStream.html)tetapi mendukung tanda dan reset, Anda dapat mengatur batas tanda dengan menggunakan `setReadLimit` metode [RequestClientOptions](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/RequestClientOptions.html). Nilai defaultnya adalah 128 KB. Menyetel nilai batas baca ke *satu byte lebih besar dari ukuran aliran* akan secara andal menghindari a [ResetException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ResetException.html).

Misalnya, jika ukuran maksimum yang diharapkan dari aliran adalah 100.000 byte, atur batas baca menjadi 100,001 (100.000 \$1 1) byte. Tanda dan reset akan selalu bekerja untuk 100.000 byte atau kurang. Ketahuilah bahwa ini dapat menyebabkan beberapa aliran menyangga jumlah byte itu ke dalam memori.

# Membuat Klien Layanan
<a name="creating-clients"></a>

Untuk membuat permintaan Amazon Web Services, pertama-tama Anda membuat objek klien layanan. Cara yang disarankan adalah dengan menggunakan pembuat klien layanan.

Masing-masing Layanan AWS memiliki antarmuka layanan dengan metode untuk setiap tindakan di API layanan. Misalnya, antarmuka layanan untuk DynamoDB diberi nama. [AmazonDynamoDBClient](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/AmazonDynamoDBClient.html) Setiap antarmuka layanan memiliki pembangun klien yang sesuai yang dapat Anda gunakan untuk membangun implementasi antarmuka layanan. Class client builder untuk DynamoDB bernama [AmazonDynamoDBClientBuilder](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/AmazonDynamoDBClientBuilder.html).

## Memperoleh Client Builder
<a name="obtaining-a-client-builder"></a>

Untuk mendapatkan instance dari pembuat klien, gunakan metode pabrik statis`standard`, seperti yang ditunjukkan pada contoh berikut.

```
AmazonDynamoDBClientBuilder builder = AmazonDynamoDBClientBuilder.standard();
```

Setelah Anda memiliki builder, Anda dapat menyesuaikan properti klien dengan menggunakan banyak setter fasih di API builder. Misalnya, Anda dapat mengatur wilayah kustom dan penyedia kredensyal kustom, sebagai berikut.

```
AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard()
                        .withRegion(Regions.US_WEST_2)
                        .withCredentials(new ProfileCredentialsProvider("myProfile"))
                        .build();
```

**catatan**  
`withXXX`Metode fasih mengembalikan `builder` objek sehingga Anda dapat menghubungkan panggilan metode untuk kenyamanan dan untuk kode yang lebih mudah dibaca. Setelah Anda mengkonfigurasi properti yang Anda inginkan, Anda dapat memanggil `build` metode untuk membuat klien. Setelah klien dibuat, itu tidak dapat diubah dan panggilan apa pun ke `setRegion` atau `setEndpoint` akan gagal.

Pembangun dapat membuat beberapa klien dengan konfigurasi yang sama. Saat Anda menulis aplikasi, ketahuilah bahwa pembuatnya bisa berubah dan tidak aman untuk utas.

Kode berikut menggunakan builder sebagai pabrik untuk instance klien.

```
public class DynamoDBClientFactory {
    private final AmazonDynamoDBClientBuilder builder =
        AmazonDynamoDBClientBuilder.standard()
            .withRegion(Regions.US_WEST_2)
            .withCredentials(new ProfileCredentialsProvider("myProfile"));

    public AmazonDynamoDB createClient() {
        return builder.build();
    }
}
```

[Pembangun juga mengekspos setter fasih untuk [ClientConfiguration](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html)dan [RequestMetricCollector](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/metrics/RequestMetricCollector.html), dan daftar kustom 2. RequestHandler](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/handlers/RequestHandler2.html)

Berikut ini adalah contoh lengkap yang mengesampingkan semua properti yang dapat dikonfigurasi.

```
AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard()
        .withRegion(Regions.US_WEST_2)
        .withCredentials(new ProfileCredentialsProvider("myProfile"))
        .withClientConfiguration(new ClientConfiguration().withRequestTimeout(5000))
        .withMetricsCollector(new MyCustomMetricsCollector())
        .withRequestHandlers(new MyCustomRequestHandler(), new MyOtherCustomRequestHandler)
        .build();
```

## Membuat Klien Async
<a name="creating-async-clients"></a>

Ini AWS SDK untuk Java memiliki klien asinkron (atau asinkron) untuk setiap layanan (kecuali untuk Amazon S3), dan pembuat klien asinkron yang sesuai untuk setiap layanan.

### Untuk membuat klien DynamoDB async dengan default ExecutorService
<a name="w3aab9c13b9b5"></a>

```
AmazonDynamoDBAsync ddbAsync = AmazonDynamoDBAsyncClientBuilder.standard()
        .withRegion(Regions.US_WEST_2)
        .withCredentials(new ProfileCredentialsProvider("myProfile"))
        .build();
```

Selain opsi konfigurasi yang didukung oleh pembuat klien sinkron (atau sinkronisasi), klien asinkron memungkinkan Anda menyetel kustom [ExecutorFactory](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/client/builder/ExecutorFactory.html)untuk mengubah yang digunakan klien `ExecutorService` asinkron. `ExecutorFactory`adalah antarmuka fungsional, sehingga berinteraksi dengan ekspresi lambda Java 8 dan referensi metode.

### Untuk membuat klien async dengan eksekutor kustom
<a name="w3aab9c13b9b9"></a>

```
AmazonDynamoDBAsync ddbAsync = AmazonDynamoDBAsyncClientBuilder.standard()
            .withExecutorFactory(() -> Executors.newFixedThreadPool(10))
            .build();
```

## Menggunakan DefaultClient
<a name="using-defaultclient"></a>

Baik pembuat klien sinkronisasi dan asinkron memiliki metode pabrik lain bernama. `defaultClient` Metode ini membuat klien layanan dengan konfigurasi default, menggunakan rantai penyedia default untuk memuat kredensyal dan file. Wilayah AWS Jika kredensyal atau wilayah tidak dapat ditentukan dari lingkungan tempat aplikasi berjalan, panggilan ke `defaultClient` gagal. Lihat [Bekerja dengan AWS Kredensil](credentials.md) dan [Wilayah AWS Seleksi](java-dg-region-selection.md) untuk informasi selengkapnya tentang bagaimana kredensil dan wilayah ditentukan.

### Untuk membuat klien layanan default
<a name="w3aab9c13c11b5"></a>

```
AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();
```

## Siklus Hidup Klien
<a name="client-lifecycle"></a>

Klien layanan di SDK aman untuk benang dan, untuk kinerja terbaik, Anda harus memperlakukannya sebagai objek yang berumur panjang. Setiap klien memiliki sumber daya kolam koneksi sendiri. Secara eksplisit menutup klien ketika mereka tidak lagi diperlukan untuk menghindari kebocoran sumber daya.

Untuk secara eksplisit mematikan klien, panggil metode. `shutdown` Setelah menelepon`shutdown`, semua sumber daya klien dilepaskan dan klien tidak dapat digunakan.

### Untuk mematikan klien
<a name="w3aab9c13c13b7"></a>

```
AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();
ddb.shutdown();
// Client is now unusable
```

# Memberikan kredensi sementara ke AWS SDK untuk Java
<a name="credentials"></a>

Untuk membuat permintaan Amazon Web Services, Anda harus memberikan kredensi AWS sementara AWS SDK untuk Java untuk digunakan saat memanggil layanan. Anda dapat melakukan ini dengan cara berikut:
+ Gunakan rantai penyedia kredensyal default *(disarankan)*.
+ Gunakan penyedia kredensyal atau rantai penyedia tertentu (atau buat sendiri).
+ Berikan sendiri kredensi sementara dalam kode.

## Menggunakan Rantai Penyedia Kredensyal Default
<a name="credentials-default"></a>

[Saat Anda menginisialisasi klien layanan baru tanpa memberikan argumen apa pun, AWS SDK untuk Java upaya untuk menemukan kredensyal sementara dengan menggunakan *rantai penyedia kredensyal default yang diimplementasikan oleh kelas* Default. AWSCredentials ProviderChain](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html) Rantai penyedia kredensyal default mencari kredensyal dalam urutan ini:

1.  **Variabel lingkungan** -`AWS_ACCESS_KEY_ID`, `AWS_SECRET_KEY` atau`AWS_SECRET_ACCESS_KEY`, dan`AWS_SESSION_TOKEN`. AWS SDK untuk Java Menggunakan [EnvironmentVariableCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/EnvironmentVariableCredentialsProvider.html)kelas untuk memuat kredensyal ini.

1.  **Properti sistem Java** -`aws.accessKeyId`, `aws.secretKey` (tetapi tidak`aws.secretAccessKey`), dan`aws.sessionToken`. AWS SDK untuk Java Penggunaan [SystemPropertiesCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/SystemPropertiesCredentialsProvider.html)untuk memuat kredensyal ini.

1.  **Kredensyal Token Identitas Web** dari lingkungan atau wadah.

1.  **File profil kredensi default** - biasanya terletak di `~/.aws/credentials` (lokasi dapat bervariasi per platform), dan dibagikan oleh banyak AWS SDKs dan oleh. AWS CLI AWS SDK untuk Java Penggunaan [ProfileCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/profile/ProfileCredentialsProvider.html)untuk memuat kredensyal ini.

   Anda dapat membuat file kredensional dengan menggunakan `aws configure` perintah yang disediakan oleh AWS CLI, atau Anda dapat membuatnya dengan mengedit file dengan editor teks. Untuk informasi tentang format file kredensyal, lihat Format File [AWS Kredensial](#credentials-file-format).

1.  **Kredensyal kontainer Amazon ECS** - dimuat dari Amazon ECS jika variabel lingkungan disetel. `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` AWS SDK untuk Java Penggunaan [ContainerCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/ContainerCredentialsProvider.html)untuk memuat kredensyal ini. Anda dapat menentukan alamat IP untuk nilai ini.

1.  **Instance profile credentials** - digunakan pada instans EC2, dan dikirimkan melalui layanan metadata. Amazon EC2 AWS SDK untuk Java Penggunaan [InstanceProfileCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/InstanceProfileCredentialsProvider.html)untuk memuat kredensyal ini. Anda dapat menentukan alamat IP untuk nilai ini.
**catatan**  
Kredensyal profil instance hanya digunakan jika tidak `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` disetel. Untuk informasi selengkapnya, lihat [EC2ContainerCredentialsProviderWrapper](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/EC2ContainerCredentialsProviderWrapper.html).

### Tetapkan kredensyal sementara
<a name="setting-credentials"></a>

Untuk dapat menggunakan kredensyal AWS sementara, mereka harus ditetapkan *setidaknya di salah satu* lokasi sebelumnya. Untuk informasi tentang menyetel kredensyal, lihat topik berikut:
+ Untuk menentukan kredensyal di *lingkungan* atau dalam *file profil kredensyal* default, lihat. [Konfigurasikan kredensyal sementara](setup-credentials.md#setup-credentials-setting)
+ Untuk mengatur *properti sistem* Java, lihat tutorial [System Properties](http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html) di situs web resmi *Java Tutorial*.
+ Untuk menyiapkan dan menggunakan *kredensil profil instans* dengan instans EC2 Anda, lihat [Menggunakan Peran IAM untuk Memberikan Akses ke Sumber Daya pada](java-dg-roles.md). AWS Amazon EC2

### Menetapkan profil kredensyal alternatif
<a name="setting-an-alternate-credentials-profile"></a>

 AWS SDK untuk Java Menggunakan profil *default secara default*, tetapi ada cara untuk menyesuaikan profil mana yang bersumber dari file kredensyal.

Anda dapat menggunakan variabel lingkungan AWS Profil untuk mengubah profil yang dimuat oleh SDK.

*Misalnya, di Linux, macOS, atau Unix Anda akan menjalankan perintah berikut untuk mengubah profil ke MyProfile.*

```
export AWS_PROFILE="myProfile"
```

Di Windows Anda akan menggunakan yang berikut ini.

```
set AWS_PROFILE="myProfile"
```

Menyetel variabel `AWS_PROFILE` lingkungan memengaruhi pemuatan kredensi untuk semua yang didukung secara resmi AWS SDKs dan Alat (termasuk AWS CLI dan AWS Tools for Windows PowerShell). Untuk mengubah hanya profil untuk aplikasi Java, Anda dapat menggunakan properti sistem `aws.profile` sebagai gantinya.

**catatan**  
Variabel lingkungan lebih diutamakan daripada properti sistem.

### Menetapkan lokasi file kredensyal alternatif
<a name="setting-an-alternate-credentials-file-location"></a>

 AWS SDK untuk Java Memuat kredensyal AWS sementara secara otomatis dari lokasi file kredensyal default. Namun, Anda juga dapat menentukan lokasi dengan menyetel variabel `AWS_CREDENTIAL_PROFILES_FILE` lingkungan dengan jalur lengkap ke file kredensyal.

Anda dapat menggunakan fitur ini untuk sementara mengubah lokasi di mana AWS SDK untuk Java mencari file kredensional Anda (misalnya, dengan mengatur variabel ini dengan baris perintah). Atau Anda dapat mengatur variabel lingkungan di lingkungan pengguna atau sistem Anda untuk mengubahnya untuk pengguna atau seluruh sistem.

#### Untuk mengganti lokasi berkas kredensial default
<a name="w3aab9c15b9c11b7b1"></a>
+ Atur variabel `AWS_CREDENTIAL_PROFILES_FILE` lingkungan ke lokasi file AWS kredensyal Anda.
  + Di Linux, macOS, atau Unix, gunakan:

    ```
    export AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
    ```
  + Di Windows, gunakan:

    ```
    set AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
    ```

### `Credentials`format berkas
<a name="credentials-file-format"></a>

Dengan mengikuti [petunjuk dalam pengaturan Dasar](signup-create-iam-user.md#setup-temp-creds) panduan ini, file kredensyal Anda harus memiliki format dasar berikut.

```
[default]
aws_access_key_id=<value from AWS access portal>
aws_secret_access_key=<value from AWS access portal>
aws_session_token=<value from AWS access portal>

[profile2]
aws_access_key_id=<value from AWS access portal>
aws_secret_access_key=<value from AWS access portal>
aws_session_token=<value from AWS access portal>
```

Nama profil ditentukan dalam tanda kurung siku (misalnya,`[default]`), diikuti oleh bidang yang dapat dikonfigurasi di profil itu sebagai pasangan nilai kunci. Anda dapat memiliki beberapa profil di `credentials` file Anda, yang dapat ditambahkan atau diedit menggunakan `aws configure --profile PROFILE_NAME ` untuk memilih profil yang akan dikonfigurasi.

Anda dapat menentukan bidang tambahan, seperti`metadata_service_timeout`, dan`metadata_service_num_attempts`. Ini tidak dapat dikonfigurasi dengan CLI—Anda harus mengedit file dengan tangan jika Anda ingin menggunakannya. Untuk informasi selengkapnya tentang file konfigurasi dan bidangnya yang tersedia, lihat [Mengonfigurasi AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) dalam Panduan AWS Command Line Interface Pengguna.

### Memuat kredensyal
<a name="loading-credentials"></a>

Setelah Anda menyetel kredensyal sementara, SDK akan memuatnya dengan menggunakan rantai penyedia kredensyal default.

Untuk melakukan ini, Anda membuat instance Layanan AWS klien tanpa secara eksplisit memberikan kredensyal kepada pembangun, sebagai berikut.

```
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                       .withRegion(Regions.US_WEST_2)
                       .build();
```

## Tentukan penyedia kredensyal atau rantai penyedia
<a name="credentials-specify-provider"></a>

Anda dapat menentukan penyedia kredensyal yang berbeda dari rantai penyedia kredensyal *default* dengan menggunakan pembuat klien.

Anda memberikan instance penyedia kredensial atau rantai penyedia ke pembuat klien yang menggunakan antarmuka [AWSCredentialsPenyedia sebagai masukan](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/AWSCredentialsProvider.html). Contoh berikut menunjukkan cara menggunakan kredensyal *lingkungan* secara khusus.

```
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                       .withCredentials(new EnvironmentVariableCredentialsProvider())
                       .build();
```

[Untuk daftar lengkap penyedia kredensi AWS SDK untuk Java yang disediakan dan rantai penyedia, lihat **Semua Kelas Penerapan yang Dikenal** di AWSCredentials Penyedia.](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/AWSCredentialsProvider.html)

**catatan**  
Anda dapat menggunakan teknik ini untuk menyediakan penyedia kredensi atau rantai penyedia yang Anda buat dengan menggunakan penyedia kredensyal Anda sendiri yang mengimplementasikan `AWSCredentialsProvider` antarmuka, atau dengan mensubklasifikasikan kelas. [AWSCredentialsProviderChain](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/AWSCredentialsProviderChain.html)

## Secara eksplisit menentukan kredensyal sementara
<a name="credentials-explicit"></a>

Jika rantai kredensi default atau penyedia atau rantai penyedia khusus atau khusus tidak berfungsi untuk kode Anda, Anda dapat menyetel kredensional yang Anda berikan secara eksplisit. Jika Anda telah mengambil kredensyal sementara menggunakan AWS STS, gunakan metode ini untuk menentukan kredensyal untuk akses. AWS 

1. Buat instance [BasicSessionCredentials](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/BasicSessionCredentials.html)kelas, dan berikan kunci AWS akses, kunci AWS rahasia, dan token AWS sesi yang akan digunakan SDK untuk koneksi.

1. Buat [AWSStaticCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/AWSStaticCredentialsProvider.html)dengan `AWSCredentials` objek.

1. Konfigurasikan pembuat klien dengan `AWSStaticCredentialsProvider` dan bangun klien.

Berikut adalah contohnya.

```
BasicSessionCredentials awsCreds = new BasicSessionCredentials("access_key_id", "secret_key_id", "session_token");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                        .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                        .build();
```

## Info Selengkapnya
<a name="more-info"></a>
+  [Mendaftar AWS dan Membuat Pengguna IAM](signup-create-iam-user.md) 
+  [Menyiapkan AWS Kredensyal dan Wilayah untuk Pembangunan](setup-credentials.md) 
+  [Menggunakan Peran IAM untuk Memberikan Akses ke AWS Sumber Daya Amazon EC2](java-dg-roles.md) 

# Wilayah AWS Seleksi
<a name="java-dg-region-selection"></a>

Wilayah memungkinkan Anda mengakses AWS layanan yang secara fisik berada di wilayah geografis tertentu. Ini dapat berguna baik untuk redundansi dan untuk menjaga data dan aplikasi Anda berjalan dekat dengan tempat Anda dan pengguna Anda akan mengaksesnya.

## Memeriksa Ketersediaan Layanan di Wilayah
<a name="region-selection-query-service"></a>

Untuk melihat apakah tertentu Layanan AWS tersedia di suatu wilayah, gunakan `isServiceSupported` metode di wilayah yang ingin Anda gunakan.

```
Region.getRegion(Regions.US_WEST_2)
    .isServiceSupported(AmazonDynamoDB.ENDPOINT_PREFIX);
```

Lihat dokumentasi kelas [Regions](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/regions/Regions.html) untuk wilayah yang dapat Anda tentukan, dan gunakan awalan titik akhir layanan untuk melakukan kueri. Setiap awalan titik akhir layanan didefinisikan dalam antarmuka layanan. [Misalnya, awalan DynamoDB endpoint didefinisikan dalam AmazonDynamo DB.](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/AmazonDynamoDB.html)

## Memilih Wilayah
<a name="region-selection-choose-region"></a>

Dimulai dengan versi 1.4 AWS SDK untuk Java, Anda dapat menentukan nama wilayah dan SDK akan secara otomatis memilih titik akhir yang sesuai untuk Anda. Untuk memilih endpoint sendiri, lihat [Memilih Endpoint Spesifik](#region-selection-choose-endpoint).

Untuk menetapkan wilayah secara eksplisit, kami sarankan Anda menggunakan enum [Regions](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/regions/Regions.html). Ini adalah enumerasi dari semua wilayah yang tersedia untuk umum. Untuk membuat klien dengan wilayah dari enum, gunakan kode berikut.

```
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard()
                    .withRegion(Regions.US_WEST_2)
                    .build();
```

Jika wilayah yang Anda coba gunakan tidak ada di `Regions` enum, Anda dapat mengatur wilayah menggunakan *string* yang mewakili nama wilayah.

```
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard()
                    .withRegion("{region_api_default}")
                    .build();
```

**catatan**  
Setelah Anda membangun klien dengan pembangun, itu *tidak dapat diubah* dan wilayah *tidak dapat diubah*. Jika Anda bekerja dengan beberapa Wilayah AWS untuk layanan yang sama, Anda harus membuat beberapa klien—satu per wilayah.

## Memilih Endpoint Tertentu
<a name="region-selection-choose-endpoint"></a>

Setiap AWS klien dapat dikonfigurasi untuk menggunakan *titik akhir tertentu* dalam suatu wilayah dengan memanggil `withEndpointConfiguration` metode saat membuat klien.

Misalnya, untuk mengkonfigurasi Amazon S3 klien untuk menggunakan Wilayah Eropa (Irlandia), gunakan kode berikut.

```
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
     .withEndpointConfiguration(new EndpointConfiguration(
          "https://s3.eu-west-1.amazonaws.com",
          "eu-west-1"))
     .withCredentials(CREDENTIALS_PROVIDER)
     .build();
```

Lihat [Wilayah dan Titik Akhir](https://docs.aws.amazon.com/general/latest/gr/rande.html) untuk daftar wilayah saat ini dan titik akhir yang sesuai untuk semua AWS layanan.

## Secara Otomatis Menentukan Wilayah dari Lingkungan
<a name="automatically-determine-the-aws-region-from-the-environment"></a>

**penting**  
Bagian ini hanya berlaku ketika menggunakan [pembuat klien](creating-clients.md) untuk mengakses AWS layanan. AWS klien yang dibuat dengan menggunakan konstruktor klien tidak akan secara otomatis menentukan wilayah dari lingkungan dan akan, sebagai gantinya, menggunakan wilayah SDK *default* ()USEast1.

Saat menjalankan on Amazon EC2 atau Lambda, Anda mungkin ingin mengonfigurasi klien untuk menggunakan wilayah yang sama dengan tempat kode Anda berjalan. Ini memisahkan kode Anda dari lingkungan tempat ia berjalan dan membuatnya lebih mudah untuk menerapkan aplikasi Anda ke beberapa wilayah untuk latensi atau redundansi yang lebih rendah.

 *Anda harus menggunakan pembuat klien agar SDK secara otomatis mendeteksi wilayah tempat kode Anda berjalan.* 

Untuk menggunakan rantai credential/region penyedia default untuk menentukan wilayah dari lingkungan, gunakan `defaultClient` metode pembuat klien.

```
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();
```

Ini sama dengan menggunakan `standard` diikuti oleh`build`.

```
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard()
                    .build();
```

Jika Anda tidak secara eksplisit menyetel wilayah menggunakan `withRegion` metode, SDK akan berkonsultasi dengan rantai penyedia wilayah default untuk mencoba dan menentukan wilayah yang akan digunakan.

### Rantai Penyedia Wilayah Default
<a name="default-region-provider-chain"></a>

 **Berikut ini adalah proses pencarian wilayah:** 

1. Wilayah eksplisit apa pun yang disetel dengan menggunakan `withRegion` atau `setRegion` pada pembuat itu sendiri lebih diutamakan daripada yang lain.

1. Variabel `AWS_REGION` lingkungan diperiksa. Jika disetel, wilayah itu digunakan untuk mengkonfigurasi klien.
**catatan**  
Variabel lingkungan ini diatur oleh Lambda wadah.

1. SDK memeriksa file konfigurasi AWS bersama (biasanya terletak di`~/.aws/config`). Jika properti *region* ada, SDK menggunakannya.
   + Variabel `AWS_CONFIG_FILE` lingkungan dapat digunakan untuk menyesuaikan lokasi file konfigurasi bersama.
   + Variabel `AWS_PROFILE` lingkungan atau properti `aws.profile` sistem dapat digunakan untuk menyesuaikan profil yang dimuat oleh SDK.

1. SDK mencoba menggunakan layanan metadata Amazon EC2 instance untuk menentukan wilayah instance yang sedang berjalan. Amazon EC2 

1. Jika SDK masih belum menemukan wilayah pada saat ini, pembuatan klien gagal dengan pengecualian.

Saat mengembangkan AWS aplikasi, pendekatan umum adalah dengan menggunakan *file konfigurasi bersama* (dijelaskan dalam [Menggunakan Rantai Penyedia Kredensyal Default](credentials.md#credentials-default)) untuk mengatur wilayah untuk pengembangan lokal, dan mengandalkan rantai penyedia wilayah default untuk menentukan wilayah saat berjalan pada AWS infrastruktur. Ini sangat menyederhanakan pembuatan klien dan membuat aplikasi Anda portabel.

# Penanganan Pengecualian
<a name="java-dg-exceptions"></a>

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

## Mengapa Pengecualian Tidak Dicentang?
<a name="why-unchecked-exceptions"></a>

Pengecualian AWS SDK untuk Java menggunakan runtime (atau tidak dicentang) alih-alih pengecualian yang dicentang karena alasan berikut:
+ Untuk memungkinkan pengembang mengontrol kesalahan yang ingin mereka tangani tanpa memaksa mereka untuk menangani kasus luar biasa yang tidak mereka khawatirkan (dan membuat kode mereka terlalu bertele-tele)
+ Untuk mencegah masalah skalabilitas yang melekat pada pengecualian yang diperiksa dalam aplikasi besar

Secara umum, pengecualian yang diperiksa bekerja dengan baik pada skala kecil, tetapi dapat menjadi merepotkan karena aplikasi tumbuh dan menjadi lebih kompleks.

Untuk informasi selengkapnya tentang penggunaan pengecualian yang dicentang dan tidak dicentang, lihat:
+  [Pengecualian yang Tidak Dicentang — Kontroversi](http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html) 
+  [Masalah dengan Pengecualian yang Diperiksa](http://www.artima.com/intv/handcuffs2.html) 
+  [Pengecualian Java yang diperiksa adalah kesalahan (dan inilah yang ingin saya lakukan tentang hal itu)](http://radio-weblogs.com/0122027/stories/2003/04/01/JavasCheckedExceptionsWereAMistake.html) 

## AmazonServiceException (dan Subclass)
<a name="amazonserviceexception-and-subclasses"></a>

 [AmazonServiceException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/AmazonServiceException.html)adalah pengecualian paling umum yang akan Anda alami saat menggunakan AWS SDK untuk Java. Pengecualian ini merupakan respons kesalahan dari file Layanan AWS. Misalnya, jika Anda mencoba menghentikan Amazon EC2 instance yang tidak ada, EC2 akan mengembalikan respons kesalahan dan semua detail respons kesalahan itu akan disertakan dalam `AmazonServiceException` yang dilemparkan. Untuk beberapa kasus, subkelas dilemparkan untuk memungkinkan pengembang mengontrol secara halus atas penanganan kasus kesalahan melalui blok catch. `AmazonServiceException`

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

 `AmazonServiceException`memberi Anda informasi seperti:
+ Kode status HTTP yang dikembalikan
+ Kode AWS kesalahan yang dikembalikan
+ Pesan kesalahan terperinci dari layanan
+  AWS ID permintaan untuk permintaan yang gagal

 `AmazonServiceException`juga mencakup informasi tentang apakah permintaan yang gagal adalah kesalahan pemanggil (permintaan dengan nilai ilegal) atau kesalahan (kesalahan layanan internal). Layanan AWS

## AmazonClientException
<a name="amazonclientexception"></a>

 [AmazonClientException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/AmazonClientException.html)menunjukkan bahwa masalah terjadi di dalam kode klien Java, baik saat mencoba mengirim permintaan ke AWS atau saat mencoba mengurai respons dari AWS. An `AmazonClientException` umumnya lebih parah daripada`AmazonServiceException`, dan menunjukkan masalah besar yang mencegah klien melakukan panggilan layanan ke AWS layanan. Misalnya, AWS SDK untuk Java melempar `AmazonClientException` jika tidak ada koneksi jaringan yang tersedia ketika Anda mencoba memanggil operasi pada salah satu klien.

# Pemrograman Asinkron
<a name="basics-async"></a>

Anda dapat menggunakan metode *sinkron* atau *asinkron* untuk memanggil operasi pada layanan. AWS Metode sinkron memblokir eksekusi thread Anda hingga klien menerima respons dari layanan. Metode asinkron segera kembali, memberikan kontrol kembali ke utas panggilan tanpa menunggu respons.

Karena metode asinkron kembali sebelum respons tersedia, Anda memerlukan cara untuk mendapatkan respons saat sudah siap. AWS SDK untuk Java Ini menyediakan dua cara: *objek masa depan* dan *metode callback*.

## Java Berjangka
<a name="basics-async-future"></a>

*Metode asinkron dalam AWS SDK untuk Java mengembalikan objek [Future](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/Future.html) yang berisi hasil operasi asinkron di masa depan.*

Panggil `Future` `isDone()` metode untuk melihat apakah layanan telah menyediakan objek respons. Ketika respon sudah siap, Anda bisa mendapatkan objek respon dengan memanggil `Future` `get()` metode. Anda dapat menggunakan mekanisme ini untuk melakukan polling secara berkala untuk hasil operasi asinkron sementara aplikasi Anda terus bekerja pada hal-hal lain.

Berikut adalah contoh operasi asinkron yang memanggil Lambda fungsi, menerima `Future` yang dapat menampung objek. [InvokeResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/model/InvokeResult.html) `InvokeResult`Objek diambil hanya setelah `isDone()` itu`true`.

```
import com.amazonaws.services.lambda.AWSLambdaAsyncClient;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
import java.nio.ByteBuffer;
import java.util.concurrent.Future;
import java.util.concurrent.ExecutionException;

public class InvokeLambdaFunctionAsync
{
    public static void main(String[] args)
    {
        String function_name = "HelloFunction";
        String function_input = "{\"who\":\"SDK for Java\"}";

        AWSLambdaAsync lambda = AWSLambdaAsyncClientBuilder.defaultClient();
        InvokeRequest req = new InvokeRequest()
            .withFunctionName(function_name)
            .withPayload(ByteBuffer.wrap(function_input.getBytes()));

        Future<InvokeResult> future_res = lambda.invokeAsync(req);

        System.out.print("Waiting for future");
        while (future_res.isDone() == false) {
            System.out.print(".");
            try {
                Thread.sleep(1000);
            }
            catch (InterruptedException e) {
                System.err.println("\nThread.sleep() was interrupted!");
                System.exit(1);
            }
        }

        try {
            InvokeResult res = future_res.get();
            if (res.getStatusCode() == 200) {
                System.out.println("\nLambda function returned:");
                ByteBuffer response_payload = res.getPayload();
                System.out.println(new String(response_payload.array()));
            }
            else {
                System.out.format("Received a non-OK response from {AWS}: %d\n",
                        res.getStatusCode());
            }
        }
        catch (InterruptedException | ExecutionException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }

        System.exit(0);
    }
}
```

## Callback Asinkron
<a name="basics-async-callback"></a>

Selain menggunakan `Future` objek Java untuk memantau status permintaan asinkron, SDK juga memungkinkan Anda untuk mengimplementasikan kelas yang menggunakan antarmuka. [AsyncHandler](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/handlers/AsyncHandler.html) `AsyncHandler`menyediakan dua metode yang dipanggil tergantung pada bagaimana permintaan selesai: `onSuccess` dan`onError`.

Keuntungan utama dari pendekatan antarmuka callback adalah membebaskan Anda dari keharusan melakukan polling `Future` objek untuk mengetahui kapan permintaan telah selesai. Sebagai gantinya, kode Anda dapat segera memulai aktivitas berikutnya, dan mengandalkan SDK untuk memanggil handler Anda pada waktu yang tepat.

```
import com.amazonaws.services.lambda.AWSLambdaAsync;
import com.amazonaws.services.lambda.AWSLambdaAsyncClientBuilder;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
import com.amazonaws.handlers.AsyncHandler;
import java.nio.ByteBuffer;
import java.util.concurrent.Future;

public class InvokeLambdaFunctionCallback
{
    private class AsyncLambdaHandler implements AsyncHandler<InvokeRequest, InvokeResult>
    {
        public void onSuccess(InvokeRequest req, InvokeResult res) {
            System.out.println("\nLambda function returned:");
            ByteBuffer response_payload = res.getPayload();
            System.out.println(new String(response_payload.array()));
            System.exit(0);
        }

        public void onError(Exception e) {
            System.out.println(e.getMessage());
            System.exit(1);
        }
    }

    public static void main(String[] args)
    {
        String function_name = "HelloFunction";
        String function_input = "{\"who\":\"SDK for Java\"}";

        AWSLambdaAsync lambda = AWSLambdaAsyncClientBuilder.defaultClient();
        InvokeRequest req = new InvokeRequest()
            .withFunctionName(function_name)
            .withPayload(ByteBuffer.wrap(function_input.getBytes()));

        Future<InvokeResult> future_res = lambda.invokeAsync(req, new AsyncLambdaHandler());

        System.out.print("Waiting for async callback");
        while (!future_res.isDone() && !future_res.isCancelled()) {
            // perform some other tasks...
            try {
                Thread.sleep(1000);
            }
            catch (InterruptedException e) {
                System.err.println("Thread.sleep() was interrupted!");
                System.exit(0);
            }
            System.out.print(".");
        }
    }
}
```

## Praktik Terbaik
<a name="basics-async-tips"></a>

### Eksekusi Callback
<a name="callback-execution"></a>

Implementasi Anda `AsyncHandler` dijalankan di dalam kumpulan utas yang dimiliki oleh klien asinkron. Kode pendek dan cepat dieksekusi paling tepat di dalam `AsyncHandler` implementasi Anda. Kode yang berjalan lama atau memblokir di dalam metode handler Anda dapat menyebabkan pertentangan untuk kumpulan utas yang digunakan oleh klien asinkron, dan dapat mencegah klien mengeksekusi permintaan. Jika Anda memiliki tugas yang berjalan lama yang perlu dimulai dari callback, minta callback menjalankan tugasnya di thread baru atau di kumpulan utas yang dikelola oleh aplikasi Anda.

### Konfigurasi Kolam Benang
<a name="thread-pool-configuration"></a>

Klien asinkron di AWS SDK untuk Java menyediakan kumpulan utas default yang seharusnya berfungsi untuk sebagian besar aplikasi. Anda dapat menerapkan kustom [ExecutorService](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/ExecutorService.html)dan meneruskannya ke klien AWS SDK untuk Java asinkron untuk kontrol lebih besar atas bagaimana kumpulan utas dikelola.

Misalnya, Anda dapat memberikan `ExecutorService` implementasi yang menggunakan kustom [ThreadFactory](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/ThreadFactory.html)untuk mengontrol cara nama thread di pool, atau untuk mencatat informasi tambahan tentang penggunaan thread.

### Akses Asinkron
<a name="s3-asynchronous-access"></a>

[TransferManager](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/TransferManager.html)Kelas di SDK menawarkan dukungan asinkron untuk bekerja dengan. Amazon S3`TransferManager`mengelola unggahan dan unduhan asinkron, menyediakan pelaporan kemajuan mendetail tentang transfer, dan mendukung panggilan balik ke berbagai peristiwa.

# AWS SDK untuk Java Panggilan Pencatatan
<a name="java-dg-logging"></a>

 AWS SDK untuk Java Ini diinstrumentasi dengan [Apache Commons Logging](http://commons.apache.org/proper/commons-logging/guide.html), yang merupakan lapisan abstraksi yang memungkinkan penggunaan salah satu dari beberapa sistem logging saat runtime.

Sistem logging yang didukung termasuk Java Logging Framework dan Apache Log4j, antara lain. Topik ini menunjukkan cara menggunakan Log4j. Anda dapat menggunakan fungsionalitas logging SDK tanpa membuat perubahan apa pun pada kode aplikasi Anda.

Untuk mempelajari lebih lanjut tentang [Log4j](http://logging.apache.org/log4j/2.x/), lihat situs web [Apache](http://www.apache.org/).

**catatan**  
Topik ini berfokus pada Log4j 1.x. Log4j2 tidak secara langsung mendukung Apache Commons Logging, tetapi menyediakan adaptor yang mengarahkan panggilan logging secara otomatis ke Log4j2 menggunakan antarmuka Apache Commons Logging. Untuk informasi selengkapnya, lihat [Commons Logging Bridge di dokumentasi](https://logging.apache.org/log4j/2.x/log4j-jcl.html) Log4j2.

## Unduh Log4J JAR
<a name="download-the-log4j-jar"></a>

Untuk menggunakan Log4j dengan SDK, Anda perlu mengunduh Log4j JAR dari situs web Apache. SDK tidak termasuk JAR. Salin file JAR ke lokasi yang ada di classpath Anda.

Log4j menggunakan file konfigurasi, log4j.properties. Contoh file konfigurasi ditunjukkan di bawah ini. Salin file konfigurasi ini ke direktori di classpath Anda. Log4j JAR dan file log4j.properties tidak harus berada di direktori yang sama.

[File konfigurasi log4j.properties menentukan properti seperti [tingkat logging](http://logging.apache.org/log4j/2.x/manual/configuration.html#Loggers), di mana output logging dikirim (misalnya, [ke file atau ke konsol](http://logging.apache.org/log4j/2.x/manual/appenders.html)), dan format output.](http://logging.apache.org/log4j/2.x/manual/layouts.html) Level logging adalah granularitas output yang dihasilkan logger. *Log4j mendukung konsep beberapa hierarki logging.* Level logging diatur secara independen untuk setiap hierarki. Dua hierarki logging berikut tersedia di AWS SDK untuk Java:
+ log4j.logger.com.amazonaws
+ log4j.logger.org.apache.http.wire

## Mengatur Classpath
<a name="sdk-net-logging-classpath"></a>

Baik Log4j JAR dan file log4j.properties harus terletak di classpath Anda. Jika Anda menggunakan [Apache Ant](http://ant.apache.org/manual/), atur classpath di `path` elemen dalam file Ant Anda. Contoh berikut menunjukkan elemen path dari file Ant untuk Amazon S3 [contoh](https://github.com/aws/aws-sdk-java/blob/master/src/samples/AmazonS3/build.xml) yang disertakan dengan SDK.

```
<path id="aws.java.sdk.classpath">
  <fileset dir="../../third-party" includes="**/*.jar"/>
  <fileset dir="../../lib" includes="**/*.jar"/>
  <pathelement location="."/>
</path>
```

****Jika Anda menggunakan Eclipse IDE, Anda dapat mengatur classpath dengan membuka menu dan menavigasi ke **Project \$1 Properties** \$1 Java Build Path.****

## Kesalahan dan Peringatan Khusus Layanan
<a name="sdk-net-logging-service"></a>

Sebaiknya Anda selalu membiarkan hierarki logger “com.amazonaws” disetel ke “WARN” untuk menangkap pesan penting apa pun dari pustaka klien. Misalnya, jika Amazon S3 klien mendeteksi bahwa aplikasi Anda belum menutup `InputStream` dan dapat membocorkan sumber daya dengan benar, klien S3 melaporkannya melalui pesan peringatan ke log. Ini juga memastikan bahwa pesan dicatat jika klien memiliki masalah dalam menangani permintaan atau tanggapan.

File log4j.properties berikut menyetel `rootLogger` ke WARN, yang menyebabkan pesan peringatan dan kesalahan dari semua logger dalam hierarki “com.amazonaws” disertakan. Atau, Anda dapat secara eksplisit mengatur logger com.amazonaws ke WARN.

```
log4j.rootLogger=WARN, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c -  %m%n
# Or you can explicitly enable WARN and ERROR messages for the {AWS} Java clients
log4j.logger.com.amazonaws=WARN
```

## Pencatatan Ringkasan Permintaan/Tanggapan
<a name="sdk-net-logging-request-response"></a>

Setiap permintaan untuk Layanan AWS menghasilkan ID AWS permintaan unik yang berguna jika Anda mengalami masalah dengan Layanan AWS cara menangani permintaan. AWS permintaan dapat diakses IDs secara terprogram melalui objek Exception di SDK untuk panggilan layanan yang gagal, dan juga dapat dilaporkan melalui tingkat log DEBUG di logger “com.amazonaws.request”.

File log4j.properties berikut memungkinkan ringkasan permintaan dan tanggapan, termasuk permintaan. AWS IDs

```
log4j.rootLogger=WARN, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c -  %m%n
# Turn on DEBUG logging in com.amazonaws.request to log
# a summary of requests/responses with {AWS} request IDs
log4j.logger.com.amazonaws.request=DEBUG
```

Berikut adalah contoh dari output log.

```
2009-12-17 09:53:04,269 [main] DEBUG com.amazonaws.request - Sending
Request: POST https://rds.amazonaws.com / Parameters: (MaxRecords: 20,
Action: DescribeEngineDefaultParameters, SignatureMethod: HmacSHA256,
AWSAccessKeyId: ACCESSKEYID, Version: 2009-10-16, SignatureVersion: 2,
Engine: mysql5.1, Timestamp: 2009-12-17T17:53:04.267Z, Signature:
q963XH63Lcovl5Rr71APlzlye99rmWwT9DfuQaNznkD, ) 2009-12-17 09:53:04,464
[main] DEBUG com.amazonaws.request - Received successful response: 200, {AWS}
Request ID: 694d1242-cee0-c85e-f31f-5dab1ea18bc6 2009-12-17 09:53:04,469
[main] DEBUG com.amazonaws.request - Sending Request: POST
https://rds.amazonaws.com / Parameters: (ResetAllParameters: true, Action:
ResetDBParameterGroup, SignatureMethod: HmacSHA256, DBParameterGroupName:
java-integ-test-param-group-0000000000000, AWSAccessKeyId: ACCESSKEYID,
Version: 2009-10-16, SignatureVersion: 2, Timestamp:
2009-12-17T17:53:04.467Z, Signature:
9WcgfPwTobvLVcpyhbrdN7P7l3uH0oviYQ4yZ+TQjsQ=, )

2009-12-17 09:53:04,646 [main] DEBUG com.amazonaws.request - Received
successful response: 200, {AWS} Request ID:
694d1242-cee0-c85e-f31f-5dab1ea18bc6
```

## Penebangan Kawat Verbose
<a name="sdk-net-logging-verbose"></a>

Dalam beberapa kasus, akan berguna untuk melihat permintaan dan tanggapan yang tepat yang AWS SDK untuk Java dikirim dan diterima. Anda tidak boleh mengaktifkan pencatatan ini di sistem produksi karena menulis permintaan besar (misalnya, file yang diunggah Amazon S3) atau tanggapan dapat memperlambat aplikasi secara signifikan. Jika Anda benar-benar membutuhkan akses ke informasi ini, Anda dapat mengaktifkannya sementara melalui logger Apache HttpClient 4. Mengaktifkan tingkat DEBUG pada `org.apache.http.wire` logger memungkinkan pencatatan untuk semua data permintaan dan respons.

File log4j.properties berikut mengaktifkan full wire logging di Apache HttpClient 4 dan seharusnya hanya dihidupkan sementara karena dapat memiliki dampak kinerja yang signifikan pada aplikasi Anda.

```
log4j.rootLogger=WARN, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c -  %m%n
# Log all HTTP content (headers, parameters, content, etc)  for
# all requests and responses. Use caution with this since it can
# be very expensive to log such verbose data!
log4j.logger.org.apache.http.wire=DEBUG
```

## Pencatatan Metrik Latensi
<a name="sdk-latency-logging"></a>

Jika Anda memecahkan masalah dan ingin melihat metrik seperti proses mana yang paling memakan waktu atau apakah sisi server atau klien memiliki latensi yang lebih besar, logger latensi dapat membantu. Setel `com.amazonaws.latency` logger ke DEBUG untuk mengaktifkan logger ini.

**catatan**  
Logger ini hanya tersedia jika metrik SDK diaktifkan. Untuk mempelajari lebih lanjut tentang paket metrik SDK, lihat [Mengaktifkan Metrik](generating-sdk-metrics.md) untuk paket. AWS SDK untuk Java

```
log4j.rootLogger=WARN, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c -  %m%n
log4j.logger.com.amazonaws.latency=DEBUG
```

Berikut adalah contoh dari output log.

```
com.amazonaws.latency - ServiceName=[{S3}], StatusCode=[200],
ServiceEndpoint=[https://list-objects-integ-test-test.s3.amazonaws.com],
RequestType=[ListObjectsV2Request], AWSRequestID=[REQUESTID], HttpClientPoolPendingCount=0,
RetryCapacityConsumed=0, HttpClientPoolAvailableCount=0, RequestCount=1,
HttpClientPoolLeasedCount=0, ResponseProcessingTime=[52.154], ClientExecuteTime=[487.041],
HttpClientSendRequestTime=[192.931], HttpRequestTime=[431.652], RequestSigningTime=[0.357],
CredentialsRequestTime=[0.011, 0.001], HttpClientReceiveResponseTime=[146.272]
```

# Konfigurasi Klien
<a name="section-client-configuration"></a>

 AWS SDK untuk Java Ini memungkinkan Anda untuk mengubah konfigurasi klien default, yang sangat membantu ketika Anda ingin:
+ Connect ke Internet melalui proxy
+ Ubah pengaturan transport HTTP, seperti batas waktu koneksi dan permintaan percobaan ulang
+ Tentukan petunjuk ukuran buffer soket TCP

## Konfigurasi Proxy
<a name="proxy-configuration"></a>

Saat membuat objek klien, Anda dapat meneruskan [ClientConfiguration](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html)objek opsional untuk menyesuaikan konfigurasi klien.

Jika Anda terhubung ke Internet melalui server proxy, Anda harus mengonfigurasi pengaturan server proxy Anda (host proxy, port, dan nama pengguna/kata sandi) melalui objek. `ClientConfiguration`

## Konfigurasi Transportasi HTTP
<a name="http-transport-configuration"></a>

Anda dapat mengkonfigurasi beberapa opsi transportasi HTTP dengan menggunakan [ClientConfiguration](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html)objek. Opsi baru terkadang ditambahkan; untuk melihat daftar lengkap opsi yang dapat Anda ambil atau atur, lihat Referensi AWS SDK untuk Java API.

**catatan**  
Masing-masing nilai yang dapat dikonfigurasi memiliki nilai default yang ditentukan oleh konstanta. Untuk daftar nilai konstanta`ClientConfiguration`, lihat [Nilai Bidang Konstan](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/constant-values.html) di Referensi AWS SDK untuk Java API.

### Koneksi Maksimum
<a name="maximum-connections"></a>

Anda dapat mengatur jumlah maksimum koneksi HTTP terbuka yang diizinkan dengan menggunakan file [ClientConfiguration. setMaxConnections](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html#setMaxConnections-int-)metode.

**penting**  
Atur koneksi maksimum ke jumlah transaksi bersamaan untuk menghindari perselisihan koneksi dan kinerja yang buruk. Untuk nilai koneksi maksimum default, lihat [Nilai Bidang Konstan](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/constant-values.html) di Referensi AWS SDK untuk Java API.

### Timeout dan Penanganan Kesalahan
<a name="timeouts-and-error-handling"></a>

Anda dapat mengatur opsi yang terkait dengan batas waktu dan menangani kesalahan dengan koneksi HTTP.
+  **Batas Waktu Koneksi** 

  Batas waktu koneksi adalah jumlah waktu (dalam milidetik) bahwa koneksi HTTP akan menunggu untuk membuat koneksi sebelum menyerah. Defaultnya adalah 10.000 ms.

  Untuk menetapkan nilai ini sendiri, gunakan [ClientConfiguration. setConnectionTimeout](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html#setConnectionTimeout-int-)metode.
+  **Waktu Koneksi untuk Hidup (TTL)** 

  Secara default, SDK akan mencoba menggunakan kembali koneksi HTTP selama mungkin. Dalam situasi kegagalan di mana koneksi dibuat ke server yang telah dibawa keluar dari layanan, memiliki TTL yang terbatas dapat membantu pemulihan aplikasi. Misalnya, pengaturan TTL 15 menit akan memastikan bahwa meskipun Anda memiliki koneksi yang dibuat ke server yang mengalami masalah, Anda akan membangun kembali koneksi ke server baru dalam waktu 15 menit.

  Untuk mengatur TTL koneksi HTTP, gunakan [ClientConfigurationmetode.setConnectionTtl](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html#setConnectionTTL-long-).
+  **Mencoba Ulang Kesalahan Maksimum** 

  Jumlah percobaan ulang maksimum default untuk kesalahan yang dapat diambil adalah 3. Anda dapat menetapkan nilai yang berbeda dengan menggunakan [ClientConfiguration. setMaxErrorMetode coba lagi](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html#setMaxErrorRetry-int-).

### Alamat Lokal
<a name="local-address"></a>

[Untuk mengatur alamat lokal yang akan diikat oleh klien HTTP, gunakanClientConfiguration. setLocalAddress](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html#setLocalAddress-java.net.InetAddress-).

## Petunjuk Ukuran Penyangga Soket TCP
<a name="tcp-socket-buffer-size-hints"></a>

Pengguna tingkat lanjut yang ingin menyetel parameter TCP tingkat rendah juga dapat mengatur petunjuk ukuran buffer TCP melalui objek. [ClientConfiguration](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html) Mayoritas pengguna tidak akan pernah perlu mengubah nilai-nilai ini, tetapi mereka disediakan untuk pengguna tingkat lanjut.

Ukuran buffer TCP yang optimal untuk suatu aplikasi sangat bergantung pada konfigurasi dan kemampuan jaringan dan sistem operasi. Misalnya, sebagian besar sistem operasi modern menyediakan logika penyetelan otomatis untuk ukuran buffer TCP. Ini dapat berdampak besar pada kinerja koneksi TCP yang dibuka cukup lama untuk penyetelan otomatis untuk mengoptimalkan ukuran buffer.

Ukuran buffer yang besar (misalnya, 2 MB) memungkinkan sistem operasi untuk menyangga lebih banyak data dalam memori tanpa memerlukan server jarak jauh untuk mengakui penerimaan informasi tersebut, sehingga dapat sangat berguna ketika jaringan memiliki latensi tinggi.

Ini hanya *petunjuk*, dan sistem operasi mungkin tidak menghormatinya. Saat menggunakan opsi ini, pengguna harus selalu memeriksa batas dan default yang dikonfigurasi sistem operasi. Sebagian besar sistem operasi memiliki batas ukuran buffer TCP maksimum yang dikonfigurasi, dan tidak akan membiarkan Anda melampaui batas itu kecuali Anda secara eksplisit menaikkan batas ukuran buffer TCP maksimum.

Banyak sumber daya tersedia untuk membantu mengonfigurasi ukuran buffer TCP dan pengaturan TCP khusus sistem operasi, termasuk yang berikut ini:
+  [Penyetelan Tuan Rumah](http://fasterdata.es.net/host-tuning/) 

# Kebijakan Kontrol Akses
<a name="java-dg-access-control"></a>

 AWS *Kebijakan kontrol akses* memungkinkan Anda menentukan kontrol akses berbutir halus pada sumber daya Anda. AWS Kebijakan kontrol akses terdiri dari kumpulan *pernyataan*, yang berbentuk:

 *Akun A* memiliki izin untuk melakukan *tindakan B* pada *sumber daya C* di mana *kondisi D* berlaku.

Di mana:
+  *A* adalah *prinsipal* - Akun AWS Yang membuat permintaan untuk mengakses atau memodifikasi salah satu AWS sumber daya Anda.
+  *B* adalah *tindakan* - Cara di mana AWS sumber daya Anda sedang diakses atau dimodifikasi, seperti mengirim pesan ke Amazon SQS antrian, atau menyimpan objek dalam Amazon S3 ember.
+  *C* adalah *sumber daya* - AWS Entitas yang prinsipal ingin mengakses, seperti Amazon SQS antrian, atau objek yang disimpan di Amazon S3.
+  *D* adalah *sekumpulan kondisi* - Kendala opsional yang menentukan kapan harus mengizinkan atau menolak akses bagi prinsipal untuk mengakses sumber daya Anda. Banyak kondisi ekspresif tersedia, beberapa khusus untuk setiap layanan. Misalnya, Anda dapat menggunakan ketentuan tanggal untuk mengizinkan akses ke sumber daya Anda hanya setelah atau sebelum waktu tertentu.

## Amazon S3 Contoh
<a name="s3-example"></a>

Contoh berikut menunjukkan kebijakan yang memungkinkan siapa pun mengakses untuk membaca semua objek dalam bucket, tetapi membatasi akses untuk mengunggah objek ke bucket tersebut ke dua Akun AWS s tertentu (selain akun pemilik bucket).

```
Statement allowPublicReadStatement = new Statement(Effect.Allow)
    .withPrincipals(Principal.AllUsers)
    .withActions(S3Actions.GetObject)
    .withResources(new S3ObjectResource(myBucketName, "*"));
Statement allowRestrictedWriteStatement = new Statement(Effect.Allow)
    .withPrincipals(new Principal("123456789"), new Principal("876543210"))
    .withActions(S3Actions.PutObject)
    .withResources(new S3ObjectResource(myBucketName, "*"));

Policy policy = new Policy()
    .withStatements(allowPublicReadStatement, allowRestrictedWriteStatement);

AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
s3.setBucketPolicy(myBucketName, policy.toJson());
```

## Amazon SQS Contoh
<a name="sqs-example"></a>

Salah satu penggunaan kebijakan yang umum adalah untuk mengotorisasi Amazon SQS antrian untuk menerima pesan dari topik Amazon SNS.

```
Policy policy = new Policy().withStatements(
    new Statement(Effect.Allow)
        .withPrincipals(Principal.AllUsers)
        .withActions(SQSActions.SendMessage)
        .withConditions(ConditionFactory.newSourceArnCondition(myTopicArn)));

Map queueAttributes = new HashMap();
queueAttributes.put(QueueAttributeName.Policy.toString(), policy.toJson());

AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
sqs.setQueueAttributes(new SetQueueAttributesRequest(myQueueUrl, queueAttributes));
```

## Contoh Amazon SNS
<a name="sns-example"></a>

Beberapa layanan menawarkan ketentuan tambahan yang dapat digunakan dalam kebijakan. Amazon SNS menyediakan ketentuan untuk mengizinkan atau menolak langganan ke topik SNS berdasarkan protokol (misalnya, email, HTTP, HTTPS, Amazon SQS) dan titik akhir (misalnya, alamat email, URL, Amazon SQS ARN) dari permintaan untuk berlangganan topik.

```
Condition endpointCondition =
    SNSConditionFactory.newEndpointCondition("*@mycompany.com");

Policy policy = new Policy().withStatements(
    new Statement(Effect.Allow)
        .withPrincipals(Principal.AllUsers)
        .withActions(SNSActions.Subscribe)
        .withConditions(endpointCondition));

AmazonSNS sns = AmazonSNSClientBuilder.defaultClient();
sns.setTopicAttributes(
    new SetTopicAttributesRequest(myTopicArn, "Policy", policy.toJson()));
```

# Mengatur JVM TTL untuk pencarian nama DNS
<a name="jvm-ttl-dns"></a>

Mesin virtual Java (JVM) menyimpan cache pencarian nama DNS. Ketika JVM menyelesaikan nama host ke alamat IP, itu cache alamat IP untuk jangka waktu tertentu, yang dikenal sebagai (TTL). *time-to-live*

Karena AWS sumber daya menggunakan entri nama DNS yang terkadang berubah, kami sarankan Anda mengonfigurasi JVM Anda dengan nilai TTL 5 detik. Ini memastikan bahwa ketika alamat IP sumber daya berubah, aplikasi Anda akan dapat menerima dan menggunakan alamat IP baru sumber daya dengan meminta DNS.

Pada beberapa konfigurasi Java, TTL default JVM diatur sehingga *tidak akan pernah* menyegarkan entri DNS sampai JVM dimulai ulang. Jadi, jika alamat IP untuk AWS sumber daya berubah saat aplikasi Anda masih berjalan, itu tidak akan dapat menggunakan sumber daya itu sampai Anda *secara manual me-restart* JVM dan informasi IP cache di-refresh. Dalam hal ini, sangat penting untuk mengatur TTL JVM sehingga secara berkala akan menyegarkan informasi IP cache.

## Cara mengatur JVM TTL
<a name="how-to-set-the-jvm-ttl"></a>

Untuk memodifikasi TTL JVM, atur nilai properti keamanan [networkaddress.cache.ttl](https://docs.oracle.com/en/java/javase/17/core/java-networking.html#GUID-A680DADB-C4C1-40F1-B568-D9A97C917F5D). Perhatikan bahwa `networkaddress.cache.ttl` adalah *properti keamanan*, bukan properti sistem, yaitu, tidak dapat diatur dengan flag `-D` baris perintah.

### Opsi 1: Atur secara terprogram di aplikasi Anda
<a name="set-ttl-programmatically"></a>

Panggilan di [https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/Security.html](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/Security.html)awal startup aplikasi Anda, sebelum klien AWS SDK dibuat dan sebelum permintaan jaringan dibuat:

```
import java.security.Security;

public class MyApplication {
    public static void main(String[] args) {
        Security.setProperty("networkaddress.cache.ttl", "5");

        // ... create SDK clients and run application
    }
}
```

### Opsi 2: Atur di file java.security
<a name="set-ttl-java-security-file"></a>

Mengatur `networkaddress.cache.ttl` properti dalam `$JAVA_HOME/jre/lib/security/java.security` file untuk Java 8 atau `$JAVA_HOME/conf/security/java.security` file untuk Java 11 atau lebih tinggi.

Berikut ini adalah cuplikan dari `java.security` file yang menunjukkan cache TTL diatur ke 5 detik.

```
#
# The Java-level namelookup cache policy for successful lookups:
#
# any negative value: caching forever
# any positive value: the number of seconds to cache an address for
# zero: do not cache
#
...
networkaddress.cache.ttl=5
...
```

Semua aplikasi yang berjalan pada JVM diwakili oleh variabel `$JAVA_HOME` lingkungan menggunakan pengaturan ini.

### Opsi 3: Gunakan fallback properti sistem JDK (baris perintah)
<a name="set-ttl-system-property"></a>

Jika Anda tidak dapat mengubah konfigurasi atau kode keamanan, Anda dapat menggunakan properti sistem JDK. Ini bertindak sebagai fallback jika tidak ada properti keamanan yang didefinisikan.
+ `sun.net.inetaddr.ttl`— Mengontrol pencarian yang berhasil (TTL positif)
+ `sun.net.inetaddr.negative.ttl`— Kontrol pencarian gagal (TTL negatif)

```
java -Dsun.net.inetaddr.ttl=5 -Dsun.net.inetaddr.negative.ttl=1 -jar myapp.jar
```

**catatan**  
Ini adalah properti JDK-internal yang didokumentasikan dalam referensi [Oracle Java 8 Networking Properties](https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html) sebagai properti pribadi yang “mungkin tidak didukung dalam rilis masa depan”. Gunakan Opsi 1-2 jika memungkinkan.

# Mengaktifkan Metrik untuk AWS SDK untuk Java
<a name="generating-sdk-metrics"></a>

 AWS SDK untuk Java Dapat menghasilkan metrik untuk visualisasi dan pemantauan dengan [Amazon CloudWatch yang mengukur](https://aws.amazon.com/cloudwatch/):
+ kinerja aplikasi Anda saat mengakses AWS 
+ kinerja Anda JVMs saat digunakan dengan AWS 
+ Rincian lingkungan runtime seperti memori heap, jumlah thread, dan deskriptor file yang dibuka

## Cara Mengaktifkan Generasi Metrik SDK Java
<a name="how-to-enable-sdk-java-metric-generation"></a>

Anda perlu menambahkan dependensi Maven berikut untuk mengaktifkan SDK untuk mengirim metrik. CloudWatch

```
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-bom</artifactId>
      <version>1.12.490*</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
<dependencies>
  <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-cloudwatchmetrics</artifactId>
    <scope>provided</scope>
  </dependency>
  <!-- Other SDK dependencies. -->
</dependencies>
```

 \$1 Ganti nomor versi dengan versi terbaru SDK yang tersedia di [Maven](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom) Central.

AWS SDK untuk Java metrik *dinonaktifkan secara default*. Untuk mengaktifkannya untuk lingkungan pengembangan lokal Anda, sertakan properti sistem yang menunjuk ke file kredensi AWS keamanan Anda saat memulai JVM. Contoh:

```
-Dcom.amazonaws.sdk.enableDefaultMetrics=credentialFile=/path/aws.properties
```

Anda perlu menentukan jalur ke file kredensyal Anda sehingga SDK dapat mengunggah titik data yang dikumpulkan untuk analisis selanjutnya. CloudWatch 

**catatan**  
Jika Anda mengakses AWS dari sebuah Amazon EC2 instance menggunakan layanan metadata Amazon EC2 instance, Anda tidak perlu menentukan file kredensyal. Dalam hal ini, Anda hanya perlu menentukan:  

```
-Dcom.amazonaws.sdk.enableDefaultMetrics
```

*Semua metrik yang ditangkap oleh AWS SDK untuk Java berada di bawah namespace **AWSSDK/Java**, dan diunggah ke CloudWatch wilayah default (us-east-1).* Untuk mengubah wilayah, tentukan dengan menggunakan `cloudwatchRegion` atribut di properti sistem. Misalnya, untuk menyetel CloudWatch wilayah ke *us-east-1*, gunakan:

```
-Dcom.amazonaws.sdk.enableDefaultMetrics=credentialFile=/path/aws.properties,cloudwatchRegion={region_api_default}
```

Setelah Anda mengaktifkan fitur, setiap kali ada permintaan layanan AWS dari, titik data metrik akan dibuat AWS SDK untuk Java, antri untuk ringkasan statistik, dan diunggah secara asinkron menjadi sekitar sekali setiap menit. CloudWatch Setelah metrik diunggah, Anda dapat memvisualisasikannya menggunakan [Konsol Manajemen AWS](https://console.aws.amazon.com/console/home)dan mengatur alarm pada potensi masalah seperti kebocoran memori, kebocoran deskriptor file, dan sebagainya.

## Jenis Metrik yang Tersedia
<a name="available-metric-types"></a>

Kumpulan metrik default dibagi menjadi tiga kategori utama:

 AWS Minta Metrik  
+ Mencakup area seperti latensi permintaan/respons HTTP, jumlah permintaan, pengecualian, dan percobaan ulang.  
![\[RequestMetric 131111\]](http://docs.aws.amazon.com/id_id/sdk-for-java/v1/developer-guide/images/RequestMetric-131111.png)

 Layanan AWS Metrik  
+ Sertakan data Layanan AWS-spesifik, seperti throughput dan jumlah byte untuk unggahan dan unduhan S3.  
![\[ServiceMetric 131111\]](http://docs.aws.amazon.com/id_id/sdk-for-java/v1/developer-guide/images/ServiceMetric-131111.png)

Metrik Mesin  
+ Tutupi lingkungan runtime, termasuk memori heap, jumlah thread, dan deskriptor file terbuka.  
![\[MachineMetric 131111\]](http://docs.aws.amazon.com/id_id/sdk-for-java/v1/developer-guide/images/MachineMetric-131111.png)

  Jika Anda ingin mengecualikan Metrik Mesin, tambahkan `excludeMachineMetrics` ke properti sistem:

  ```
  -Dcom.amazonaws.sdk.enableDefaultMetrics=credentialFile=/path/aws.properties,excludeMachineMetrics
  ```

## Informasi Selengkapnya
<a name="more-information"></a>
+ Lihat [ringkasan paket amazonaws/metrics](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/metrics/package-summary.html) untuk daftar lengkap jenis metrik inti yang telah ditentukan sebelumnya.
+ Pelajari tentang bekerja dengan CloudWatch menggunakan AWS SDK untuk Java dalam [CloudWatch Contoh Menggunakan AWS SDK untuk Java](examples-cloudwatch.md).
+ Pelajari lebih lanjut tentang penyetelan kinerja dalam [Menyetel AWS SDK untuk Java untuk Meningkatkan Ketahanan posting blog](https://aws.amazon.com/blogs/developer/tuning-the-aws-sdk-for-java-to-improve-resiliency).