

 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.

# AWS SDK untuk Java Contoh Kode
<a name="prog-services"></a>

Bagian ini memberikan tutorial dan contoh menggunakan AWS SDK untuk Java v1 untuk AWS layanan program.

Temukan kode sumber untuk contoh-contoh ini dan lainnya dalam [repositori contoh kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples) dokumentasi di. GitHub

Untuk mengusulkan contoh kode baru agar tim AWS dokumentasi mempertimbangkan untuk memproduksi, buat permintaan baru. Tim ingin menghasilkan contoh kode yang mencakup skenario dan kasus penggunaan yang lebih luas, dibandingkan cuplikan kode sederhana yang hanya mencakup panggilan API individual. Untuk petunjuk, lihat [Pedoman kontribusi](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/CONTRIBUTING.md) dalam respositori contoh kode di.. GitHub

## AWS SDK untuk Java 2.x
<a name="aws-sdk-for-java-2-x"></a>

Pada 2018, AWS dirilis [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html). Panduan ini berisi petunjuk tentang penggunaan SDK Java terbaru bersama dengan kode contoh.

**catatan**  
Lihat [Dokumentasi dan Sumber Daya Tambahan](welcome.md#additional-resources) untuk contoh lainnya dan sumber daya tambahan yang tersedia untuk AWS SDK untuk Java pengembang\$1

**Topics**

# CloudWatch Contoh Menggunakan AWS SDK untuk Java
<a name="examples-cloudwatch"></a>

Bagian ini memberikan contoh pemrograman [CloudWatch](https://aws.amazon.com/cloudwatch/)menggunakan [AWS SDK untuk Java](https://aws.amazon.com/sdk-for-java/).

Amazon CloudWatch memantau sumber daya Amazon Web Services (AWS) Anda dan aplikasi yang Anda jalankan AWS secara real time. Anda dapat menggunakan CloudWatch untuk mengumpulkan dan melacak metrik, yang merupakan variabel yang dapat Anda ukur untuk sumber daya dan aplikasi Anda. CloudWatch alarm mengirim pemberitahuan atau secara otomatis membuat perubahan pada sumber daya yang Anda pantau berdasarkan aturan yang Anda tetapkan.

Untuk informasi selengkapnya CloudWatch, lihat [Panduan Amazon CloudWatch Pengguna](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/).

**catatan**  
Contohnya hanya mencakup kode yang diperlukan untuk mendemonstrasikan setiap teknik. [Kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java). Dari sana, Anda dapat mengunduh satu file sumber atau mengkloning repositori secara lokal untuk mendapatkan semua contoh untuk dibangun dan dijalankan.

**Topics**
+ [Mendapatkan Metrik dari CloudWatch](examples-cloudwatch-get-metrics.md)
+ [Menerbitkan Data Metrik Kustom](examples-cloudwatch-publish-custom-metrics.md)
+ [Bekerja dengan CloudWatch Alarm](examples-cloudwatch-create-alarms.md)
+ [Menggunakan Tindakan Alarm di CloudWatch](examples-cloudwatch-use-alarm-actions.md)
+ [Mengirim Acara ke CloudWatch](examples-cloudwatch-send-events.md)

# Mendapatkan Metrik dari CloudWatch
<a name="examples-cloudwatch-get-metrics"></a>

## Metrik Daftar
<a name="listing-metrics"></a>

Untuk membuat daftar CloudWatch metrik, buat [ListMetricsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/ListMetricsRequest.html)dan panggil `listMetrics` metode AmazonCloudWatchClient ini. Anda dapat menggunakan `ListMetricsRequest` untuk memfilter metrik yang dikembalikan berdasarkan namespace, nama metrik, atau dimensi.

**catatan**  
Daftar metrik dan dimensi yang diposting oleh AWS layanan dapat ditemukan dalam \$1https---docs-aws-amazon-com- AmazonCloudWatch -Latest-Monitoring-CW-Support-for-AWS-html\$1 [Referensi Metrik dan Dimensi Amazon] di Panduan Pengguna. CloudWatch Amazon CloudWatch 

 **Impor** 

```
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
import com.amazonaws.services.cloudwatch.model.ListMetricsRequest;
import com.amazonaws.services.cloudwatch.model.ListMetricsResult;
import com.amazonaws.services.cloudwatch.model.Metric;
```

 **Kode** 

```
final AmazonCloudWatch cw =
    AmazonCloudWatchClientBuilder.defaultClient();

ListMetricsRequest request = new ListMetricsRequest()
        .withMetricName(name)
        .withNamespace(namespace);

boolean done = false;

while(!done) {
    ListMetricsResult response = cw.listMetrics(request);

    for(Metric metric : response.getMetrics()) {
        System.out.printf(
            "Retrieved metric %s", metric.getMetricName());
    }

    request.setNextToken(response.getNextToken());

    if(response.getNextToken() == null) {
        done = true;
    }
}
```

Metrik dikembalikan dalam a [ListMetricsResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/ListMetricsResult.html)dengan memanggil `getMetrics` metodenya. Hasilnya mungkin *paged.* Untuk mengambil batch hasil berikutnya, panggil `setNextToken` objek permintaan asli dengan nilai kembali dari `getNextToken` metode `ListMetricsResult` objek, dan meneruskan objek permintaan yang dimodifikasi kembali ke `listMetrics` panggilan lain.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [ListMetrics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html)di Referensi Amazon CloudWatch API.

# Menerbitkan Data Metrik Kustom
<a name="examples-cloudwatch-publish-custom-metrics"></a>

Sejumlah AWS layanan mempublikasikan [metrik mereka sendiri](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-namespaces.html) di ruang nama yang dimulai dengan "`AWS`" Anda juga dapat mempublikasikan data metrik khusus menggunakan namespace Anda sendiri (asalkan tidak dimulai dengan "“). `AWS`

## Publikasikan Data Metrik Kustom
<a name="publish-custom-metric-data"></a>

Untuk mempublikasikan data metrik Anda sendiri, panggil `putMetricData` metode ini dengan file [PutMetricDataRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/PutMetricDataRequest.html). AmazonCloudWatchClient `PutMetricDataRequest`Harus menyertakan namespace khusus yang akan digunakan untuk data, dan informasi tentang titik data itu sendiri dalam suatu [MetricDatum](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/MetricDatum.html)objek.

**catatan**  
Anda tidak dapat menentukan namespace yang dimulai dengan "”`AWS`. Ruang nama yang dimulai dengan "`AWS`" dicadangkan untuk digunakan oleh Amazon Web Services produk.

 **Impor** 

```
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
import com.amazonaws.services.cloudwatch.model.Dimension;
import com.amazonaws.services.cloudwatch.model.MetricDatum;
import com.amazonaws.services.cloudwatch.model.PutMetricDataRequest;
import com.amazonaws.services.cloudwatch.model.PutMetricDataResult;
import com.amazonaws.services.cloudwatch.model.StandardUnit;
```

 **Kode** 

```
final AmazonCloudWatch cw =
    AmazonCloudWatchClientBuilder.defaultClient();

Dimension dimension = new Dimension()
    .withName("UNIQUE_PAGES")
    .withValue("URLS");

MetricDatum datum = new MetricDatum()
    .withMetricName("PAGES_VISITED")
    .withUnit(StandardUnit.None)
    .withValue(data_point)
    .withDimensions(dimension);

PutMetricDataRequest request = new PutMetricDataRequest()
    .withNamespace("SITE/TRAFFIC")
    .withMetricData(datum);

PutMetricDataResult response = cw.putMetricData(request);
```

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Menggunakan Amazon CloudWatch Metrik](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) dalam Panduan Amazon CloudWatch Pengguna.
+  [AWS Ruang nama](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-namespaces.html) di Amazon CloudWatch Panduan Pengguna.
+  [PutMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html)dalam Referensi Amazon CloudWatch API.

# Bekerja dengan CloudWatch Alarm
<a name="examples-cloudwatch-create-alarms"></a>

## Buat Alarm
<a name="create-an-alarm"></a>

Untuk membuat alarm berdasarkan CloudWatch metrik, panggil `putMetricAlarm` metode dengan [PutMetricAlarmRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/PutMetricAlarmRequest.html)diisi dengan kondisi alarm. AmazonCloudWatchClient

 **Impor** 

```
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
import com.amazonaws.services.cloudwatch.model.ComparisonOperator;
import com.amazonaws.services.cloudwatch.model.Dimension;
import com.amazonaws.services.cloudwatch.model.PutMetricAlarmRequest;
import com.amazonaws.services.cloudwatch.model.PutMetricAlarmResult;
import com.amazonaws.services.cloudwatch.model.StandardUnit;
import com.amazonaws.services.cloudwatch.model.Statistic;
```

 **Kode** 

```
final AmazonCloudWatch cw =
    AmazonCloudWatchClientBuilder.defaultClient();

Dimension dimension = new Dimension()
    .withName("InstanceId")
    .withValue(instanceId);

PutMetricAlarmRequest request = new PutMetricAlarmRequest()
    .withAlarmName(alarmName)
    .withComparisonOperator(
        ComparisonOperator.GreaterThanThreshold)
    .withEvaluationPeriods(1)
    .withMetricName("CPUUtilization")
    .withNamespace("{AWS}/EC2")
    .withPeriod(60)
    .withStatistic(Statistic.Average)
    .withThreshold(70.0)
    .withActionsEnabled(false)
    .withAlarmDescription(
        "Alarm when server CPU utilization exceeds 70%")
    .withUnit(StandardUnit.Seconds)
    .withDimensions(dimension);

PutMetricAlarmResult response = cw.putMetricAlarm(request);
```

## Daftar Alarm
<a name="list-alarms"></a>

Untuk membuat daftar CloudWatch alarm yang telah Anda buat, panggil `describeAlarms` metode ini dengan [DescribeAlarmsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/DescribeAlarmsRequest.html)yang dapat Anda gunakan untuk mengatur opsi untuk hasilnya. AmazonCloudWatchClient

 **Impor** 

```
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
import com.amazonaws.services.cloudwatch.model.DescribeAlarmsRequest;
import com.amazonaws.services.cloudwatch.model.DescribeAlarmsResult;
import com.amazonaws.services.cloudwatch.model.MetricAlarm;
```

 **Kode** 

```
final AmazonCloudWatch cw =
    AmazonCloudWatchClientBuilder.defaultClient();

boolean done = false;
DescribeAlarmsRequest request = new DescribeAlarmsRequest();

while(!done) {

    DescribeAlarmsResult response = cw.describeAlarms(request);

    for(MetricAlarm alarm : response.getMetricAlarms()) {
        System.out.printf("Retrieved alarm %s", alarm.getAlarmName());
    }

    request.setNextToken(response.getNextToken());

    if(response.getNextToken() == null) {
        done = true;
    }
}
```

Daftar alarm dapat diperoleh dengan memanggil `getMetricAlarms` [DescribeAlarmsResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/DescribeAlarmsResult.html)yang dikembalikan oleh`describeAlarms`.

Hasilnya mungkin *paged.* Untuk mengambil batch hasil berikutnya, panggil `setNextToken` objek permintaan asli dengan nilai kembali dari `getNextToken` metode `DescribeAlarmsResult` objek, dan meneruskan objek permintaan yang dimodifikasi kembali ke `describeAlarms` panggilan lain.

**catatan**  
Anda juga dapat mengambil alarm untuk metrik tertentu dengan menggunakan metode ini AmazonCloudWatchClient. `describeAlarmsForMetric` Penggunaannya mirip dengan`describeAlarms`.

## Hapus Alarm
<a name="delete-alarms"></a>

Untuk menghapus CloudWatch alarm, panggil `deleteAlarms` metode ini dengan [DeleteAlarmsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/DeleteAlarmsRequest.html)berisi satu atau beberapa nama alarm yang ingin Anda hapus. AmazonCloudWatchClient

 **Impor** 

```
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
import com.amazonaws.services.cloudwatch.model.DeleteAlarmsRequest;
import com.amazonaws.services.cloudwatch.model.DeleteAlarmsResult;
```

 **Kode** 

```
final AmazonCloudWatch cw =
    AmazonCloudWatchClientBuilder.defaultClient();

DeleteAlarmsRequest request = new DeleteAlarmsRequest()
    .withAlarmNames(alarm_name);

DeleteAlarmsResult response = cw.deleteAlarms(request);
```

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Membuat Amazon CloudWatch Alarm](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) di Amazon CloudWatch Panduan Pengguna
+  [PutMetricAlarm](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricAlarm.html)di Referensi Amazon CloudWatch API
+  [DescribeAlarms](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_DescribeAlarms.html)di Referensi Amazon CloudWatch API
+  [DeleteAlarms](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_DeleteAlarms.html)di Referensi Amazon CloudWatch API

# Menggunakan Tindakan Alarm di CloudWatch
<a name="examples-cloudwatch-use-alarm-actions"></a>

Dengan menggunakan tindakan CloudWatch alarm, Anda dapat membuat alarm yang melakukan tindakan seperti menghentikan, menghentikan, me-reboot, atau memulihkan instans secara otomatis. Amazon EC2 

**catatan**  
Tindakan alarm dapat ditambahkan ke alarm dengan menggunakan `setAlarmActions` metode ini saat [membuat alarm](examples-cloudwatch-create-alarms.md). [PutMetricAlarmRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/PutMetricAlarmRequest.html)

## Aktifkan Tindakan Alarm
<a name="enable-alarm-actions"></a>

Untuk mengaktifkan tindakan alarm untuk CloudWatch alarm, panggil AmazonCloudWatchClient's `enableAlarmActions` dengan [EnableAlarmActionsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/EnableAlarmActionsRequest.html)berisi satu atau beberapa nama alarm yang tindakannya ingin Anda aktifkan.

 **Impor** 

```
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
import com.amazonaws.services.cloudwatch.model.EnableAlarmActionsRequest;
import com.amazonaws.services.cloudwatch.model.EnableAlarmActionsResult;
```

 **Kode** 

```
final AmazonCloudWatch cw =
    AmazonCloudWatchClientBuilder.defaultClient();

EnableAlarmActionsRequest request = new EnableAlarmActionsRequest()
    .withAlarmNames(alarm);

EnableAlarmActionsResult response = cw.enableAlarmActions(request);
```

## Nonaktifkan Tindakan Alarm
<a name="disable-alarm-actions"></a>

Untuk menonaktifkan tindakan alarm untuk CloudWatch alarm, hubungi AmazonCloudWatchClient's `disableAlarmActions` dengan [DisableAlarmActionsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatch/model/DisableAlarmActionsRequest.html)berisi satu atau beberapa nama alarm yang tindakannya ingin Anda nonaktifkan.

 **Impor** 

```
import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
import com.amazonaws.services.cloudwatch.model.DisableAlarmActionsRequest;
import com.amazonaws.services.cloudwatch.model.DisableAlarmActionsResult;
```

 **Kode** 

```
final AmazonCloudWatch cw =
    AmazonCloudWatchClientBuilder.defaultClient();

DisableAlarmActionsRequest request = new DisableAlarmActionsRequest()
    .withAlarmNames(alarmName);

DisableAlarmActionsResult response = cw.disableAlarmActions(request);
```

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Buat Alarm untuk Menghentikan, Menghentikan, Memulai Ulang, atau Memulihkan Instance](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/UsingAlarmActions.html) di Panduan Pengguna Amazon CloudWatch 
+  [PutMetricAlarm](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricAlarm.html)di Referensi Amazon CloudWatch API
+  [EnableAlarmActions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_EnableAlarmActions.html)di Referensi Amazon CloudWatch API
+  [DisableAlarmActions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_DisableAlarmActions.html)di Referensi Amazon CloudWatch API

# Mengirim Acara ke CloudWatch
<a name="examples-cloudwatch-send-events"></a>

 CloudWatch Peristiwa memberikan aliran peristiwa sistem yang mendekati real-time yang menggambarkan perubahan AWS sumber daya ke Amazon EC2 instance, Lambda fungsi, Kinesis aliran, Amazon ECS tugas, mesin Step Functions status, Amazon SNS topik, Amazon SQS antrian, atau target bawaan. Anda dapat mencocokkan acara dan meruteknya ke satu atau beberapa fungsi atau aliran target dengan menggunakan aturan sederhana.

## Tambahkan Acara
<a name="add-events"></a>

Untuk menambahkan CloudWatch peristiwa khusus, panggil `putEvents` metode dengan [PutEventsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatchevents/model/PutEventsRequest.html)objek yang berisi satu atau beberapa [PutEventsRequestEntry](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatchevents/model/PutEventsRequestEntry.html)objek yang memberikan detail tentang setiap peristiwa. AmazonCloudWatchEventsClient Anda dapat menentukan beberapa parameter untuk entri seperti sumber dan jenis acara, sumber daya yang terkait dengan acara, dan sebagainya.

**catatan**  
Anda dapat menentukan maksimum 10 acara per panggilan ke`putEvents`.

 **Impor** 

```
import com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEvents;
import com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsClientBuilder;
import com.amazonaws.services.cloudwatchevents.model.PutEventsRequest;
import com.amazonaws.services.cloudwatchevents.model.PutEventsRequestEntry;
import com.amazonaws.services.cloudwatchevents.model.PutEventsResult;
```

 **Kode** 

```
final AmazonCloudWatchEvents cwe =
    AmazonCloudWatchEventsClientBuilder.defaultClient();

final String EVENT_DETAILS =
    "{ \"key1\": \"value1\", \"key2\": \"value2\" }";

PutEventsRequestEntry request_entry = new PutEventsRequestEntry()
    .withDetail(EVENT_DETAILS)
    .withDetailType("sampleSubmitted")
    .withResources(resource_arn)
    .withSource("aws-sdk-java-cloudwatch-example");

PutEventsRequest request = new PutEventsRequest()
    .withEntries(request_entry);

PutEventsResult response = cwe.putEvents(request);
```

## Tambahkan Aturan
<a name="add-rules"></a>

Untuk membuat atau memperbarui aturan, panggil `putRule` metode [PutRuleRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatchevents/model/PutRuleRequest.html)dengan nama aturan dan parameter opsional seperti [pola acara](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html), IAM peran untuk dikaitkan dengan aturan, dan [ekspresi penjadwalan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html) yang menjelaskan seberapa sering aturan dijalankan. AmazonCloudWatchEventsClient

 **Impor** 

```
import com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEvents;
import com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsClientBuilder;
import com.amazonaws.services.cloudwatchevents.model.PutRuleRequest;
import com.amazonaws.services.cloudwatchevents.model.PutRuleResult;
import com.amazonaws.services.cloudwatchevents.model.RuleState;
```

 **Kode** 

```
final AmazonCloudWatchEvents cwe =
    AmazonCloudWatchEventsClientBuilder.defaultClient();

PutRuleRequest request = new PutRuleRequest()
    .withName(rule_name)
    .withRoleArn(role_arn)
    .withScheduleExpression("rate(5 minutes)")
    .withState(RuleState.ENABLED);

PutRuleResult response = cwe.putRule(request);
```

## Tambahkan Target
<a name="add-targets"></a>

Target adalah sumber daya yang dipanggil ketika suatu aturan dipicu. Contoh target termasuk Amazon EC2 instance, Lambda fungsi, Kinesis aliran, Amazon ECS tugas, mesin Step Functions status, dan target bawaan.

Untuk menambahkan target ke aturan, panggil `putTargets` metode dengan [PutTargetsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/cloudwatchevents/model/PutTargetsRequest.html)berisi aturan untuk diperbarui dan daftar target untuk ditambahkan ke aturan. AmazonCloudWatchEventsClient

 **Impor** 

```
import com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEvents;
import com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsClientBuilder;
import com.amazonaws.services.cloudwatchevents.model.PutTargetsRequest;
import com.amazonaws.services.cloudwatchevents.model.PutTargetsResult;
import com.amazonaws.services.cloudwatchevents.model.Target;
```

 **Kode** 

```
final AmazonCloudWatchEvents cwe =
    AmazonCloudWatchEventsClientBuilder.defaultClient();

Target target = new Target()
    .withArn(function_arn)
    .withId(target_id);

PutTargetsRequest request = new PutTargetsRequest()
    .withTargets(target)
    .withRule(rule_name);

PutTargetsResult response = cwe.putTargets(request);
```

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Menambahkan Acara dengan PutEvents](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/AddEventsPutEvents.html) di Panduan Amazon CloudWatch Events Pengguna
+  [Jadwalkan Ekspresi untuk Aturan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html) di Panduan Amazon CloudWatch Events Pengguna
+  [Jenis Acara untuk CloudWatch Acara](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html) di Panduan Amazon CloudWatch Events Pengguna
+  [Peristiwa dan Pola Peristiwa](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html) di Panduan Amazon CloudWatch Events Pengguna
+  [PutEvents](https://docs.aws.amazon.com/AmazonCloudWatchEvents/latest/APIReference/API_PutEvents.html)di Referensi Amazon CloudWatch Events API
+  [PutTargets](https://docs.aws.amazon.com/AmazonCloudWatchEvents/latest/APIReference/API_PutTargets.html)di Referensi Amazon CloudWatch Events API
+  [PutRule](https://docs.aws.amazon.com/AmazonCloudWatchEvents/latest/APIReference/API_PutRule.html)di Referensi Amazon CloudWatch Events API

# DynamoDB Contoh Menggunakan AWS SDK untuk Java
<a name="examples-dynamodb"></a>

Bagian ini memberikan contoh pemrograman [DynamoDB](https://aws.amazon.com/dynamodb/)menggunakan [AWS SDK untuk Java](https://aws.amazon.com/sdk-for-java/).

**catatan**  
Contohnya hanya mencakup kode yang diperlukan untuk mendemonstrasikan setiap teknik. [Kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java). Dari sana, Anda dapat mengunduh satu file sumber atau mengkloning repositori secara lokal untuk mendapatkan semua contoh untuk dibangun dan dijalankan.

**Topics**
+ [Gunakan AWS titik akhir berbasis akun](#account-based-endpoint-routing)
+ [Bekerja dengan Tabel di DynamoDB](examples-dynamodb-tables.md)
+ [Bekerja dengan Item di DynamoDB](examples-dynamodb-items.md)

## Gunakan AWS titik akhir berbasis akun
<a name="account-based-endpoint-routing"></a>

DynamoDB [AWS menawarkan endpoint berbasis akun](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.SDKOverview.html#Programming.SDKs.endpoints) yang dapat meningkatkan kinerja dengan menggunakan ID akun AWS Anda untuk merampingkan perutean permintaan. 

Untuk memanfaatkan fitur ini, Anda perlu menggunakan versi 1.12.771 atau lebih tinggi dari versi 1. AWS SDK untuk Java Anda dapat menemukan versi terbaru SDK yang tercantum di repositori pusat [Maven](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). Setelah versi SDK yang didukung aktif, SDK secara otomatis menggunakan titik akhir baru.

Jika Anda ingin memilih keluar dari perutean berbasis akun, Anda memiliki empat opsi:
+ Konfigurasikan klien layanan DynamoDB dengan `AccountIdEndpointMode` set ke. `DISABLED`
+ Tetapkan variabel lingkungan.
+ Mengatur properti sistem JVM.
+ Perbarui pengaturan file AWS konfigurasi bersama.

Cuplikan berikut adalah contoh cara menonaktifkan routing berbasis akun dengan mengonfigurasi klien layanan DynamoDB:

```
ClientConfiguration config = new ClientConfiguration()
    .withAccountIdEndpointMode(AccountIdEndpointMode.DISABLED);
AWSCredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

AmazonDynamoDB dynamodb = AmazonDynamoDBClientBuilder.standard()
    .withClientConfiguration(config)
    .withCredentials(credentialsProvider)
    .withRegion(Regions.US_WEST_2)
    .build();
```

Panduan Referensi AWS SDKs and Tools memberikan informasi lebih lanjut tentang [tiga opsi konfigurasi](https://docs.aws.amazon.com/sdkref/latest/guide/feature-account-endpoints.html) terakhir.

# Bekerja dengan Tabel di DynamoDB
<a name="examples-dynamodb-tables"></a>

Tabel adalah wadah untuk semua item dalam DynamoDB database. Sebelum Anda dapat menambah atau menghapus data dari DynamoDB, Anda harus membuat tabel.

Untuk setiap tabel, Anda harus mendefinisikan:
+ *Nama* tabel yang unik untuk akun dan wilayah Anda.
+ *Kunci utama* yang setiap nilainya harus unik; tidak ada dua item dalam tabel Anda yang dapat memiliki nilai kunci primer yang sama.

  Kunci primer bisa *sederhana*, terdiri dari kunci partisi tunggal (HASH), atau *komposit*, yang terdiri dari partisi dan kunci sort (RANGE).

  Setiap nilai kunci memiliki *tipe data* terkait, disebutkan oleh kelas. [ScalarAttributeType](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/ScalarAttributeType.html) Nilai kunci dapat berupa biner (B), numerik (N), atau string (S). Untuk informasi selengkapnya, lihat [Aturan Penamaan dan Jenis Data](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html) di Panduan Amazon DynamoDB Pengembang.
+  Nilai *throughput yang disediakan* yang menentukan jumlah unit kapasitas baca/tulis yang dicadangkan untuk tabel.
**catatan**  
 [Amazon DynamoDB Penetapan harga](https://aws.amazon.com/dynamodb/pricing/) didasarkan pada nilai throughput yang disediakan yang Anda tetapkan pada tabel Anda, jadi cadangkan hanya kapasitas sebanyak yang Anda pikir Anda perlukan untuk tabel Anda.

Throughput yang disediakan untuk tabel dapat dimodifikasi kapan saja, sehingga Anda dapat menyesuaikan kapasitas jika kebutuhan Anda berubah.

## Buat Tabel
<a name="dynamodb-create-table"></a>

Gunakan `createTable` metode [DynamoDB klien](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/AmazonDynamoDB.html) untuk membuat DynamoDB tabel baru. Anda perlu membangun atribut tabel dan skema tabel, yang keduanya digunakan untuk mengidentifikasi kunci utama tabel Anda. Anda juga harus menyediakan nilai throughput awal yang disediakan dan nama tabel. Hanya tentukan atribut tabel kunci saat membuat DynamoDB tabel Anda.

**catatan**  
Jika tabel dengan nama yang Anda pilih sudah ada, sebuah [AmazonServiceException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/AmazonServiceException.html)dilemparkan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.AttributeDefinition;
import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
import com.amazonaws.services.dynamodbv2.model.CreateTableResult;
import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
import com.amazonaws.services.dynamodbv2.model.KeyType;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
import com.amazonaws.services.dynamodbv2.model.ScalarAttributeType;
```

### Buat Tabel dengan Kunci Primer Sederhana
<a name="dynamodb-create-table-simple"></a>

Kode ini membuat tabel dengan kunci primer sederhana (“Nama”).

 **Kode** 

```
CreateTableRequest request = new CreateTableRequest()
    .withAttributeDefinitions(new AttributeDefinition(
             "Name", ScalarAttributeType.S))
    .withKeySchema(new KeySchemaElement("Name", KeyType.HASH))
    .withProvisionedThroughput(new ProvisionedThroughput(
             new Long(10), new Long(10)))
    .withTableName(table_name);

final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();

try {
    CreateTableResult result = ddb.createTable(request);
    System.out.println(result.getTableDescription().getTableName());
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/CreateTable.java) di GitHub.

### Membuat Tabel dengan Composite Primary Key
<a name="dynamodb-create-table-composite"></a>

Tambahkan yang lain [AttributeDefinition](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/AttributeDefinition.html)dan [KeySchemaElement](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/KeySchemaElement.html)ke [CreateTableRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/CreateTableRequest.html).

 **Kode** 

```
CreateTableRequest request = new CreateTableRequest()
    .withAttributeDefinitions(
          new AttributeDefinition("Language", ScalarAttributeType.S),
          new AttributeDefinition("Greeting", ScalarAttributeType.S))
    .withKeySchema(
          new KeySchemaElement("Language", KeyType.HASH),
          new KeySchemaElement("Greeting", KeyType.RANGE))
    .withProvisionedThroughput(
          new ProvisionedThroughput(new Long(10), new Long(10)))
    .withTableName(table_name);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/CreateTableCompositeKey.java) di GitHub.

## Daftar Tabel
<a name="dynamodb-list-tables"></a>

Anda dapat membuat daftar tabel di wilayah tertentu dengan memanggil `listTables` metode [DynamoDB klien](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/AmazonDynamoDB.html).

**catatan**  
Jika tabel bernama tidak ada untuk akun dan wilayah Anda, a [ResourceNotFoundException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/ResourceNotFoundException.html)dilemparkan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.ListTablesRequest;
import com.amazonaws.services.dynamodbv2.model.ListTablesResult;
```

 **Kode** 

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

ListTablesRequest request;

boolean more_tables = true;
String last_name = null;

while(more_tables) {
    try {
        if (last_name == null) {
        	request = new ListTablesRequest().withLimit(10);
        }
        else {
        	request = new ListTablesRequest()
        			.withLimit(10)
        			.withExclusiveStartTableName(last_name);
        }

        ListTablesResult table_list = ddb.listTables(request);
        List<String> table_names = table_list.getTableNames();

        if (table_names.size() > 0) {
            for (String cur_name : table_names) {
                System.out.format("* %s\n", cur_name);
            }
        } else {
            System.out.println("No tables found!");
            System.exit(0);
        }

        last_name = table_list.getLastEvaluatedTableName();
        if (last_name == null) {
            more_tables = false;
        }
```

Secara default, hingga 100 tabel dikembalikan per panggilan—gunakan `getLastEvaluatedTableName` pada [ListTablesResult](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/model/ListTablesResult.html)objek yang dikembalikan untuk mendapatkan tabel terakhir yang dievaluasi. Anda dapat menggunakan nilai ini untuk memulai daftar setelah nilai terakhir yang dikembalikan dari daftar sebelumnya.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/ListTables.java) di GitHub.

## Jelaskan (Dapatkan Informasi tentang) Tabel
<a name="dynamodb-describe-table"></a>

Panggil `describeTable` metode [DynamoDB klien](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/AmazonDynamoDB.html).

**catatan**  
Jika tabel bernama tidak ada untuk akun dan wilayah Anda, a [ResourceNotFoundException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/ResourceNotFoundException.html)dilemparkan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.AttributeDefinition;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughputDescription;
import com.amazonaws.services.dynamodbv2.model.TableDescription;
```

 **Kode** 

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

try {
    TableDescription table_info =
       ddb.describeTable(table_name).getTable();

    if (table_info != null) {
        System.out.format("Table name  : %s\n",
              table_info.getTableName());
        System.out.format("Table ARN   : %s\n",
              table_info.getTableArn());
        System.out.format("Status      : %s\n",
              table_info.getTableStatus());
        System.out.format("Item count  : %d\n",
              table_info.getItemCount().longValue());
        System.out.format("Size (bytes): %d\n",
              table_info.getTableSizeBytes().longValue());

        ProvisionedThroughputDescription throughput_info =
           table_info.getProvisionedThroughput();
        System.out.println("Throughput");
        System.out.format("  Read Capacity : %d\n",
              throughput_info.getReadCapacityUnits().longValue());
        System.out.format("  Write Capacity: %d\n",
              throughput_info.getWriteCapacityUnits().longValue());

        List<AttributeDefinition> attributes =
           table_info.getAttributeDefinitions();
        System.out.println("Attributes");
        for (AttributeDefinition a : attributes) {
            System.out.format("  %s (%s)\n",
                  a.getAttributeName(), a.getAttributeType());
        }
    }
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/DescribeTable.java) di GitHub.

## Ubah (Perbarui) Tabel
<a name="dynamodb-update-table"></a>

Anda dapat memodifikasi nilai throughput yang disediakan tabel kapan saja dengan memanggil metode [DynamoDB klien](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/AmazonDynamoDB.html). `updateTable`

**catatan**  
Jika tabel bernama tidak ada untuk akun dan wilayah Anda, a [ResourceNotFoundException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/ResourceNotFoundException.html)dilemparkan.

 **Impor** 

```
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
import com.amazonaws.AmazonServiceException;
```

 **Kode** 

```
ProvisionedThroughput table_throughput = new ProvisionedThroughput(
      read_capacity, write_capacity);

final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();

try {
    ddb.updateTable(table_name, table_throughput);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/UpdateTable.java) di GitHub.

## Menghapus Tabel
<a name="dynamodb-delete-table"></a>

Panggil `deleteTable` metode [DynamoDB klien](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/AmazonDynamoDB.html) dan berikan nama tabel.

**catatan**  
Jika tabel bernama tidak ada untuk akun dan wilayah Anda, a [ResourceNotFoundException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/ResourceNotFoundException.html)dilemparkan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
```

 **Kode** 

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

try {
    ddb.deleteTable(table_name);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/DeleteTable.java) di GitHub.

## Info Selengkapnya
<a name="more-info"></a>
+  [Pedoman untuk Bekerja dengan Tabel](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html) di Panduan Amazon DynamoDB Pengembang
+  [Bekerja dengan Tabel DynamoDB di](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html) Panduan Amazon DynamoDB Pengembang

# Bekerja dengan Item di DynamoDB
<a name="examples-dynamodb-items"></a>

Dalam DynamoDB, item adalah kumpulan *atribut*, yang masing-masing memiliki *nama* dan *nilai*. Nilai atribut dapat berupa skalar, set, atau jenis dokumen. Untuk informasi selengkapnya, lihat [Aturan Penamaan dan Jenis Data](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html) di Panduan Amazon DynamoDB Pengembang.

## Mengambil (Dapatkan) Item dari Tabel
<a name="dynamodb-get-item"></a>

Panggil `getItem` metode AmazonDynamo DB dan berikan [GetItemRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/GetItemRequest.html)objek dengan nama tabel dan nilai kunci primer dari item yang Anda inginkan. Ia mengembalikan sebuah [GetItemResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/GetItemResult.html)objek.

Anda dapat menggunakan `getItem()` metode `GetItemResult` objek yang dikembalikan untuk mengambil [Map](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Map.html) of key (String) dan value ([AttributeValue](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/AttributeValue.html)) pasangan yang terkait dengan item tersebut.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.GetItemRequest;
import java.util.HashMap;
import java.util.Map;
```

 **Kode** 

```
HashMap<String,AttributeValue> key_to_get =
    new HashMap<String,AttributeValue>();

key_to_get.put("DATABASE_NAME", new AttributeValue(name));

GetItemRequest request = null;
if (projection_expression != null) {
    request = new GetItemRequest()
        .withKey(key_to_get)
        .withTableName(table_name)
        .withProjectionExpression(projection_expression);
} else {
    request = new GetItemRequest()
        .withKey(key_to_get)
        .withTableName(table_name);
}

final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();

try {
    Map<String,AttributeValue> returned_item =
       ddb.getItem(request).getItem();
    if (returned_item != null) {
        Set<String> keys = returned_item.keySet();
        for (String key : keys) {
            System.out.format("%s: %s\n",
                    key, returned_item.get(key).toString());
        }
    } else {
        System.out.format("No item found with the key %s!\n", name);
    }
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/GetItem.java) di GitHub.

## Menambahkan Item Baru ke Tabel
<a name="dynamodb-add-item"></a>

Buat [Peta](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Map.html) pasangan kunci-nilai yang mewakili atribut item. Ini harus menyertakan nilai untuk bidang kunci utama tabel. Jika item yang diidentifikasi oleh kunci utama sudah ada, bidangnya *diperbarui* oleh permintaan.

**catatan**  
Jika tabel bernama tidak ada untuk akun dan wilayah Anda, a [ResourceNotFoundException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/ResourceNotFoundException.html)dilemparkan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException;
import java.util.ArrayList;
```

 **Kode** 

```
HashMap<String,AttributeValue> item_values =
    new HashMap<String,AttributeValue>();

item_values.put("Name", new AttributeValue(name));

for (String[] field : extra_fields) {
    item_values.put(field[0], new AttributeValue(field[1]));
}

final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();

try {
    ddb.putItem(table_name, item_values);
} catch (ResourceNotFoundException e) {
    System.err.format("Error: The table \"%s\" can't be found.\n", table_name);
    System.err.println("Be sure that it exists and that you've typed its name correctly!");
    System.exit(1);
} catch (AmazonServiceException e) {
    System.err.println(e.getMessage());
    System.exit(1);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/PutItem.java) di GitHub.

## Memperbarui Item yang Ada dalam Tabel
<a name="dynamodb-update-item"></a>

Anda dapat memperbarui atribut untuk item yang sudah ada dalam tabel dengan menggunakan `updateItem` metode AmazonDynamo DB, memberikan nama tabel, nilai kunci primer, dan peta bidang untuk diperbarui.

**catatan**  
Jika tabel bernama tidak ada untuk akun dan wilayah Anda, atau jika item yang diidentifikasi oleh kunci utama yang Anda lewati tidak ada, a akan [ResourceNotFoundException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/model/ResourceNotFoundException.html)ditampilkan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.AttributeAction;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.AttributeValueUpdate;
import com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException;
import java.util.ArrayList;
```

 **Kode** 

```
HashMap<String,AttributeValue> item_key =
   new HashMap<String,AttributeValue>();

item_key.put("Name", new AttributeValue(name));

HashMap<String,AttributeValueUpdate> updated_values =
    new HashMap<String,AttributeValueUpdate>();

for (String[] field : extra_fields) {
    updated_values.put(field[0], new AttributeValueUpdate(
                new AttributeValue(field[1]), AttributeAction.PUT));
}

final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();

try {
    ddb.updateItem(table_name, item_key, updated_values);
} catch (ResourceNotFoundException e) {
    System.err.println(e.getMessage());
    System.exit(1);
} catch (AmazonServiceException e) {
    System.err.println(e.getMessage());
    System.exit(1);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/UpdateItem.java) di GitHub.

## Gunakan kelas Dynamo DBMapper
<a name="use-the-dynamodbmapper-class"></a>

[AWS SDK untuk Java](https://aws.amazon.com/sdk-for-java/)Ini menyediakan DBMapper kelas [Dynamo](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html), memungkinkan Anda untuk memetakan kelas sisi klien Anda ke tabel. Amazon DynamoDB Untuk menggunakan DBMapper kelas [Dynamo](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html), Anda menentukan hubungan antara item dalam DynamoDB tabel dan instance objek yang sesuai dalam kode Anda dengan menggunakan anotasi (seperti yang ditunjukkan dalam contoh kode berikut). DBMapperKelas [Dynamo](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html) memungkinkan Anda untuk mengakses tabel Anda; melakukan berbagai operasi membuat, membaca, memperbarui, dan menghapus (CRUD); dan mengeksekusi query.

**catatan**  
DBMapperKelas [Dynamo](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html) tidak memungkinkan Anda untuk membuat, memperbarui, atau menghapus tabel.

 **Impor** 

```
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;
import com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException;
```

 **Kode** 

Contoh kode Java berikut menunjukkan cara menambahkan konten ke tabel *Musik* dengan menggunakan DBMapper kelas [Dynamo](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html). Setelah konten ditambahkan ke tabel, perhatikan bahwa item dimuat dengan menggunakan tombol *Partition* and *Sort*. Kemudian item *Penghargaan* diperbarui. Untuk informasi tentang cara membuat tabel *Musik*, lihat [Membuat Tabel](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) di Panduan Amazon DynamoDB Pengembang.

```
       AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();
       MusicItems items = new MusicItems();

       try{
           // Add new content to the Music table
           items.setArtist(artist);
           items.setSongTitle(songTitle);
           items.setAlbumTitle(albumTitle);
           items.setAwards(Integer.parseInt(awards)); //convert to an int

           // Save the item
           DynamoDBMapper mapper = new DynamoDBMapper(client);
           mapper.save(items);

           // Load an item based on the Partition Key and Sort Key
           // Both values need to be passed to the mapper.load method
           String artistName = artist;
           String songQueryTitle = songTitle;

           // Retrieve the item
           MusicItems itemRetrieved = mapper.load(MusicItems.class, artistName, songQueryTitle);
           System.out.println("Item retrieved:");
           System.out.println(itemRetrieved);

           // Modify the Award value
           itemRetrieved.setAwards(2);
           mapper.save(itemRetrieved);
           System.out.println("Item updated:");
           System.out.println(itemRetrieved);

           System.out.print("Done");
       } catch (AmazonDynamoDBException e) {
           e.getStackTrace();
       }
   }

   @DynamoDBTable(tableName="Music")
   public static class MusicItems {

       //Set up Data Members that correspond to columns in the Music table
       private String artist;
       private String songTitle;
       private String albumTitle;
       private int awards;

       @DynamoDBHashKey(attributeName="Artist")
       public String getArtist() {
           return this.artist;
       }

       public void setArtist(String artist) {
           this.artist = artist;
       }

       @DynamoDBRangeKey(attributeName="SongTitle")
       public String getSongTitle() {
           return this.songTitle;
       }

       public void setSongTitle(String title) {
           this.songTitle = title;
       }

       @DynamoDBAttribute(attributeName="AlbumTitle")
       public String getAlbumTitle() {
           return this.albumTitle;
       }

       public void setAlbumTitle(String title) {
           this.albumTitle = title;
       }

       @DynamoDBAttribute(attributeName="Awards")
       public int getAwards() {
           return this.awards;
       }

       public void setAwards(int awards) {
           this.awards = awards;
       }
   }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/dynamodb/src/main/java/aws/example/dynamodb/UseDynamoMapping.java) di GitHub.

## Info Selengkapnya
<a name="more-info"></a>
+  [Pedoman untuk Bekerja dengan Item](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForItems.html) di Panduan Amazon DynamoDB Pengembang
+  [Bekerja dengan Item DynamoDB di](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html) Panduan Amazon DynamoDB Pengembang

# Amazon EC2 Contoh Menggunakan AWS SDK untuk Java
<a name="prog-services-ec2"></a>

Bagian ini memberikan contoh pemrograman [Amazon EC2](https://aws.amazon.com/ec2/)dengan AWS SDK untuk Java.

**Topics**
+ [Tutorial: Memulai Sebuah EC2 Instance](how-to-ec2.md)
+ [Menggunakan Peran IAM untuk Memberikan Akses ke AWS Sumber Daya Amazon EC2](java-dg-roles.md)
+ [Tutorial: Contoh Amazon EC2 Spot](tutorial-spot-instances-java.md)
+ [Tutorial: Manajemen Permintaan Amazon EC2 Spot Tingkat Lanjut](tutorial-spot-adv-java.md)
+ [Mengelola Amazon EC2 Instans](examples-ec2-instances.md)
+ [Menggunakan Alamat IP Elastis di Amazon EC2](examples-ec2-elastic-ip.md)
+ [Gunakan wilayah dan zona ketersediaan](examples-ec2-regions-zones.md)
+ [Bekerja dengan Pasangan Amazon EC2 Kunci](examples-ec2-key-pairs.md)
+ [Bekerja dengan kelompok keamanan di Amazon EC2](examples-ec2-security-groups.md)

# Tutorial: Memulai Sebuah EC2 Instance
<a name="how-to-ec2"></a>

Tutorial ini menunjukkan bagaimana menggunakan AWS SDK untuk Java untuk memulai sebuah EC2 instance.

**Topics**
+ [Prasyarat](#prerequisitesec2)
+ [Buat Grup Amazon EC2 Keamanan](create-security-group.md)
+ [Membuat Pasangan Kunci](create-key-pair.md)
+ [Jalankan sebuah Amazon EC2 Instance](run-instance.md)

## Prasyarat
<a name="prerequisitesec2"></a>

Sebelum Anda mulai, pastikan bahwa Anda telah membuat Akun AWS dan bahwa Anda telah mengatur AWS kredensi Anda. Untuk informasi selengkapnya, lihat [Memulai](getting-started.md).

# Buat Grup Amazon EC2 Keamanan
<a name="create-security-group"></a>

## EC2-Classic pensiun
<a name="retiringEC2Classic"></a>

**Awas**  
Kami pensiun EC2 -Classic pada 15 Agustus 2022. Kami menyarankan Anda bermigrasi dari EC2 -Classic ke VPC. Untuk informasi lebih lanjut, lihat posting blog [EC2-Classic-Classic Networking is Retiring - Inilah](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/) Cara Mempersiapkan.

Buat *grup keamanan*, yang bertindak sebagai firewall virtual yang mengontrol lalu lintas jaringan untuk satu atau lebih EC2 contoh. Secara default, Amazon EC2 kaitkan instans Anda dengan grup keamanan yang tidak mengizinkan lalu lintas masuk. Anda dapat membuat grup keamanan yang memungkinkan EC2 instans Anda menerima lalu lintas tertentu. Misalnya, jika Anda perlu terhubung ke instance Linux, Anda harus mengkonfigurasi grup keamanan untuk mengizinkan lalu lintas SSH. Anda dapat membuat grup keamanan menggunakan Amazon EC2 konsol atau file AWS SDK untuk Java.

Anda membuat grup keamanan untuk digunakan di EC2 -Classic atau EC2 -VPC. Untuk informasi selengkapnya tentang EC2 -Classic dan EC2 -VPC, lihat [Platform yang Didukung](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

Untuk informasi selengkapnya tentang membuat grup keamanan menggunakan Amazon EC2 konsol, lihat [Grup Amazon EC2 Keamanan](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

1. Membuat dan menginisialisasi sebuah [CreateSecurityGroupRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateSecurityGroupRequest.html)instance. Gunakan [withGroupName](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateSecurityGroupRequest.html#withGroupName-java.lang.String-)metode untuk mengatur nama grup keamanan, dan metode [withDescription untuk mengatur deskripsi](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateSecurityGroupRequest.html#withDescription-java.lang.String-) grup keamanan, sebagai berikut:

   ```
   CreateSecurityGroupRequest csgr = new CreateSecurityGroupRequest();
   csgr.withGroupName("JavaSecurityGroup").withDescription("My security group");
   ```

   Nama grup keamanan harus unik di AWS wilayah tempat Anda menginisialisasi Amazon EC2 klien Anda. Anda harus menggunakan karakter US-ASCII untuk nama dan deskripsi grup keamanan.

1. Lulus objek permintaan sebagai parameter ke [createSecurityGroup](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/AmazonEC2.html#createSecurityGroup-com.amazonaws.services.ec2.model.CreateSecurityGroupRequest-)metode. Metode mengembalikan [CreateSecurityGroupResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateSecurityGroupResult.html)objek, sebagai berikut:

   ```
   CreateSecurityGroupResult createSecurityGroupResult =
       amazonEC2Client.createSecurityGroup(csgr);
   ```

   Jika Anda mencoba membuat grup keamanan dengan nama yang sama dengan grup keamanan yang ada`createSecurityGroup`, berikan pengecualian.

Secara default, grup keamanan baru tidak mengizinkan lalu lintas masuk ke Amazon EC2 instans Anda. Untuk mengizinkan lalu lintas masuk, Anda harus secara eksplisit mengotorisasi masuknya grup keamanan. Anda dapat mengotorisasi ingress untuk alamat IP individual, untuk berbagai alamat IP, untuk protokol tertentu, dan untuk port TCP/UDP.

1. Membuat dan menginisialisasi sebuah [IpPermission](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/IpPermission.html)instance. Gunakan metode [withIPv4Ranges](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/IpPermission.html#withIpv4Ranges-java.util.Collection-) untuk mengatur rentang alamat IP untuk mengotorisasi masuknya, dan gunakan [withIpProtocol](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/IpPermission.html#withIpProtocol-java.lang.String-)metode untuk mengatur protokol IP. Gunakan [withToPort](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/IpPermission.html#withToPort-java.lang.Integer-)metode [withFromPort](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/IpPermission.html#withFromPort-java.lang.Integer-)dan untuk menentukan rentang port untuk mengotorisasi masuknya, sebagai berikut:

   ```
   IpPermission ipPermission =
       new IpPermission();
   
   IpRange ipRange1 = new IpRange().withCidrIp("111.111.111.111/32");
   IpRange ipRange2 = new IpRange().withCidrIp("150.150.150.150/32");
   
   ipPermission.withIpv4Ranges(Arrays.asList(new IpRange[] {ipRange1, ipRange2}))
               .withIpProtocol("tcp")
               .withFromPort(22)
               .withToPort(22);
   ```

   Semua kondisi yang Anda tentukan dalam `IpPermission` objek harus dipenuhi agar masuknya diizinkan.

   Tentukan alamat IP menggunakan notasi CIDR. Jika Anda menentukan protokol sebagai TCP/UDP, Anda harus menyediakan port sumber dan port tujuan. Anda dapat mengotorisasi port hanya jika Anda menentukan TCP atau UDP.

1. Membuat dan menginisialisasi sebuah [AuthorizeSecurityGroupIngressRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AuthorizeSecurityGroupEgressRequest.html)instance. Gunakan `withGroupName` metode untuk menentukan nama grup keamanan, dan teruskan `IpPermission` objek yang Anda inisialisasi sebelumnya ke [withIpPermissions](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AuthorizeSecurityGroupEgressRequest.html#withIpPermissions-com.amazonaws.services.ec2.model.IpPermission…​-)metode, sebagai berikut:

   ```
   AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest =
       new AuthorizeSecurityGroupIngressRequest();
   
   authorizeSecurityGroupIngressRequest.withGroupName("JavaSecurityGroup")
                                       .withIpPermissions(ipPermission);
   ```

1. Lulus objek permintaan ke dalam metode [authorizeSecurityGroupIngress](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/AmazonEC2Client.html#authorizeSecurityGroupIngress-com.amazonaws.services.ec2.model.AuthorizeSecurityGroupIngressRequest-), sebagai berikut:

   ```
   amazonEC2Client.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);
   ```

   Jika Anda memanggil `authorizeSecurityGroupIngress` dengan alamat IP yang masuknya sudah diotorisasi, metode ini melempar pengecualian. Buat dan inisialisasi `IpPermission` objek baru untuk mengotorisasi ingress untuk berbagai port IPs, dan protokol sebelum menelepon. `AuthorizeSecurityGroupIngress`

Setiap kali Anda memanggil metode [authorizeSecurityGroupIngress](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/AmazonEC2Client.html#authorizeSecurityGroupIngress-com.amazonaws.services.ec2.model.AuthorizeSecurityGroupIngressRequest-) atau [authorizeSecurityGroupEgress](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/AmazonEC2Client.html#authorizeSecurityGroupEgress-com.amazonaws.services.ec2.model.AuthorizeSecurityGroupEgressRequest-), aturan ditambahkan ke grup keamanan Anda.

# Membuat Pasangan Kunci
<a name="create-key-pair"></a>

Anda harus menentukan key pair ketika Anda meluncurkan sebuah EC2 instance dan kemudian menentukan kunci pribadi dari key pair ketika Anda terhubung ke instance. Anda dapat membuat key pair atau menggunakan key pair yang sudah ada yang telah Anda gunakan saat meluncurkan instance lain. Untuk informasi selengkapnya, lihat [Pasangan Amazon EC2 Kunci](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

1. Membuat dan menginisialisasi sebuah [CreateKeyPairRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateKeyPairRequest.html)instance. Gunakan [withKeyName](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateKeyPairRequest.html#withKeyName-java.lang.String-)metode untuk mengatur nama key pair, sebagai berikut:

   ```
   CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest();
   
   createKeyPairRequest.withKeyName(keyName);
   ```
**penting**  
Nama pasangan kunci harus unik. Jika Anda mencoba membuat key pair dengan nama kunci yang sama dengan key pair yang ada, Anda akan mendapatkan pengecualian.

1. Lulus objek permintaan ke [createKeyPair](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/AmazonEC2.html#createKeyPair-com.amazonaws.services.ec2.model.CreateKeyPairRequest--)metode. Metode mengembalikan sebuah [CreateKeyPairResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateKeyPairResult.html)contoh, sebagai berikut:

   ```
   CreateKeyPairResult createKeyPairResult =
     amazonEC2Client.createKeyPair(createKeyPairRequest);
   ```

1. Panggil [getKeyPair](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateKeyPairResult.html#getKeyPair--)metode objek hasil untuk mendapatkan [KeyPair](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/KeyPair.html)objek. Panggil [getKeyMaterial](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/KeyPair.html#getKeyMaterial--)metode `KeyPair` objek untuk mendapatkan kunci pribadi yang dikodekan PEM yang tidak terenkripsi, sebagai berikut:

   ```
   KeyPair keyPair = new KeyPair();
   
   keyPair = createKeyPairResult.getKeyPair();
   
   String privateKey = keyPair.getKeyMaterial();
   ```

# Jalankan sebuah Amazon EC2 Instance
<a name="run-instance"></a>

Gunakan prosedur berikut untuk meluncurkan satu atau beberapa EC2 instance yang dikonfigurasi secara identik dari Amazon Machine Image (AMI) yang sama. Setelah membuat EC2 instance, Anda dapat memeriksa statusnya. Setelah EC2 instance Anda berjalan, Anda dapat terhubung ke instans tersebut.

1. Membuat dan menginisialisasi sebuah [RunInstancesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RunInstancesRequest.html)instance. Pastikan bahwa AMI, key pair, dan grup keamanan yang Anda tentukan ada di wilayah yang Anda tentukan saat Anda membuat objek klien.

   ```
   RunInstancesRequest runInstancesRequest =
      new RunInstancesRequest();
   
   runInstancesRequest.withImageId("ami-a9d09ed1")
                      .withInstanceType(InstanceType.T1Micro)
                      .withMinCount(1)
                      .withMaxCount(1)
                      .withKeyName("my-key-pair")
                      .withSecurityGroups("my-security-group");
   ```  
 [withImageId](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RunInstancesRequest.html#withImageId-java.lang.String-)   
   + ID AMI. Untuk mempelajari cara menemukan publik yang AMIs disediakan oleh Amazon atau membuat milik Anda sendiri, lihat [Amazon Machine Image (AMI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html).  
 [withInstanceType](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RunInstancesRequest.html#withInstanceType-java.lang.String-)   
   + Jenis instance yang kompatibel dengan AMI yang ditentukan. Untuk informasi selengkapnya, lihat [Jenis Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) dalam Panduan Amazon EC2 Pengguna untuk Instans Linux.  
 [withMinCount](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RunInstancesRequest.html#withMinCount-java.lang.Integer-)   
   + Jumlah minimum EC2 instance yang akan diluncurkan. Jika ini lebih banyak instance daripada yang Amazon EC2 dapat diluncurkan di Zona Ketersediaan target, tidak akan Amazon EC2 meluncurkan instance.  
 [withMaxCount](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RunInstancesRequest.html#withMaxCount-java.lang.Integer-)   
   + Jumlah maksimum EC2 instance untuk diluncurkan. Jika ini lebih banyak instance daripada yang Amazon EC2 dapat diluncurkan di Zona Ketersediaan target, Amazon EC2 meluncurkan jumlah instans sebanyak mungkin di atas. `MinCount` Anda dapat meluncurkan antara 1 dan jumlah maksimum instance yang diizinkan untuk jenis instans. Untuk informasi selengkapnya, lihat Berapa banyak instance yang dapat saya jalankan Amazon EC2 di FAQ Amazon EC2 Umum.  
 [withKeyName](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RunInstancesRequest.html#withKeyName-java.lang.String-)   
   + Nama dari EC2 key pair. Jika Anda meluncurkan instance tanpa menentukan key pair, Anda tidak dapat menghubungkannya. Untuk informasi selengkapnya, lihat [Membuat Pasangan Kunci](create-key-pair.md).  
 [withSecurityGroups](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RunInstancesRequest.html#withSecurityGroups-java.util.Collection-)   
   + Satu atau lebih grup keamanan. Untuk informasi selengkapnya, lihat [Membuat Grup Amazon EC2 Keamanan](create-security-group.md).

1. Luncurkan instance dengan meneruskan objek permintaan ke metode [RunInstances.](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/AmazonEC2Client.html#runInstances-com.amazonaws.services.ec2.model.RunInstancesRequest-) Metode mengembalikan [RunInstancesResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RunInstancesResult.html)objek, sebagai berikut:

   ```
   RunInstancesResult result = amazonEC2Client.runInstances(
                                 runInstancesRequest);
   ```

Setelah instans Anda berjalan, Anda dapat menghubungkannya menggunakan key pair Anda. Untuk informasi selengkapnya, lihat [Connect to Your Linux Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html). di Panduan Amazon EC2 Pengguna untuk Instans Linux.

# Menggunakan Peran IAM untuk Memberikan Akses ke AWS Sumber Daya Amazon EC2
<a name="java-dg-roles"></a>

Semua permintaan ke Amazon Web Services (AWS) harus ditandatangani secara kriptografis menggunakan kredensil yang dikeluarkan oleh. AWS Anda dapat menggunakan *peran IAM* untuk memberikan akses aman ke AWS sumber daya dari Amazon EC2 instans Anda dengan mudah.

Topik ini memberikan informasi tentang cara menggunakan peran IAM dengan aplikasi Java SDK yang berjalan. Amazon EC2 Untuk informasi selengkapnya tentang instans IAM, lihat [Peran IAM Amazon EC2 di Panduan Amazon EC2 Pengguna untuk](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) Instans Linux.

## Rantai penyedia default dan profil EC2 instans
<a name="default-provider-chain"></a>

Jika aplikasi Anda membuat AWS klien menggunakan konstruktor default, maka klien akan mencari kredensil menggunakan *rantai penyedia kredensi default, dengan* urutan sebagai berikut:

1. Dalam properti sistem Java: `aws.accessKeyId` dan`aws.secretKey`.

1. Dalam variabel lingkungan sistem: `AWS_ACCESS_KEY_ID` dan`AWS_SECRET_ACCESS_KEY`.

1. Dalam file kredensi default (lokasi file ini bervariasi menurut platform).

1. Kredensil dikirimkan melalui layanan Amazon EC2 kontainer jika variabel `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` lingkungan disetel dan manajer keamanan memiliki izin untuk mengakses variabel.

1. Dalam *kredensi profil instance*, yang ada dalam metadata instance yang terkait dengan peran IAM untuk instance. EC2 

1. Kredensi Token Identitas Web dari lingkungan atau wadah.

Langkah *kredensial profil instans* dalam rantai penyedia default hanya tersedia saat menjalankan aplikasi Anda pada sebuah Amazon EC2 instance, tetapi memberikan kemudahan penggunaan dan keamanan terbaik saat bekerja dengan Amazon EC2 instance. Anda juga dapat meneruskan [InstanceProfileCredentialsProvider](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/InstanceProfileCredentialsProvider.html)instance langsung ke konstruktor klien untuk mendapatkan kredensil profil instance tanpa melanjutkan seluruh rantai penyedia default.

Sebagai contoh:

```
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
              .withCredentials(new InstanceProfileCredentialsProvider(false))
              .build();
```

Saat menggunakan pendekatan ini, SDK mengambil AWS kredensil sementara yang memiliki izin yang sama dengan yang terkait dengan peran IAM yang terkait dengan instance di profil instancenya. Amazon EC2 Meskipun kredensil ini bersifat sementara dan pada akhirnya akan kedaluwarsa, `InstanceProfileCredentialsProvider` secara berkala menyegarkannya untuk Anda sehingga kredensil yang diperoleh terus memungkinkan akses ke. AWS

**penting**  
Penyegaran kredenal otomatis *hanya* terjadi ketika Anda menggunakan konstruktor klien default, yang membuatnya sendiri `InstanceProfileCredentialsProvider` sebagai bagian dari rantai penyedia default, atau ketika Anda meneruskan `InstanceProfileCredentialsProvider` instance langsung ke konstruktor klien. Jika Anda menggunakan metode lain untuk mendapatkan atau meneruskan kredensi profil instans, Anda bertanggung jawab untuk memeriksa dan menyegarkan kredensil yang kedaluwarsa.

Jika konstruktor klien tidak dapat menemukan kredensil menggunakan rantai penyedia kredensil, itu akan memunculkan file. [AmazonClientException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/AmazonClientException.html)

## Walkthrough: Menggunakan peran IAM untuk instance EC2
<a name="roles-walkthrough"></a>

Panduan berikut menunjukkan cara mengambil objek dari Amazon S3 menggunakan peran IAM untuk mengelola akses.

### Buat IAM Role
<a name="java-dg-create-the-role"></a>

Buat peran IAM yang memberikan akses hanya-baca ke. Amazon S3

1. Buka [konsol IAM](https://console.aws.amazon.com/iam/home).

1. Di panel navigasi, pilih **Peran, lalu Buat Peran** **Baru**.

1. Masukkan nama untuk peran tersebut, lalu pilih **Langkah Berikutnya**. Ingat nama ini, karena Anda akan membutuhkannya saat meluncurkan Amazon EC2 instance Anda.

1. Pada halaman **Pilih Jenis Peran**, di bawah ** Layanan AWS Peran**, pilih ** Amazon EC2 **.

1. Pada halaman **Setel Izin**, di bawah **Pilih Templat Kebijakan**, pilih **Akses Hanya Amazon S3 Baca**, lalu **Langkah Berikutnya**.

1. Pada halaman **Ulasan**, pilih **Buat Peran**.

### Luncurkan EC2 Instance dan Tentukan Peran IAM Anda
<a name="java-dg-launch-ec2-instance-with-instance-profile"></a>

Anda dapat meluncurkan Amazon EC2 instance dengan peran IAM menggunakan Amazon EC2 konsol atau. AWS SDK untuk Java
+ Untuk meluncurkan Amazon EC2 instance menggunakan konsol, ikuti petunjuk di [Memulai dengan Instans Amazon EC2 Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

  Saat Anda mencapai halaman **Peluncuran Instance Tinjauan**, pilih **Edit detail instans**. Dalam **peran IAM**, pilih peran IAM yang Anda buat sebelumnya. Selesaikan prosedur sesuai petunjuk.
**catatan**  
Anda harus membuat atau menggunakan grup keamanan dan key pair yang ada untuk terhubung ke instance.
+ Untuk meluncurkan Amazon EC2 instance dengan peran IAM menggunakan AWS SDK untuk Java, lihat [Menjalankan Amazon EC2 Instance](run-instance.md).

### Buat Aplikasi Anda
<a name="java-dg-remove-the-credentials"></a>

Mari kita membangun aplikasi sampel untuk dijalankan pada EC2 instance. Pertama, buat direktori yang dapat Anda gunakan untuk menyimpan file tutorial Anda (misalnya,`GetS3ObjectApp`).

Selanjutnya, salin AWS SDK untuk Java pustaka ke direktori yang baru Anda buat. Jika Anda mengunduh AWS SDK untuk Java ke `~/Downloads` direktori Anda, Anda dapat menyalinnya menggunakan perintah berikut:

```
cp -r ~/Downloads/aws-java-sdk-{1.7.5}/lib .
cp -r ~/Downloads/aws-java-sdk-{1.7.5}/third-party .
```

Buka file baru, sebut saja`GetS3Object.java`, dan tambahkan kode berikut:

```
import java.io.*;

import com.amazonaws.auth.*;
import com.amazonaws.services.s3.*;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;

public class GetS3Object {
  private static final String bucketName = "text-content";
  private static final String key = "text-object.txt";

  public static void main(String[] args) throws IOException
  {
    AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();

    try {
      System.out.println("Downloading an object");
      S3Object s3object = s3Client.getObject(
          new GetObjectRequest(bucketName, key));
      displayTextInputStream(s3object.getObjectContent());
    }
    catch(AmazonServiceException ase) {
      System.err.println("Exception was thrown by the service");
    }
    catch(AmazonClientException ace) {
      System.err.println("Exception was thrown by the client");
    }
  }

  private static void displayTextInputStream(InputStream input) throws IOException
  {
    // Read one text line at a time and display.
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    while(true)
    {
      String line = reader.readLine();
      if(line == null) break;
      System.out.println( "    " + line );
    }
    System.out.println();
  }
}
```

Buka file baru, sebut saja`build.xml`, dan tambahkan baris berikut:

```
<project name="Get {S3} Object" default="run" basedir=".">
  <path id="aws.java.sdk.classpath">
    <fileset dir="./lib" includes="**/*.jar"/>
    <fileset dir="./third-party" includes="**/*.jar"/>
    <pathelement location="lib"/>
    <pathelement location="."/>
  </path>

  <target name="build">
  <javac debug="true"
    includeantruntime="false"
    srcdir="."
    destdir="."
    classpathref="aws.java.sdk.classpath"/>
  </target>

  <target name="run" depends="build">
    <java classname="GetS3Object" classpathref="aws.java.sdk.classpath" fork="true"/>
  </target>
</project>
```

Bangun dan jalankan program yang dimodifikasi. Perhatikan bahwa tidak ada kredensil yang disimpan dalam program. Oleh karena itu, kecuali Anda memiliki AWS kredensil Anda sudah ditentukan, kode akan dibuang. `AmazonServiceException` Sebagai contoh:

```
$ ant
Buildfile: /path/to/my/GetS3ObjectApp/build.xml

build:
  [javac] Compiling 1 source file to /path/to/my/GetS3ObjectApp

run:
   [java] Downloading an object
   [java] AmazonServiceException

BUILD SUCCESSFUL
```

### Transfer Program Kompilasi ke EC2 Instance Anda
<a name="java-dg-transfer-compiled-program-to-ec2-instance"></a>

Transfer program ke Amazon EC2 instans Anda menggunakan salinan aman (**``**), bersama dengan AWS SDK untuk Java pustaka. Urutan perintah terlihat seperti berikut ini.

```
scp -p -i {my-key-pair}.pem GetS3Object.class ec2-user@{public_dns}:GetS3Object.class
scp -p -i {my-key-pair}.pem build.xml ec2-user@{public_dns}:build.xml
scp -r -p -i {my-key-pair}.pem lib ec2-user@{public_dns}:lib
scp -r -p -i {my-key-pair}.pem third-party ec2-user@{public_dns}:third-party
```

**catatan**  
Tergantung pada distribusi Linux yang Anda gunakan, *nama pengguna* mungkin “ec2-user”, “root”, atau “ubuntu”. Untuk mendapatkan nama DNS publik instance Anda, buka [EC2 konsol](https://console.aws.amazon.com/ec2/home) dan cari nilai **DNS Publik** di tab **Deskripsi** (misalnya,`ec2-198-51-100-1.compute-1.amazonaws.com`).

Dalam perintah sebelumnya:
+  `GetS3Object.class`adalah program yang dikompilasi
+  `build.xml`adalah file semut yang digunakan untuk membangun dan menjalankan program Anda
+ `third-party`direktori `lib` dan adalah folder perpustakaan yang sesuai dari file. AWS SDK untuk Java
+ `-r`Sakelar menunjukkan bahwa `scp` harus melakukan salinan rekursif dari semua isi `library` dan `third-party` direktori dalam distribusi. AWS SDK untuk Java 
+ `-p`Sakelar menunjukkan bahwa `scp` harus mempertahankan izin file sumber saat menyalinnya ke tujuan.
**catatan**  
`-p`Sakelar hanya berfungsi di Linux, macOS, atau Unix. Jika Anda menyalin file dari Windows, Anda mungkin perlu memperbaiki izin file pada instance Anda menggunakan perintah berikut:

```
chmod -R u+rwx GetS3Object.class build.xml lib third-party
```

### Jalankan Program Sampel pada EC2 Instance
<a name="java-dg-run-the-program"></a>

Untuk menjalankan program, sambungkan ke Amazon EC2 instans Anda. Untuk informasi selengkapnya, lihat [Connect to Your Linux Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

Jika tidak **` ant `**tersedia pada instans Anda, instal menggunakan perintah berikut:

```
sudo yum install ant
```

Kemudian, jalankan program menggunakan `ant` sebagai berikut:

```
ant run
```

Program ini akan menulis isi Amazon S3 objek Anda ke jendela perintah Anda.

# Tutorial: Contoh Amazon EC2 Spot
<a name="tutorial-spot-instances-java"></a>

## Gambaran Umum
<a name="tutor-spot-java-overview"></a>

*Instans Spot memungkinkan Anda menawar kapasitas Amazon Elastic Compute Cloud (Amazon EC2) yang tidak terpakai hingga 90% dibandingkan harga Instans Sesuai Permintaan dan menjalankan instans yang diperoleh selama tawaran Anda melebihi Harga Spot saat ini.* Amazon EC2 mengubah Harga Spot secara berkala berdasarkan penawaran dan permintaan, dan pelanggan yang penawarannya memenuhi atau melampauinya mendapatkan akses ke Instans Spot yang tersedia. Seperti Instans Sesuai Permintaan dan Instans Cadangan, Instans Spot memberi Anda opsi lain untuk mendapatkan lebih banyak kapasitas komputasi.

Instans Spot dapat secara signifikan menurunkan Amazon EC2 biaya untuk pemrosesan batch, penelitian ilmiah, pemrosesan gambar, pengkodean video, perayapan data dan web, analisis keuangan, dan pengujian. Selain itu, Instans Spot memberi Anda akses ke sejumlah besar kapasitas tambahan dalam situasi di mana kebutuhan akan kapasitas itu tidak mendesak.

Untuk menggunakan Instans Spot, tempatkan permintaan Instans Spot yang menentukan harga maksimum yang bersedia Anda bayar per jam instans; ini adalah tawaran Anda. Jika tawaran Anda melebihi Harga Spot saat ini, permintaan Anda terpenuhi dan instans Anda akan berjalan hingga Anda memilih untuk menghentikannya atau Harga Spot meningkat di atas tawaran Anda (mana yang lebih cepat).

Penting untuk dicatat:
+ Anda akan sering membayar kurang per jam dari tawaran Anda. Amazon EC2 menyesuaikan Harga Spot secara berkala saat permintaan masuk dan perubahan pasokan yang tersedia. Setiap orang membayar Harga Spot yang sama untuk periode tersebut terlepas dari apakah tawaran mereka lebih tinggi. Oleh karena itu, Anda mungkin membayar kurang dari tawaran Anda, tetapi Anda tidak akan pernah membayar lebih dari tawaran Anda.
+ Jika Anda menjalankan Instans Spot dan tawaran Anda tidak lagi memenuhi atau melebihi Harga Spot saat ini, instans Anda akan dihentikan. Ini berarti Anda ingin memastikan bahwa beban kerja dan aplikasi Anda cukup fleksibel untuk memanfaatkan kapasitas oportunistik ini.

Instans Spot bekerja persis seperti Amazon EC2 instans lain saat berjalan, dan seperti Amazon EC2 instance lainnya, Instans Spot dapat dihentikan saat Anda tidak lagi membutuhkannya. Jika Anda menghentikan instans, Anda membayar sebagian jam yang digunakan (seperti yang Anda lakukan untuk Instans Sesuai Permintaan atau Cadangan). Namun, jika Harga Spot melebihi tawaran Anda dan instans Anda dihentikan oleh Amazon EC2, Anda tidak akan dikenakan biaya untuk sebagian jam penggunaan.

Tutorial ini menunjukkan cara menggunakan AWS SDK untuk Java untuk melakukan hal berikut.
+ Kirim Permintaan Spot
+ Tentukan kapan Permintaan Spot terpenuhi
+ Batalkan Permintaan Spot
+ Mengakhiri instance terkait

## Prasyarat
<a name="tutor-spot-java-prereq"></a>

Untuk menggunakan tutorial ini, Anda harus AWS SDK untuk Java menginstal, serta telah memenuhi prasyarat instalasi dasarnya. Lihat [Mengatur AWS SDK untuk Java untuk](setup-install.md) informasi lebih lanjut.

## Langkah 1: Menyiapkan Kredensi Anda
<a name="tutor-spot-java-credentials"></a>

Untuk mulai menggunakan contoh kode ini, Anda perlu mengatur AWS kredensional. Lihat [Menyiapkan AWS Kredensial dan Wilayah untuk Pengembangan](setup-credentials.md) untuk petunjuk tentang cara melakukannya.

**catatan**  
Kami menyarankan Anda menggunakan kredensi pengguna IAM untuk memberikan nilai-nilai ini. Untuk informasi selengkapnya, lihat [Mendaftar AWS dan Membuat Pengguna IAM](signup-create-iam-user.md).

Sekarang setelah Anda mengonfigurasi pengaturan Anda, Anda dapat mulai menggunakan kode dalam contoh.

## Langkah 2: Menyiapkan Grup Keamanan
<a name="tutor-spot-java-sg"></a>

*Grup keamanan* bertindak sebagai firewall yang mengontrol lalu lintas yang diizinkan masuk dan keluar dari sekelompok instance. Secara default, sebuah instance dimulai tanpa grup keamanan apa pun, yang berarti bahwa semua lalu lintas IP yang masuk, pada port TCP apa pun akan ditolak. Jadi, sebelum mengirimkan Permintaan Spot kami, kami akan membuat grup keamanan yang memungkinkan lalu lintas jaringan yang diperlukan. Untuk keperluan tutorial ini, kami akan membuat grup keamanan baru yang disebut "GettingStarted" yang memungkinkan lalu lintas Secure Shell (SSH) dari alamat IP tempat Anda menjalankan aplikasi Anda. Untuk menyiapkan grup keamanan baru, Anda perlu menyertakan atau menjalankan contoh kode berikut yang mengatur grup keamanan secara terprogram.

Setelah kami membuat objek `AmazonEC2` klien, kami membuat `CreateSecurityGroupRequest` objek dengan nama, "GettingStarted" dan deskripsi untuk grup keamanan. Kemudian kita memanggil `ec2.createSecurityGroup` API untuk membuat grup.

Untuk mengaktifkan akses ke grup, kami membuat `ipPermission` objek dengan rentang alamat IP yang diatur ke representasi CIDR dari subnet untuk komputer lokal; akhiran “/10" pada alamat IP menunjukkan subnet untuk alamat IP yang ditentukan. Kami juga mengkonfigurasi `ipPermission` objek dengan protokol TCP dan port 22 (SSH). Langkah terakhir adalah memanggil `ec2.authorizeSecurityGroupIngress` dengan nama grup keamanan kami dan `ipPermission` objek.

```
// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Create a new security group.
try {
    CreateSecurityGroupRequest securityGroupRequest = new CreateSecurityGroupRequest("GettingStartedGroup", "Getting Started Security Group");
    ec2.createSecurityGroup(securityGroupRequest);
} catch (AmazonServiceException ase) {
    // Likely this means that the group is already created, so ignore.
    System.out.println(ase.getMessage());
}

String ipAddr = "0.0.0.0/0";

// Get the IP of the current host, so that we can limit the Security
// Group by default to the ip range associated with your subnet.
try {
    InetAddress addr = InetAddress.getLocalHost();

    // Get IP Address
    ipAddr = addr.getHostAddress()+"/10";
} catch (UnknownHostException e) {
}

// Create a range that you would like to populate.
ArrayList<String> ipRanges = new ArrayList<String>();
ipRanges.add(ipAddr);

// Open up port 22 for TCP traffic to the associated IP
// from above (e.g. ssh traffic).
ArrayList<IpPermission> ipPermissions = new ArrayList<IpPermission> ();
IpPermission ipPermission = new IpPermission();
ipPermission.setIpProtocol("tcp");
ipPermission.setFromPort(new Integer(22));
ipPermission.setToPort(new Integer(22));
ipPermission.setIpRanges(ipRanges);
ipPermissions.add(ipPermission);

try {
    // Authorize the ports to the used.
    AuthorizeSecurityGroupIngressRequest ingressRequest =
        new AuthorizeSecurityGroupIngressRequest("GettingStartedGroup",ipPermissions);
    ec2.authorizeSecurityGroupIngress(ingressRequest);
} catch (AmazonServiceException ase) {
    // Ignore because this likely means the zone has
    // already been authorized.
    System.out.println(ase.getMessage());
}
```

Catatan Anda hanya perlu menjalankan aplikasi ini sekali untuk membuat grup keamanan baru.

Anda juga dapat membuat grup keamanan menggunakan file AWS Toolkit for Eclipse. Lihat [Mengelola Grup Keamanan dari AWS Cost Explorer](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/tke-sg.html) untuk informasi selengkapnya.

## Langkah 3: Mengirimkan Permintaan Spot Anda
<a name="tutor-spot-java-submit"></a>

Untuk mengirimkan permintaan Spot, Anda harus terlebih dahulu menentukan jenis instans, Amazon Machine Image (AMI), dan harga tawaran maksimum yang ingin Anda gunakan. Anda juga harus menyertakan grup keamanan yang kami konfigurasikan sebelumnya, sehingga Anda dapat masuk ke instance jika diinginkan.

Ada beberapa jenis contoh untuk dipilih; pergi ke Jenis Amazon EC2 Instance untuk daftar lengkap. Untuk tutorial ini, kita akan menggunakan t1.micro, jenis instance termurah yang tersedia. Selanjutnya, kita akan menentukan jenis AMI yang ingin kita gunakan. Kami akan menggunakan ami-a9d09ed1, AMI Linux up-to-date Amazon paling banyak tersedia saat kami menulis tutorial ini. AMI terbaru dapat berubah seiring waktu, tetapi Anda selalu dapat menentukan AMI versi terbaru dengan mengikuti langkah-langkah berikut:

1. Buka [konsol Amazon EC2](https://console.aws.amazon.com/ec2/home).

1. Pilih tombol **Launch Instance**.

1. Jendela pertama menampilkan yang AMIs tersedia. ID AMI tercantum di sebelah setiap judul AMI. Atau, Anda dapat menggunakan `DescribeImages` API, tetapi memanfaatkan perintah itu berada di luar cakupan tutorial ini.

Ada banyak cara untuk mendekati penawaran untuk Instans Spot; untuk mendapatkan gambaran luas tentang berbagai pendekatan, Anda harus melihat video [Penawaran untuk Instans Spot](https://www.youtube.com/watch?v=WD9N73F3Fao&feature=player_embedded). Namun, untuk memulai, kami akan menjelaskan tiga strategi umum: tawaran untuk memastikan biaya kurang dari harga sesuai permintaan; tawaran berdasarkan nilai perhitungan yang dihasilkan; tawaran untuk memperoleh kapasitas komputasi secepat mungkin.
+  *Kurangi Biaya di bawah Sesuai Permintaan* Anda memiliki pekerjaan pemrosesan batch yang akan memakan waktu beberapa jam atau hari untuk dijalankan. Namun, Anda fleksibel sehubungan dengan kapan dimulai dan kapan selesai. Anda ingin melihat apakah Anda dapat menyelesaikannya dengan biaya lebih murah dibandingkan dengan Instans Sesuai Permintaan. Anda memeriksa riwayat Harga Spot untuk jenis misalnya menggunakan API Konsol Manajemen AWS atau Amazon EC2 API. Untuk informasi lebih lanjut, buka [Melihat Riwayat Harga Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html). Setelah menganalisis riwayat harga untuk jenis instans yang diinginkan di Availability Zone tertentu, Anda memiliki dua pendekatan alternatif untuk tawaran Anda:
  + Anda dapat menawar di ujung atas kisaran Harga Spot (yang masih di bawah harga On-Demand), mengantisipasi bahwa permintaan Spot satu kali Anda kemungkinan besar akan terpenuhi dan berjalan untuk waktu komputasi yang cukup berturut-turut untuk menyelesaikan pekerjaan.
  + Atau, Anda dapat menentukan jumlah yang bersedia Anda bayarkan untuk Instans Spot sebagai% dari harga Instans Sesuai Permintaan, dan berencana untuk menggabungkan banyak instans yang diluncurkan dari waktu ke waktu melalui permintaan persisten. Jika harga yang ditentukan terlampaui, maka Instans Spot akan berakhir. (Kami akan menjelaskan cara mengotomatiskan tugas ini nanti dalam tutorial ini.)
+  *Bayar Tidak Lebih dari Nilai Hasil* Anda memiliki pekerjaan pemrosesan data untuk dijalankan. Anda memahami nilai hasil pekerjaan dengan cukup baik untuk mengetahui berapa nilainya dalam hal biaya komputasi. Setelah menganalisis riwayat Harga Spot untuk jenis instans Anda, Anda memilih harga tawaran di mana biaya waktu komputasi tidak lebih dari nilai hasil pekerjaan. Anda membuat tawaran persisten dan membiarkannya berjalan sebentar-sebentar karena Harga Spot berfluktuasi pada atau di bawah tawaran Anda.
+  *Dapatkan Kapasitas Komputasi dengan Cepat* Anda memiliki kebutuhan jangka pendek yang tidak terduga untuk kapasitas tambahan yang tidak tersedia melalui Instans Sesuai Permintaan. Setelah menganalisis riwayat Harga Spot untuk jenis instans Anda, Anda menawar di atas harga historis tertinggi untuk memberikan kemungkinan besar bahwa permintaan Anda akan terpenuhi dengan cepat dan terus menghitung hingga selesai.

Setelah memilih harga bid, Anda siap untuk meminta Instans Spot. Untuk keperluan tutorial ini, kami akan menawar harga On-Demand (\$10.03) untuk memaksimalkan peluang bahwa tawaran akan terpenuhi. Anda dapat menentukan jenis instans yang tersedia dan harga Sesuai Permintaan untuk instans dengan membuka halaman Harga. Amazon EC2 Saat Instans Spot berjalan, Anda membayar harga Spot yang berlaku untuk periode waktu instans Anda berjalan. Harga Instans Spot ditetapkan oleh Amazon EC2 dan disesuaikan secara bertahap berdasarkan tren jangka panjang dalam penawaran dan permintaan untuk kapasitas Instans Spot. Anda juga dapat menentukan jumlah yang bersedia Anda bayar untuk Instans Spot sebagai% dari harga Instans Sesuai Permintaan.Untuk meminta Instans Spot, Anda hanya perlu membuat permintaan dengan parameter yang Anda pilih sebelumnya. Kita mulai dengan membuat `RequestSpotInstanceRequest` objek. Objek permintaan memerlukan jumlah instance yang ingin Anda mulai dan harga penawaran. Selain itu, Anda perlu mengatur permintaan, yang mencakup jenis instans, ID AMI, dan grup keamanan yang ingin Anda gunakan. `LaunchSpecification` Setelah permintaan diisi, Anda memanggil `requestSpotInstances` metode pada `AmazonEC2Client` objek. Contoh berikut menunjukkan cara meminta Instance Spot.

```
// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Initializes a Spot Instance Request
RequestSpotInstancesRequest requestRequest = new RequestSpotInstancesRequest();

// Request 1 x t1.micro instance with a bid price of $0.03.
requestRequest.setSpotPrice("0.03");
requestRequest.setInstanceCount(Integer.valueOf(1));

// Setup the specifications of the launch. This includes the
// instance type (e.g. t1.micro) and the latest Amazon Linux
// AMI id available. Note, you should always use the latest
// Amazon Linux AMI id or another of your choosing.
LaunchSpecification launchSpecification = new LaunchSpecification();
launchSpecification.setImageId("ami-a9d09ed1");
launchSpecification.setInstanceType(InstanceType.T1Micro);

// Add the security group to the request.
ArrayList<String> securityGroups = new ArrayList<String>();
securityGroups.add("GettingStartedGroup");
launchSpecification.setSecurityGroups(securityGroups);

// Add the launch specifications to the request.
requestRequest.setLaunchSpecification(launchSpecification);

// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult = ec2.requestSpotInstances(requestRequest);
```

Menjalankan kode ini akan meluncurkan Permintaan Instans Spot baru. Ada opsi lain yang dapat Anda gunakan untuk mengonfigurasi Permintaan Spot Anda. Untuk mempelajari lebih lanjut, silakan kunjungi [Tutorial: Advanced Amazon EC2 Spot Request Management](tutorial-spot-adv-java.md) atau [RequestSpotInstances](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RequestSpotInstancesRequest.html)kelas di Referensi AWS SDK untuk Java API.

**catatan**  
Anda akan dikenakan biaya untuk Instans Spot apa pun yang benar-benar diluncurkan, jadi pastikan Anda membatalkan permintaan apa pun dan menghentikan instans apa pun yang Anda luncurkan untuk mengurangi biaya terkait.

## Langkah 4: Menentukan Status Permintaan Spot Anda
<a name="tutor-spot-java-request-state"></a>

Selanjutnya, kita ingin membuat kode untuk menunggu sampai permintaan Spot mencapai status “aktif” sebelum melanjutkan ke langkah terakhir. Untuk menentukan status permintaan Spot kami, kami melakukan polling metode [describeSpotInstancePermintaan](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/AmazonEC2Client.html#describeSpotInstanceRequests) untuk status ID permintaan Spot yang ingin kami pantau.

ID permintaan yang dibuat pada Langkah 2 disematkan dalam respons terhadap `requestSpotInstances` permintaan kami. Contoh kode berikut menunjukkan bagaimana untuk mengumpulkan permintaan IDs dari `requestSpotInstances` respon dan menggunakannya untuk mengisi. `ArrayList`

```
// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult = ec2.requestSpotInstances(requestRequest);
List<SpotInstanceRequest> requestResponses = requestResult.getSpotInstanceRequests();

// Setup an arraylist to collect all of the request ids we want to
// watch hit the running state.
ArrayList<String> spotInstanceRequestIds = new ArrayList<String>();

// Add all of the request ids to the hashset, so we can determine when they hit the
// active state.
for (SpotInstanceRequest requestResponse : requestResponses) {
    System.out.println("Created Spot Request: "+requestResponse.getSpotInstanceRequestId());
    spotInstanceRequestIds.add(requestResponse.getSpotInstanceRequestId());
}
```

Untuk memantau ID permintaan Anda, hubungi `describeSpotInstanceRequests` metode untuk menentukan status permintaan. Kemudian loop sampai permintaan tidak dalam keadaan “terbuka”. Perhatikan bahwa kami memantau status tidak “terbuka”, melainkan status, katakanlah, “aktif”, karena permintaan dapat langsung “ditutup” jika ada masalah dengan argumen permintaan Anda. Contoh kode berikut memberikan rincian tentang bagaimana menyelesaikan tugas ini.

```
// Create a variable that will track whether there are any
// requests still in the open state.
boolean anyOpen;

do {
    // Create the describeRequest object with all of the request ids
    // to monitor (e.g. that we started).
    DescribeSpotInstanceRequestsRequest describeRequest = new DescribeSpotInstanceRequestsRequest();
    describeRequest.setSpotInstanceRequestIds(spotInstanceRequestIds);

    // Initialize the anyOpen variable to false - which assumes there
    // are no requests open unless we find one that is still open.
    anyOpen=false;

    try {
        // Retrieve all of the requests we want to monitor.
        DescribeSpotInstanceRequestsResult describeResult = ec2.describeSpotInstanceRequests(describeRequest);
        List<SpotInstanceRequest> describeResponses = describeResult.getSpotInstanceRequests();

        // Look through each request and determine if they are all in
        // the active state.
        for (SpotInstanceRequest describeResponse : describeResponses) {
            // If the state is open, it hasn't changed since we attempted
            // to request it. There is the potential for it to transition
            // almost immediately to closed or cancelled so we compare
            // against open instead of active.
        if (describeResponse.getState().equals("open")) {
            anyOpen = true;
            break;
        }
    }
} catch (AmazonServiceException e) {
      // If we have an exception, ensure we don't break out of
      // the loop. This prevents the scenario where there was
      // blip on the wire.
      anyOpen = true;
    }

    try {
        // Sleep for 60 seconds.
        Thread.sleep(60*1000);
    } catch (Exception e) {
        // Do nothing because it woke up early.
    }
} while (anyOpen);
```

Setelah menjalankan kode ini, Permintaan Instans Spot Anda akan selesai atau akan gagal dengan kesalahan yang akan dikeluarkan ke layar. Dalam kedua kasus tersebut, kami dapat melanjutkan ke langkah berikutnya untuk membersihkan permintaan aktif apa pun dan menghentikan instance yang sedang berjalan.

## Langkah 5: Membersihkan Permintaan dan Instans Spot Anda
<a name="tutor-spot-java-cleaning-up"></a>

Terakhir, kita perlu membersihkan permintaan dan instance kita. Penting untuk membatalkan permintaan yang belum dibayar *dan* menghentikan instance apa pun. Hanya membatalkan permintaan Anda tidak akan menghentikan instans Anda, yang berarti Anda akan terus membayarnya. Jika Anda menghentikan instans, permintaan Spot Anda mungkin dibatalkan, tetapi ada beberapa skenario seperti jika Anda menggunakan tawaran persisten di mana penghentian instans Anda tidak cukup untuk menghentikan permintaan Anda agar tidak dipenuhi kembali. Oleh karena itu, merupakan praktik terbaik untuk membatalkan tawaran aktif apa pun dan menghentikan instance yang sedang berjalan.

Kode berikut menunjukkan cara membatalkan permintaan Anda.

```
try {
    // Cancel requests.
    CancelSpotInstanceRequestsRequest cancelRequest =
       new CancelSpotInstanceRequestsRequest(spotInstanceRequestIds);
    ec2.cancelSpotInstanceRequests(cancelRequest);
} catch (AmazonServiceException e) {
    // Write out any exceptions that may have occurred.
    System.out.println("Error cancelling instances");
    System.out.println("Caught Exception: " + e.getMessage());
    System.out.println("Reponse Status Code: " + e.getStatusCode());
    System.out.println("Error Code: " + e.getErrorCode());
    System.out.println("Request ID: " + e.getRequestId());
}
```

Untuk mengakhiri instans yang belum selesai, Anda memerlukan ID instans yang terkait dengan permintaan yang memulainya. Contoh kode berikut mengambil kode asli kami untuk memantau instance dan menambahkan `ArrayList` di mana kami menyimpan ID instance yang terkait dengan `describeInstance` respons.

```
// Create a variable that will track whether there are any requests
// still in the open state.
boolean anyOpen;
// Initialize variables.
ArrayList<String> instanceIds = new ArrayList<String>();

do {
   // Create the describeRequest with all of the request ids to
   // monitor (e.g. that we started).
   DescribeSpotInstanceRequestsRequest describeRequest = new DescribeSpotInstanceRequestsRequest();
   describeRequest.setSpotInstanceRequestIds(spotInstanceRequestIds);

   // Initialize the anyOpen variable to false, which assumes there
   // are no requests open unless we find one that is still open.
   anyOpen = false;

   try {
         // Retrieve all of the requests we want to monitor.
         DescribeSpotInstanceRequestsResult describeResult =
            ec2.describeSpotInstanceRequests(describeRequest);

         List<SpotInstanceRequest> describeResponses =
            describeResult.getSpotInstanceRequests();

         // Look through each request and determine if they are all
         // in the active state.
         for (SpotInstanceRequest describeResponse : describeResponses) {
           // If the state is open, it hasn't changed since we
           // attempted to request it. There is the potential for
           // it to transition almost immediately to closed or
           // cancelled so we compare against open instead of active.
           if (describeResponse.getState().equals("open")) {
              anyOpen = true; break;
           }
           // Add the instance id to the list we will
           // eventually terminate.
           instanceIds.add(describeResponse.getInstanceId());
         }
   } catch (AmazonServiceException e) {
      // If we have an exception, ensure we don't break out
      // of the loop. This prevents the scenario where there
      // was blip on the wire.
      anyOpen = true;
   }

    try {
        // Sleep for 60 seconds.
        Thread.sleep(60*1000);
    } catch (Exception e) {
        // Do nothing because it woke up early.
    }
} while (anyOpen);
```

Menggunakan instance IDs, disimpan di`ArrayList`, menghentikan setiap instance yang berjalan menggunakan cuplikan kode berikut.

```
try {
    // Terminate instances.
    TerminateInstancesRequest terminateRequest = new TerminateInstancesRequest(instanceIds);
    ec2.terminateInstances(terminateRequest);
} catch (AmazonServiceException e) {
    // Write out any exceptions that may have occurred.
    System.out.println("Error terminating instances");
    System.out.println("Caught Exception: " + e.getMessage());
    System.out.println("Reponse Status Code: " + e.getStatusCode());
    System.out.println("Error Code: " + e.getErrorCode());
    System.out.println("Request ID: " + e.getRequestId());
}
```

## Membawa Semuanya Bersama
<a name="tutor-spot-java-bring-together"></a>

Untuk menyatukan semua ini, kami menyediakan pendekatan yang lebih berorientasi objek yang menggabungkan langkah-langkah sebelumnya yang kami tunjukkan: menginisialisasi EC2 Klien, mengirimkan Permintaan Spot, menentukan kapan Permintaan Spot tidak lagi dalam keadaan terbuka, dan membersihkan permintaan Spot yang masih ada dan instans terkait. Kami membuat kelas yang disebut `Requests` yang melakukan tindakan ini.

Kami juga membuat `GettingStartedApp` kelas, yang memiliki metode utama di mana kami melakukan panggilan fungsi tingkat tinggi. Secara khusus, kami menginisialisasi `Requests` objek yang dijelaskan sebelumnya. Kami mengirimkan permintaan Instans Spot. Kemudian kami menunggu permintaan Spot mencapai status “Aktif”. Akhirnya, kami membersihkan permintaan dan instance.

Kode sumber lengkap untuk contoh ini dapat dilihat atau diunduh di [GitHub](https://github.com/aws/aws-sdk-java/tree/master/src/samples/AmazonEC2SpotInstances-GettingStarted).

Selamat\$1 Anda baru saja menyelesaikan tutorial memulai untuk mengembangkan perangkat lunak Spot Instance dengan AWS SDK untuk Java.

## Langkah Berikutnya
<a name="tutor-spot-java-next"></a>

Lanjutkan dengan [Tutorial: Advanced Amazon EC2 Spot Request Management](tutorial-spot-adv-java.md).

# Tutorial: Manajemen Permintaan Amazon EC2 Spot Tingkat Lanjut
<a name="tutorial-spot-adv-java"></a>

 Amazon EC2 *Instans Spot memungkinkan Anda menawar Amazon EC2 kapasitas yang tidak digunakan dan menjalankan instans tersebut selama tawaran Anda melebihi harga spot saat ini.* Amazon EC2 mengubah harga spot secara berkala berdasarkan penawaran dan permintaan. Untuk informasi selengkapnya tentang Instans Spot, lihat [Instans Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

## Prasyarat
<a name="tutor-spot-adv-java-prereq"></a>

Untuk menggunakan tutorial ini, Anda harus AWS SDK untuk Java menginstal, serta telah memenuhi prasyarat instalasi dasarnya. Lihat [Mengatur AWS SDK untuk Java untuk](setup-install.md) informasi lebih lanjut.

## Menyiapkan kredensil Anda
<a name="tutor-spot-adv-java-credentials"></a>

Untuk mulai menggunakan contoh kode ini, Anda perlu mengatur AWS kredensil. Lihat [Menyiapkan AWS Kredensial dan Wilayah untuk Pengembangan](setup-credentials.md) untuk petunjuk tentang cara melakukannya.

**catatan**  
Kami menyarankan Anda menggunakan kredensi IAM pengguna untuk memberikan nilai-nilai ini. Untuk informasi selengkapnya, lihat [Mendaftar AWS dan Membuat IAM Pengguna](signup-create-iam-user.md).

Sekarang setelah Anda mengonfigurasi pengaturan Anda, Anda dapat mulai menggunakan kode dalam contoh.

## Menyiapkan grup keamanan
<a name="tutor-spot-adv-java-sg"></a>

Grup keamanan bertindak sebagai firewall yang mengontrol lalu lintas yang diizinkan masuk dan keluar dari sekelompok instance. Secara default, sebuah instance dimulai tanpa grup keamanan apa pun, yang berarti bahwa semua lalu lintas IP yang masuk, pada port TCP apa pun akan ditolak. Jadi, sebelum mengirimkan Permintaan Spot kami, kami akan membuat grup keamanan yang memungkinkan lalu lintas jaringan yang diperlukan. Untuk keperluan tutorial ini, kami akan membuat grup keamanan baru yang disebut "GettingStarted" yang memungkinkan lalu lintas Secure Shell (SSH) dari alamat IP tempat Anda menjalankan aplikasi Anda. Untuk menyiapkan grup keamanan baru, Anda perlu menyertakan atau menjalankan contoh kode berikut yang mengatur grup keamanan secara terprogram.

Setelah kami membuat objek `AmazonEC2` klien, kami membuat `CreateSecurityGroupRequest` objek dengan nama, "GettingStarted" dan deskripsi untuk grup keamanan. Kemudian kita memanggil `ec2.createSecurityGroup` API untuk membuat grup.

Untuk mengaktifkan akses ke grup, kami membuat `ipPermission` objek dengan rentang alamat IP yang diatur ke representasi CIDR dari subnet untuk komputer lokal; akhiran “/10" pada alamat IP menunjukkan subnet untuk alamat IP yang ditentukan. Kami juga mengkonfigurasi `ipPermission` objek dengan protokol TCP dan port 22 (SSH). Langkah terakhir adalah memanggil `ec2 .authorizeSecurityGroupIngress` dengan nama grup keamanan kami dan `ipPermission` objek.

(Kode berikut ini sama dengan yang kita gunakan dalam tutorial pertama.)

```
// Create the AmazonEC2Client object so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard()
                    .withCredentials(credentials)
                    .build();

// Create a new security group.
try {
    CreateSecurityGroupRequest securityGroupRequest =
        new CreateSecurityGroupRequest("GettingStartedGroup",
        "Getting Started Security Group");
    ec2.createSecurityGroup(securityGroupRequest);
} catch (AmazonServiceException ase) {
    // Likely this means that the group is already created, so ignore.
    System.out.println(ase.getMessage());
}

String ipAddr = "0.0.0.0/0";

// Get the IP of the current host, so that we can limit the Security Group
// by default to the ip range associated with your subnet.
try {
    // Get IP Address
    InetAddress addr = InetAddress.getLocalHost();
    ipAddr = addr.getHostAddress()+"/10";
}
catch (UnknownHostException e) {
    // Fail here...
}

// Create a range that you would like to populate.
ArrayList<String> ipRanges = new ArrayList<String>();
ipRanges.add(ipAddr);

// Open up port 22 for TCP traffic to the associated IP from
// above (e.g. ssh traffic).
ArrayList<IpPermission> ipPermissions = new ArrayList<IpPermission> ();
IpPermission ipPermission = new IpPermission();
ipPermission.setIpProtocol("tcp");
ipPermission.setFromPort(new Integer(22));
ipPermission.setToPort(new Integer(22));
ipPermission.setIpRanges(ipRanges);
ipPermissions.add(ipPermission);

try {
    // Authorize the ports to the used.
    AuthorizeSecurityGroupIngressRequest ingressRequest =
        new AuthorizeSecurityGroupIngressRequest(
            "GettingStartedGroup",ipPermissions);
    ec2.authorizeSecurityGroupIngress(ingressRequest);
}
catch (AmazonServiceException ase) {
    // Ignore because this likely means the zone has already
    // been authorized.
    System.out.println(ase.getMessage());
}
```

Anda dapat melihat seluruh contoh kode ini dalam contoh `advanced.CreateSecurityGroupApp.java` kode. Catatan Anda hanya perlu menjalankan aplikasi ini sekali untuk membuat grup keamanan baru.

**catatan**  
Anda juga dapat membuat grup keamanan menggunakan file AWS Toolkit for Eclipse. Lihat [Mengelola Grup Keamanan dari AWS Cost Explorer](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/tke-sg.html) Panduan AWS Toolkit for Eclipse Pengguna untuk informasi selengkapnya.

## Opsi pembuatan permintaan Instance Spot terperinci
<a name="tutor-spot-adv-req-opts"></a>

Seperti yang kami jelaskan di [Tutorial: Instans Amazon EC2 Spot](tutorial-spot-instances-java.md), Anda perlu membuat permintaan Anda dengan jenis instans, Amazon Machine Image (AMI), dan harga tawaran maksimum.

Mari kita mulai dengan membuat `RequestSpotInstanceRequest` objek. Objek permintaan memerlukan jumlah instance yang Anda inginkan dan harga tawaran. Selain itu, kita perlu mengatur permintaan, yang mencakup jenis instance, ID AMI, dan grup keamanan yang ingin Anda gunakan. `LaunchSpecification` Setelah permintaan diisi, kita memanggil `requestSpotInstances` metode pada `AmazonEC2Client` objek. Contoh cara meminta Instance Spot berikut.

(Kode berikut ini sama dengan yang kita gunakan dalam tutorial pertama.)

```
// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Initializes a Spot Instance Request
RequestSpotInstancesRequest requestRequest = new RequestSpotInstancesRequest();

// Request 1 x t1.micro instance with a bid price of $0.03.
requestRequest.setSpotPrice("0.03");
requestRequest.setInstanceCount(Integer.valueOf(1));

// Set up the specifications of the launch. This includes the
// instance type (e.g. t1.micro) and the latest Amazon Linux
// AMI id available. Note, you should always use the latest
// Amazon Linux AMI id or another of your choosing.
LaunchSpecification launchSpecification = new LaunchSpecification();
launchSpecification.setImageId("ami-a9d09ed1");
launchSpecification.setInstanceType(InstanceType.T1Micro);

// Add the security group to the request.
ArrayList<String> securityGroups = new ArrayList<String>();
securityGroups.add("GettingStartedGroup");
launchSpecification.setSecurityGroups(securityGroups);

// Add the launch specification.
requestRequest.setLaunchSpecification(launchSpecification);

// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult =
    ec2.requestSpotInstances(requestRequest);
```

## Permintaan persisten vs. satu kali
<a name="tutor-spot-adv-persist-v-one"></a>

Saat membuat permintaan Spot, Anda dapat menentukan beberapa parameter opsional. Yang pertama adalah apakah permintaan Anda hanya satu kali atau persisten. Secara default, ini adalah permintaan satu kali. Permintaan satu kali hanya dapat dipenuhi sekali, dan setelah instance yang diminta dihentikan, permintaan akan ditutup. Permintaan persisten dipertimbangkan untuk dipenuhi setiap kali tidak ada Instance Spot yang berjalan untuk permintaan yang sama. Untuk menentukan jenis permintaan, Anda hanya perlu mengatur Type on the Spot request. Ini dapat dilakukan dengan kode berikut.

```
// Retrieves the credentials from an AWSCredentials.properties file.
AWSCredentials credentials = null;
try {
    credentials = new PropertiesCredentials(
        GettingStartedApp.class.getResourceAsStream("AwsCredentials.properties"));
}
catch (IOException e1) {
    System.out.println(
        "Credentials were not properly entered into AwsCredentials.properties.");
    System.out.println(e1.getMessage());
    System.exit(-1);
}

// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Initializes a Spot Instance Request
RequestSpotInstancesRequest requestRequest =
    new RequestSpotInstancesRequest();

// Request 1 x t1.micro instance with a bid price of $0.03.
requestRequest.setSpotPrice("0.03");
requestRequest.setInstanceCount(Integer.valueOf(1));

// Set the type of the bid to persistent.
requestRequest.setType("persistent");

// Set up the specifications of the launch. This includes the
// instance type (e.g. t1.micro) and the latest Amazon Linux
// AMI id available. Note, you should always use the latest
// Amazon Linux AMI id or another of your choosing.
LaunchSpecification launchSpecification = new LaunchSpecification();
launchSpecification.setImageId("ami-a9d09ed1");
launchSpecification.setInstanceType(InstanceType.T1Micro);

// Add the security group to the request.
ArrayList<String> securityGroups = new ArrayList<String>();
securityGroups.add("GettingStartedGroup");
launchSpecification.setSecurityGroups(securityGroups);

// Add the launch specification.
requestRequest.setLaunchSpecification(launchSpecification);

// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult =
    ec2.requestSpotInstances(requestRequest);
```

## Membatasi durasi permintaan
<a name="tutor-spot-adv-validity-period"></a>

Anda juga dapat secara opsional menentukan lamanya waktu permintaan Anda akan tetap valid. Anda dapat menentukan waktu mulai dan berakhir untuk periode ini. Secara default, permintaan Spot akan dipertimbangkan untuk dipenuhi sejak dibuat hingga dipenuhi atau dibatalkan oleh Anda. Namun Anda dapat membatasi masa berlaku jika perlu. Contoh cara menentukan periode ini ditunjukkan dalam kode berikut.

```
// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Initializes a Spot Instance Request
RequestSpotInstancesRequest requestRequest = new RequestSpotInstancesRequest();

// Request 1 x t1.micro instance with a bid price of $0.03.
requestRequest.setSpotPrice("0.03");
requestRequest.setInstanceCount(Integer.valueOf(1));

// Set the valid start time to be two minutes from now.
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, 2);
requestRequest.setValidFrom(cal.getTime());

// Set the valid end time to be two minutes and two hours from now.
cal.add(Calendar.HOUR, 2);
requestRequest.setValidUntil(cal.getTime());

// Set up the specifications of the launch. This includes
// the instance type (e.g. t1.micro)

// and the latest Amazon Linux AMI id available.
// Note, you should always use the latest Amazon
// Linux AMI id or another of your choosing.
LaunchSpecification launchSpecification = new LaunchSpecification();
launchSpecification.setImageId("ami-a9d09ed1");
launchSpecification.setInstanceType("t1.micro");

// Add the security group to the request.
ArrayList<String> securityGroups = new ArrayList<String>();
securityGroups.add("GettingStartedGroup");
launchSpecification.setSecurityGroups(securityGroups);

// Add the launch specification.
requestRequest.setLaunchSpecification(launchSpecification);

// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult = ec2.requestSpotInstances(requestRequest);
```

## Mengelompokkan permintaan Instans Amazon EC2 Spot Anda
<a name="tutor-spot-adv-grouping"></a>

Anda memiliki opsi untuk mengelompokkan permintaan Instans Spot Anda dengan beberapa cara berbeda. Kami akan melihat manfaat menggunakan grup peluncuran, grup Availability Zone, dan grup penempatan.

Jika Anda ingin memastikan Instans Spot Anda diluncurkan dan dihentikan bersama-sama, maka Anda memiliki opsi untuk memanfaatkan grup peluncuran. Grup peluncuran adalah label yang mengelompokkan serangkaian tawaran bersama. Semua instans dalam grup peluncuran dimulai dan diakhiri bersama. Catatan, jika instance dalam grup peluncuran telah terpenuhi, tidak ada jaminan bahwa instans baru yang diluncurkan dengan grup peluncuran yang sama juga akan terpenuhi. Contoh cara mengatur Grup Peluncuran ditampilkan dalam contoh kode berikut.

```
// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Initializes a Spot Instance Request
RequestSpotInstancesRequest requestRequest = new RequestSpotInstancesRequest();

// Request 5 x t1.micro instance with a bid price of $0.03.
requestRequest.setSpotPrice("0.03");
requestRequest.setInstanceCount(Integer.valueOf(5));

// Set the launch group.
requestRequest.setLaunchGroup("ADVANCED-DEMO-LAUNCH-GROUP");

// Set up the specifications of the launch. This includes
// the instance type (e.g. t1.micro) and the latest Amazon Linux
// AMI id available. Note, you should always use the latest
// Amazon Linux AMI id or another of your choosing.
LaunchSpecification launchSpecification = new LaunchSpecification();
launchSpecification.setImageId("ami-a9d09ed1");
launchSpecification.setInstanceType(InstanceType.T1Micro);

// Add the security group to the request.
ArrayList<String> securityGroups = new ArrayList<String>();
securityGroups.add("GettingStartedGroup");
launchSpecification.setSecurityGroups(securityGroups);

// Add the launch specification.
requestRequest.setLaunchSpecification(launchSpecification);

// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult =
    ec2.requestSpotInstances(requestRequest);
```

Jika Anda ingin memastikan bahwa semua instance dalam permintaan diluncurkan di Availability Zone yang sama, dan Anda tidak peduli yang mana, Anda dapat memanfaatkan grup Availability Zone. Grup Availability Zone adalah label yang mengelompokkan sekumpulan instance bersama-sama di Availability Zone yang sama. Semua instans yang berbagi grup Availability Zone dan dipenuhi pada saat yang sama akan dimulai di Availability Zone yang sama. Contoh cara mengatur grup Availability Zone berikut.

```
// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Initializes a Spot Instance Request
RequestSpotInstancesRequest requestRequest = new RequestSpotInstancesRequest();

// Request 5 x t1.micro instance with a bid price of $0.03.
requestRequest.setSpotPrice("0.03");
requestRequest.setInstanceCount(Integer.valueOf(5));

// Set the availability zone group.
requestRequest.setAvailabilityZoneGroup("ADVANCED-DEMO-AZ-GROUP");

// Set up the specifications of the launch.  This includes the instance
// type (e.g.  t1.micro) and the latest Amazon Linux AMI id available.
// Note, you should always use the latest Amazon Linux AMI id or another
// of your choosing.
LaunchSpecification launchSpecification = new LaunchSpecification();
launchSpecification.setImageId("ami-a9d09ed1");
launchSpecification.setInstanceType(InstanceType.T1Micro);

// Add the security group to the request.
ArrayList<String> securityGroups = new ArrayList<String>();
securityGroups.add("GettingStartedGroup");
launchSpecification.setSecurityGroups(securityGroups);

// Add the launch specification.
requestRequest.setLaunchSpecification(launchSpecification);

// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult =
    ec2.requestSpotInstances(requestRequest);
```

Anda dapat menentukan Availability Zone yang Anda inginkan untuk Instans Spot Anda. Contoh kode berikut menunjukkan cara mengatur Availability Zone.

```
// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Initializes a Spot Instance Request
RequestSpotInstancesRequest requestRequest = new RequestSpotInstancesRequest();

// Request 1 x t1.micro instance with a bid price of $0.03.
requestRequest.setSpotPrice("0.03");
requestRequest.setInstanceCount(Integer.valueOf(1));

// Set up the specifications of the launch. This includes the instance
// type (e.g. t1.micro) and the latest Amazon Linux AMI id available.
// Note, you should always use the latest Amazon Linux AMI id or another
// of your choosing.
LaunchSpecification launchSpecification = new LaunchSpecification();
launchSpecification.setImageId("ami-a9d09ed1");
launchSpecification.setInstanceType(InstanceType.T1Micro);

// Add the security group to the request.
ArrayList<String> securityGroups = new ArrayList<String>();
securityGroups.add("GettingStartedGroup");
launchSpecification.setSecurityGroups(securityGroups);

// Set up the availability zone to use. Note we could retrieve the
// availability zones using the ec2.describeAvailabilityZones() API. For
// this demo we will just use us-east-1a.
SpotPlacement placement = new SpotPlacement("us-east-1b");
launchSpecification.setPlacement(placement);

// Add the launch specification.
requestRequest.setLaunchSpecification(launchSpecification);

// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult =
    ec2.requestSpotInstances(requestRequest);
```

Terakhir, Anda dapat menentukan *grup penempatan* jika Anda menggunakan Instans Spot High Performance Computing (HPC), seperti instance komputasi cluster atau instance GPU cluster. Grup penempatan memberi Anda latensi yang lebih rendah dan konektivitas bandwidth tinggi antar instans. Contoh cara mengatur grup penempatan berikut.

```
// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Initializes a Spot Instance Request
RequestSpotInstancesRequest requestRequest = new RequestSpotInstancesRequest();

// Request 1 x t1.micro instance with a bid price of $0.03.
requestRequest.setSpotPrice("0.03");
requestRequest.setInstanceCount(Integer.valueOf(1));

// Set up the specifications of the launch. This includes the instance
// type (e.g. t1.micro) and the latest Amazon Linux AMI id available.
// Note, you should always use the latest Amazon Linux AMI id or another
// of your choosing.

LaunchSpecification launchSpecification = new LaunchSpecification();
launchSpecification.setImageId("ami-a9d09ed1");
launchSpecification.setInstanceType(InstanceType.T1Micro);

// Add the security group to the request.
ArrayList<String> securityGroups = new ArrayList<String>();
securityGroups.add("GettingStartedGroup");
launchSpecification.setSecurityGroups(securityGroups);

// Set up the placement group to use with whatever name you desire.
// For this demo we will just use "ADVANCED-DEMO-PLACEMENT-GROUP".
SpotPlacement placement = new SpotPlacement();
placement.setGroupName("ADVANCED-DEMO-PLACEMENT-GROUP");
launchSpecification.setPlacement(placement);

// Add the launch specification.
requestRequest.setLaunchSpecification(launchSpecification);

// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult =
    ec2.requestSpotInstances(requestRequest);
```

Semua parameter yang ditampilkan di bagian ini adalah opsional. Penting juga untuk disadari bahwa sebagian besar parameter ini—dengan pengecualian apakah tawaran Anda satu kali atau persisten—dapat mengurangi kemungkinan pemenuhan tawaran. Jadi, penting untuk memanfaatkan opsi ini hanya jika Anda membutuhkannya. Semua contoh kode sebelumnya digabungkan menjadi satu contoh kode panjang, yang dapat ditemukan di `com.amazonaws.codesamples.advanced.InlineGettingStartedCodeSampleApp.java` kelas.

## Cara mempertahankan partisi root setelah gangguan atau penghentian
<a name="tutor-spot-adv-persist-root"></a>

Salah satu cara termudah untuk mengelola interupsi Instans Spot Anda adalah dengan memastikan bahwa data Anda diarahkan ke volume Amazon Elastic Block Store (Amazon Amazon EBS) dengan irama reguler. Dengan checkpointing secara berkala, jika ada gangguan, Anda hanya akan kehilangan data yang dibuat sejak pos pemeriksaan terakhir (dengan asumsi tidak ada tindakan non-idempoten lainnya yang dilakukan di antaranya). Untuk mempermudah proses ini, Anda dapat mengonfigurasi Permintaan Spot Anda untuk memastikan bahwa partisi root Anda tidak akan dihapus saat interupsi atau penghentian. Kami telah memasukkan kode baru dalam contoh berikut yang menunjukkan cara mengaktifkan skenario ini.

Dalam kode yang ditambahkan, kita membuat `BlockDeviceMapping` objek dan mengatur yang terkait Amazon Elastic Block Store (Amazon EBS) ke Amazon EBS objek yang telah kita konfigurasi untuk `not` dihapus jika Instance Spot dihentikan. Kami kemudian menambahkan ini `BlockDeviceMapping` ke ArrayList pemetaan yang kami sertakan dalam spesifikasi peluncuran.

```
// Retrieves the credentials from an AWSCredentials.properties file.
AWSCredentials credentials = null;
try {
    credentials = new PropertiesCredentials(
        GettingStartedApp.class.getResourceAsStream("AwsCredentials.properties"));
}
catch (IOException e1) {
    System.out.println(
        "Credentials were not properly entered into AwsCredentials.properties.");
    System.out.println(e1.getMessage());
    System.exit(-1);
}

// Create the AmazonEC2 client so we can call various APIs.
AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();

// Initializes a Spot Instance Request
RequestSpotInstancesRequest requestRequest = new RequestSpotInstancesRequest();

// Request 1 x t1.micro instance with a bid price of $0.03.
requestRequest.setSpotPrice("0.03");
requestRequest.setInstanceCount(Integer.valueOf(1));

// Set up the specifications of the launch. This includes the instance
// type (e.g. t1.micro) and the latest Amazon Linux AMI id available.
// Note, you should always use the latest Amazon Linux AMI id or another
// of your choosing.
LaunchSpecification launchSpecification = new LaunchSpecification();
launchSpecification.setImageId("ami-a9d09ed1");
launchSpecification.setInstanceType(InstanceType.T1Micro);

// Add the security group to the request.
ArrayList<String> securityGroups = new ArrayList<String>();
securityGroups.add("GettingStartedGroup");
launchSpecification.setSecurityGroups(securityGroups);

// Create the block device mapping to describe the root partition.
BlockDeviceMapping blockDeviceMapping = new BlockDeviceMapping();
blockDeviceMapping.setDeviceName("/dev/sda1");

// Set the delete on termination flag to false.
EbsBlockDevice ebs = new EbsBlockDevice();
ebs.setDeleteOnTermination(Boolean.FALSE);
blockDeviceMapping.setEbs(ebs);

// Add the block device mapping to the block list.
ArrayList<BlockDeviceMapping> blockList = new ArrayList<BlockDeviceMapping>();
blockList.add(blockDeviceMapping);

// Set the block device mapping configuration in the launch specifications.
launchSpecification.setBlockDeviceMappings(blockList);

// Add the launch specification.
requestRequest.setLaunchSpecification(launchSpecification);

// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult =
    ec2.requestSpotInstances(requestRequest);
```

Dengan asumsi Anda ingin melampirkan kembali volume ini ke instance Anda saat startup, Anda juga dapat menggunakan pengaturan pemetaan perangkat blokir. Atau, jika Anda melampirkan partisi non-root, Anda dapat menentukan Amazon EBS volume Amazon yang ingin Anda lampirkan ke Instans Spot Anda setelah dilanjutkan. Anda melakukan ini hanya dengan menentukan ID snapshot di nama perangkat Anda `EbsBlockDevice` dan alternatif di objek Anda`BlockDeviceMapping`. Dengan memanfaatkan pemetaan perangkat blok, akan lebih mudah untuk mem-bootstrap instance Anda.

Menggunakan partisi root untuk memeriksa data penting Anda adalah cara yang bagus untuk mengelola potensi gangguan instance Anda. Untuk metode lebih lanjut tentang mengelola potensi interupsi, silakan kunjungi video [Mengelola Gangguan](https://www.youtube.com/watch?feature=player_embedded&v=wcPNnUo60pc).

## Cara menandai permintaan dan instance spot Anda
<a name="tutor-spot-adv-tags"></a>

Menambahkan tag ke Amazon EC2 sumber daya dapat menyederhanakan administrasi infrastruktur cloud Anda. Suatu bentuk metadata, tag dapat digunakan untuk membuat nama yang mudah digunakan, meningkatkan kemampuan pencarian, dan meningkatkan koordinasi antara beberapa pengguna. Anda juga dapat menggunakan tag untuk mengotomatiskan skrip dan bagian dari proses Anda. Untuk membaca selengkapnya tentang penandaan Amazon EC2 sumber daya, buka [Menggunakan Tag](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

### Permintaan penandaan
<a name="tagging-requests"></a>

Untuk menambahkan tag ke permintaan spot Anda, Anda perlu menandai mereka *setelah* diminta. Nilai pengembalian dari `requestSpotInstances()` memberi Anda [RequestSpotInstancesResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RequestSpotInstancesResult.html)objek yang dapat Anda gunakan untuk mendapatkan permintaan spot IDs untuk penandaan:

```
// Call the RequestSpotInstance API.
RequestSpotInstancesResult requestResult = ec2.requestSpotInstances(requestRequest);
List<SpotInstanceRequest> requestResponses = requestResult.getSpotInstanceRequests();

// A list of request IDs to tag
ArrayList<String> spotInstanceRequestIds = new ArrayList<String>();

// Add the request ids to the hashset, so we can determine when they hit the
// active state.
for (SpotInstanceRequest requestResponse : requestResponses) {
    System.out.println("Created Spot Request: "+requestResponse.getSpotInstanceRequestId());
    spotInstanceRequestIds.add(requestResponse.getSpotInstanceRequestId());
}
```

Setelah Anda memilikinya IDs, Anda dapat menandai permintaan dengan menambahkannya IDs ke [CreateTagsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateTagsRequest.html)dan memanggil `createTags()` metode Amazon EC2 klien:

```
// The list of tags to create
ArrayList<Tag> requestTags = new ArrayList<Tag>();
requestTags.add(new Tag("keyname1","value1"));

// Create the tag request
CreateTagsRequest createTagsRequest_requests = new CreateTagsRequest();
createTagsRequest_requests.setResources(spotInstanceRequestIds);
createTagsRequest_requests.setTags(requestTags);

// Tag the spot request
try {
    ec2.createTags(createTagsRequest_requests);
}
catch (AmazonServiceException e) {
    System.out.println("Error terminating instances");
    System.out.println("Caught Exception: " + e.getMessage());
    System.out.println("Reponse Status Code: " + e.getStatusCode());
    System.out.println("Error Code: " + e.getErrorCode());
    System.out.println("Request ID: " + e.getRequestId());
}
```

### Contoh penandaan
<a name="tagging-instances"></a>

Demikian pula dengan permintaan spot itu sendiri, Anda hanya dapat menandai instance setelah dibuat, yang akan terjadi setelah permintaan spot dipenuhi (tidak lagi dalam keadaan *terbuka*).

Anda dapat memeriksa status permintaan Anda dengan memanggil `describeSpotInstanceRequests()` metode Amazon EC2 klien dengan [DescribeSpotInstanceRequestsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeSpotInstanceRequestsRequest.html)objek. [DescribeSpotInstanceRequestsResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeSpotInstanceRequestsResult.html)Objek yang dikembalikan berisi daftar [SpotInstanceRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/SpotInstanceRequest.html)objek yang dapat Anda gunakan untuk menanyakan status permintaan spot Anda dan mendapatkan instance mereka IDs setelah mereka tidak lagi dalam keadaan *terbuka*.

Setelah permintaan spot tidak lagi terbuka, Anda dapat mengambil ID instance-nya dari `SpotInstanceRequest` objek dengan memanggil `getInstanceId()` metodenya.

```
boolean anyOpen; // tracks whether any requests are still open

// a list of instances to tag.
ArrayList<String> instanceIds = new ArrayList<String>();

do {
    DescribeSpotInstanceRequestsRequest describeRequest =
        new DescribeSpotInstanceRequestsRequest();
    describeRequest.setSpotInstanceRequestIds(spotInstanceRequestIds);

    anyOpen=false; // assume no requests are still open

    try {
        // Get the requests to monitor
        DescribeSpotInstanceRequestsResult describeResult =
            ec2.describeSpotInstanceRequests(describeRequest);

        List<SpotInstanceRequest> describeResponses =
            describeResult.getSpotInstanceRequests();

        // are any requests open?
        for (SpotInstanceRequest describeResponse : describeResponses) {
                if (describeResponse.getState().equals("open")) {
                    anyOpen = true;
                    break;
                }
                // get the corresponding instance ID of the spot request
                instanceIds.add(describeResponse.getInstanceId());
        }
    }
    catch (AmazonServiceException e) {
        // Don't break the loop due to an exception (it may be a temporary issue)
        anyOpen = true;
    }

    try {
        Thread.sleep(60*1000); // sleep 60s.
    }
    catch (Exception e) {
        // Do nothing if the thread woke up early.
    }
} while (anyOpen);
```

Sekarang Anda dapat menandai instance yang dikembalikan:

```
// Create a list of tags to create
ArrayList<Tag> instanceTags = new ArrayList<Tag>();
instanceTags.add(new Tag("keyname1","value1"));

// Create the tag request
CreateTagsRequest createTagsRequest_instances = new CreateTagsRequest();
createTagsRequest_instances.setResources(instanceIds);
createTagsRequest_instances.setTags(instanceTags);

// Tag the instance
try {
    ec2.createTags(createTagsRequest_instances);
}
catch (AmazonServiceException e) {
    // Write out any exceptions that may have occurred.
    System.out.println("Error terminating instances");
    System.out.println("Caught Exception: " + e.getMessage());
    System.out.println("Reponse Status Code: " + e.getStatusCode());
    System.out.println("Error Code: " + e.getErrorCode());
    System.out.println("Request ID: " + e.getRequestId());
}
```

## Membatalkan permintaan spot dan menghentikan instance
<a name="canceling-spot-requests-and-terminating-instances"></a>

### Membatalkan permintaan spot
<a name="canceling-a-spot-request"></a>

Untuk membatalkan permintaan Instans Spot, panggil `cancelSpotInstanceRequests` Amazon EC2 klien dengan [CancelSpotInstanceRequestsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CancelSpotInstanceRequestsRequest.html)objek.

```
try {
    CancelSpotInstanceRequestsRequest cancelRequest = new CancelSpotInstanceRequestsRequest(spotInstanceRequestIds);
    ec2.cancelSpotInstanceRequests(cancelRequest);
} catch (AmazonServiceException e) {
    System.out.println("Error cancelling instances");
    System.out.println("Caught Exception: " + e.getMessage());
    System.out.println("Reponse Status Code: " + e.getStatusCode());
    System.out.println("Error Code: " + e.getErrorCode());
    System.out.println("Request ID: " + e.getRequestId());
}
```

### Mengakhiri Instans Spot
<a name="terminating-spot-instances"></a>

Anda dapat menghentikan Instans Spot apa pun yang berjalan dengan meneruskannya IDs ke metode Amazon EC2 klien. `terminateInstances()`

```
try {
    TerminateInstancesRequest terminateRequest = new TerminateInstancesRequest(instanceIds);
    ec2.terminateInstances(terminateRequest);
} catch (AmazonServiceException e) {
    System.out.println("Error terminating instances");
    System.out.println("Caught Exception: " + e.getMessage());
    System.out.println("Reponse Status Code: " + e.getStatusCode());
    System.out.println("Error Code: " + e.getErrorCode());
    System.out.println("Request ID: " + e.getRequestId());
}
```

## Menyatukan semuanya
<a name="tutor-spot-adv-bring-together"></a>

Untuk menyatukan semua ini, kami menyediakan pendekatan yang lebih berorientasi objek yang menggabungkan langkah-langkah yang kami tunjukkan dalam tutorial ini menjadi satu kelas yang mudah digunakan. Kami membuat instance kelas yang disebut `Requests` yang melakukan tindakan ini. Kami juga membuat `GettingStartedApp` kelas, yang memiliki metode utama di mana kami melakukan panggilan fungsi tingkat tinggi.

Kode sumber lengkap untuk contoh ini dapat dilihat atau diunduh di [GitHub](https://github.com/aws/aws-sdk-java/tree/master/src/samples/AmazonEC2SpotInstances-Advanced).

Selamat\$1 Anda telah menyelesaikan tutorial Fitur Permintaan Lanjutan untuk mengembangkan perangkat lunak Instans Spot dengan fitur AWS SDK untuk Java.

# Mengelola Amazon EC2 Instans
<a name="examples-ec2-instances"></a>

## Membuat sebuah Instance
<a name="creating-an-instance"></a>

Buat Amazon EC2 instance baru dengan memanggil `runInstances` metode Amazon EC2 Client, menyediakannya dengan [RunInstancesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RunInstancesRequest.html)berisi [Amazon Machine Image (AMI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) untuk digunakan dan [jenis instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html).

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.InstanceType;
import com.amazonaws.services.ec2.model.RunInstancesRequest;
import com.amazonaws.services.ec2.model.RunInstancesResult;
import com.amazonaws.services.ec2.model.Tag;
```

 **Kode** 

```
RunInstancesRequest run_request = new RunInstancesRequest()
    .withImageId(ami_id)
    .withInstanceType(InstanceType.T1Micro)
    .withMaxCount(1)
    .withMinCount(1);

RunInstancesResult run_response = ec2.runInstances(run_request);

String reservation_id = run_response.getReservation().getInstances().get(0).getInstanceId();
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/CreateInstance.java).

## Memulai sebuah Instance
<a name="starting-an-instance"></a>

Untuk memulai sebuah Amazon EC2 instance, panggil `startInstances` metode Amazon EC2 Client, berikan dengan ID [StartInstancesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/StartInstancesRequest.html)yang berisi instance untuk memulai.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.StartInstancesRequest;
```

 **Kode** 

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

StartInstancesRequest request = new StartInstancesRequest()
    .withInstanceIds(instance_id);

ec2.startInstances(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/StartStopInstance.java).

## Menghentikan sebuah Instance
<a name="stopping-an-instance"></a>

Untuk menghentikan Amazon EC2 instance, panggil `stopInstances` metode EC2 Klien Amazon, berikan ID yang [StopInstancesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/StopInstancesRequest.html)berisi instance untuk berhenti.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.StopInstancesRequest;
```

 **Kode** 

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

StopInstancesRequest request = new StopInstancesRequest()
    .withInstanceIds(instance_id);

ec2.stopInstances(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/StartStopInstance.java).

## Mem-boot Ulang Instans
<a name="rebooting-an-instance"></a>

Untuk me-reboot sebuah Amazon EC2 instance, panggil `rebootInstances` metode Amazon EC2 Client, berikan ID [RebootInstancesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/RebootInstancesRequest.html)yang berisi instance untuk reboot.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.RebootInstancesRequest;
import com.amazonaws.services.ec2.model.RebootInstancesResult;
```

 **Kode** 

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

RebootInstancesRequest request = new RebootInstancesRequest()
    .withInstanceIds(instance_id);

RebootInstancesResult response = ec2.rebootInstances(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/RebootInstance.java).

## Menjelaskan Instans
<a name="describing-instances"></a>

Untuk membuat daftar instance Anda, buat [DescribeInstancesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeInstancesRequest.html)dan panggil `describeInstances` metode EC2 Klien Amazon. Ini akan mengembalikan [DescribeInstancesResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeInstancesResult.html)objek yang dapat Anda gunakan untuk daftar Amazon EC2 instance untuk akun dan wilayah Anda.

*Instans dikelompokkan berdasarkan reservasi.* Setiap reservasi sesuai dengan panggilan `startInstances` yang meluncurkan instance. Untuk membuat daftar instans Anda, Anda harus terlebih dahulu memanggil `DescribeInstancesResult` kelas `getReservations' method, and then call `getInstances` pada setiap objek [Reservasi](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/Reservation.html) yang dikembalikan.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.DescribeInstancesRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesResult;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.Reservation;
```

 **Kode** 

```
final AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient();
boolean done = false;

DescribeInstancesRequest request = new DescribeInstancesRequest();
while(!done) {
    DescribeInstancesResult response = ec2.describeInstances(request);

    for(Reservation reservation : response.getReservations()) {
        for(Instance instance : reservation.getInstances()) {
            System.out.printf(
                "Found instance with id %s, " +
                "AMI %s, " +
                "type %s, " +
                "state %s " +
                "and monitoring state %s",
                instance.getInstanceId(),
                instance.getImageId(),
                instance.getInstanceType(),
                instance.getState().getName(),
                instance.getMonitoring().getState());
        }
    }

    request.setNextToken(response.getNextToken());

    if(response.getNextToken() == null) {
        done = true;
    }
}
```

Hasil paged; Anda bisa mendapatkan hasil lebih lanjut dengan meneruskan nilai yang dikembalikan dari `getNextToken` metode objek hasil ke metode objek permintaan asli Anda, kemudian menggunakan objek permintaan yang sama dalam panggilan berikutnya. `setNextToken` `describeInstances`

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DescribeInstances.java).

## Memantau sebuah Instance
<a name="monitoring-an-instance"></a>

Anda dapat memantau berbagai aspek Amazon EC2 instance Anda, seperti CPU dan pemanfaatan jaringan, memori yang tersedia, dan ruang disk yang tersisa. Untuk mempelajari lebih lanjut tentang pemantauan instans, lihat [Pemantauan Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring_ec2.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux.

Untuk mulai memantau instance, Anda harus membuat [MonitorInstancesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/MonitorInstancesRequest.html)dengan ID instance untuk dipantau, dan meneruskannya ke `monitorInstances` metode EC2 Klien Amazon.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.MonitorInstancesRequest;
```

 **Kode** 

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

MonitorInstancesRequest request = new MonitorInstancesRequest()
        .withInstanceIds(instance_id);

ec2.monitorInstances(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/MonitorInstance.java).

## Menghentikan Pemantauan Instance
<a name="stopping-instance-monitoring"></a>

Untuk menghentikan pemantauan instance, buat [UnmonitorInstancesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/UnmonitorInstancesRequest.html)dengan ID instance untuk menghentikan pemantauan, dan teruskan ke `unmonitorInstances` metode EC2 Klien Amazon.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.UnmonitorInstancesRequest;
```

 **Kode** 

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

UnmonitorInstancesRequest request = new UnmonitorInstancesRequest()
    .withInstanceIds(instance_id);

ec2.unmonitorInstances(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/MonitorInstance.java).

## Informasi Selengkapnya
<a name="more-information"></a>
+  [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)di Referensi Amazon EC2 API
+  [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html)di Referensi Amazon EC2 API
+  [StartInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StartInstances.html)di Referensi Amazon EC2 API
+  [StopInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StopInstances.html)di Referensi Amazon EC2 API
+  [RebootInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RebootInstances.html)di Referensi Amazon EC2 API
+  [MonitorInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_MonitorInstances.html)di Referensi Amazon EC2 API
+  [UnmonitorInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_UnmonitorInstances.html)di Referensi Amazon EC2 API

# Menggunakan Alamat IP Elastis di Amazon EC2
<a name="examples-ec2-elastic-ip"></a>

## EC2-Classic pensiun
<a name="retiringEC2Classic"></a>

**Awas**  
Kami pensiun EC2 -Classic pada 15 Agustus 2022. Kami menyarankan Anda bermigrasi dari EC2 -Classic ke VPC. Untuk informasi lebih lanjut, lihat posting blog [EC2-Classic-Classic Networking is Retiring - Inilah](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/) Cara Mempersiapkan.

## Mengalokasikan Alamat IP Elastis
<a name="allocating-an-elastic-ip-address"></a>

Untuk menggunakan alamat IP Elastis, pertama-tama Anda mengalokasikannya ke akun Anda, lalu mengaitkannya dengan instans atau antarmuka jaringan.

Untuk mengalokasikan alamat IP Elastis, panggil `allocateAddress` metode EC2 Klien Amazon dengan [AllocateAddressRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AllocateAddressRequest.html)objek yang berisi tipe jaringan (klasik EC2 atau VPC).

Yang dikembalikan [AllocateAddressResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AllocateAddressResult.html)berisi ID alokasi yang dapat Anda gunakan untuk mengaitkan alamat dengan instance, dengan meneruskan ID alokasi dan ID instance [AssociateAddressRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AssociateAddressRequest.html)ke metode EC2 Klien Amazon`associateAddress`.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.AllocateAddressRequest;
import com.amazonaws.services.ec2.model.AllocateAddressResult;
import com.amazonaws.services.ec2.model.AssociateAddressRequest;
import com.amazonaws.services.ec2.model.AssociateAddressResult;
import com.amazonaws.services.ec2.model.DomainType;
```

 **Kode** 

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

AllocateAddressRequest allocate_request = new AllocateAddressRequest()
    .withDomain(DomainType.Vpc);

AllocateAddressResult allocate_response =
    ec2.allocateAddress(allocate_request);

String allocation_id = allocate_response.getAllocationId();

AssociateAddressRequest associate_request =
    new AssociateAddressRequest()
        .withInstanceId(instance_id)
        .withAllocationId(allocation_id);

AssociateAddressResult associate_response =
    ec2.associateAddress(associate_request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/AllocateAddress.java).

## Menjelaskan Alamat IP Elastis
<a name="describing-elastic-ip-addresses"></a>

Untuk mencantumkan alamat IP Elastis yang ditetapkan ke akun Anda, hubungi `describeAddresses` metode EC2 Klien Amazon. Ini mengembalikan [DescribeAddressesResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeAddressesResult.html)yang dapat Anda gunakan untuk mendapatkan daftar objek [Alamat](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/Address.html) yang mewakili alamat IP Elastis di akun Anda.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.Address;
import com.amazonaws.services.ec2.model.DescribeAddressesResult;
```

 **Kode** 

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

DescribeAddressesResult response = ec2.describeAddresses();

for(Address address : response.getAddresses()) {
    System.out.printf(
            "Found address with public IP %s, " +
            "domain %s, " +
            "allocation id %s " +
            "and NIC id %s",
            address.getPublicIp(),
            address.getDomain(),
            address.getAllocationId(),
            address.getNetworkInterfaceId());
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DescribeAddresses.java).

## Melepaskan Alamat IP Elastis
<a name="releasing-an-elastic-ip-address"></a>

Untuk merilis alamat IP Elastis, panggil `releaseAddress` metode EC2 Klien Amazon, berikan ID alokasi yang [ReleaseAddressRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/ReleaseAddressRequest.html)berisi ID alokasi alamat IP Elastis yang ingin Anda rilis.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.ReleaseAddressRequest;
import com.amazonaws.services.ec2.model.ReleaseAddressResult;
```

 **Kode** 

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

ReleaseAddressRequest request = new ReleaseAddressRequest()
    .withAllocationId(alloc_id);

ReleaseAddressResult response = ec2.releaseAddress(request);
```

Setelah Anda merilis alamat IP Elastis, itu dilepaskan ke kumpulan alamat AWS IP dan mungkin tidak tersedia untuk Anda sesudahnya. Pastikan untuk memperbarui catatan DNS Anda dan server atau perangkat apa pun yang berkomunikasi dengan alamat tersebut. Jika Anda mencoba melepaskan alamat IP Elastis yang sudah dirilis, Anda akan mendapatkan *AuthFailure*kesalahan jika alamat tersebut sudah dialokasikan ke alamat lain Akun AWS.

Jika Anda menggunakan *EC2-Classic* atau *VPC default*, maka melepaskan alamat IP Elastis secara otomatis memisahkannya dari instance apa pun yang terkait dengannya. Untuk memisahkan alamat IP Elastis tanpa melepaskannya, gunakan metode EC2 Klien Amazon. `disassociateAddress`

Jika Anda menggunakan VPC non-default, *Anda* harus `disassociateAddress` menggunakan untuk memisahkan alamat IP Elastic sebelum Anda mencoba melepaskannya. Jika tidak, Amazon EC2 mengembalikan kesalahan (*Tidak validIPAddress. InUse*).

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/ReleaseAddress.java).

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Alamat IP Elastis](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) dalam Panduan Amazon EC2 Pengguna untuk Instans Linux
+  [AllocateAddress](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AllocateAddress.html)di Referensi Amazon EC2 API
+  [DescribeAddresses](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAddresses.html)di Referensi Amazon EC2 API
+  [ReleaseAddress](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReleaseAddress.html)di Referensi Amazon EC2 API

# Gunakan wilayah dan zona ketersediaan
<a name="examples-ec2-regions-zones"></a>

## Jelaskan wilayah
<a name="describe-regions"></a>

Untuk mencantumkan Wilayah yang tersedia untuk akun Anda, hubungi `describeRegions` metode EC2 Klien Amazon. Ini mengembalikan a [DescribeRegionsResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeRegionsResult.html). Panggil `getRegions` metode objek yang dikembalikan untuk mendapatkan daftar objek [Region](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/Region.html) yang mewakili setiap Region.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.DescribeRegionsResult;
import com.amazonaws.services.ec2.model.Region;
import com.amazonaws.services.ec2.model.AvailabilityZone;
import com.amazonaws.services.ec2.model.DescribeAvailabilityZonesResult;
```

 **Kode** 

```
DescribeRegionsResult regions_response = ec2.describeRegions();

for(Region region : regions_response.getRegions()) {
    System.out.printf(
        "Found region %s " +
        "with endpoint %s",
        region.getRegionName(),
        region.getEndpoint());
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DescribeRegionsAndZones.java).

## Jelaskan zona ketersediaan
<a name="describe-availability-zones"></a>

Untuk mencantumkan setiap Availability Zone yang tersedia untuk akun Anda, hubungi `describeAvailabilityZones` metode Amazon EC2 Client. Ini mengembalikan a [DescribeAvailabilityZonesResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeAvailabilityZonesResult.html). Panggil `getAvailabilityZones` metodenya untuk mendapatkan daftar [AvailabilityZone](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AvailabilityZone.html)objek yang mewakili setiap Availability Zone.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.DescribeRegionsResult;
import com.amazonaws.services.ec2.model.Region;
import com.amazonaws.services.ec2.model.AvailabilityZone;
import com.amazonaws.services.ec2.model.DescribeAvailabilityZonesResult;
```

 **Kode** 

```
DescribeAvailabilityZonesResult zones_response =
    ec2.describeAvailabilityZones();

for(AvailabilityZone zone : zones_response.getAvailabilityZones()) {
    System.out.printf(
        "Found availability zone %s " +
        "with status %s " +
        "in region %s",
        zone.getZoneName(),
        zone.getState(),
        zone.getRegionName());
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DescribeRegionsAndZones.java).

## Jelaskan akun
<a name="describe-accounts"></a>

Untuk mendeskripsikan akun Anda, hubungi `describeAccountAttributes` metode EC2 Klien Amazon. Metode ini mengembalikan [DescribeAccountAttributesResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeAccountAttributesResult.html)objek. Memanggil `getAccountAttributes` metode objek ini untuk mendapatkan daftar [AccountAttribute](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AccountAttribute.html)objek. Anda dapat mengulangi melalui daftar untuk mengambil objek [AccountAttribute](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AccountAttribute.html).

Anda bisa mendapatkan nilai atribut akun Anda dengan menjalankan `getAttributeValues` metode [AccountAttribute](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AccountAttribute.html)objek. Metode ini mengembalikan daftar [AccountAttributeValue](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AccountAttributeValue.html)objek. Anda dapat mengulangi melalui daftar kedua ini untuk menampilkan nilai atribut (lihat contoh kode berikut).

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.AccountAttributeValue;
import com.amazonaws.services.ec2.model.DescribeAccountAttributesResult;
import com.amazonaws.services.ec2.model.AccountAttribute;
import java.util.List;
import java.util.ListIterator;
```

 **Kode** 

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

try{
    DescribeAccountAttributesResult accountResults = ec2.describeAccountAttributes();
    List<AccountAttribute> accountList = accountResults.getAccountAttributes();

    for (ListIterator iter = accountList.listIterator(); iter.hasNext(); ) {

        AccountAttribute attribute = (AccountAttribute) iter.next();
        System.out.print("\n The name of the attribute is "+attribute.getAttributeName());
        List<AccountAttributeValue> values = attribute.getAttributeValues();

         //iterate through the attribute values
        for (ListIterator iterVals = values.listIterator(); iterVals.hasNext(); ) {
            AccountAttributeValue myValue = (AccountAttributeValue) iterVals.next();
            System.out.print("\n The value of the attribute is "+myValue.getAttributeValue());
        }
    }
    System.out.print("Done");
}
catch (Exception e)
{
    e.getStackTrace();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DescribeAccount.java) di GitHub.

## Informasi lain
<a name="more-information"></a>
+  [Wilayah dan Availability Zone](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux
+  [DescribeRegions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeRegions.html)di Referensi Amazon EC2 API
+  [DescribeAvailabilityZones](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html)di Referensi Amazon EC2 API

# Bekerja dengan Pasangan Amazon EC2 Kunci
<a name="examples-ec2-key-pairs"></a>

## Membuat Pasangan Kunci
<a name="creating-a-key-pair"></a>

Untuk membuat key pair, panggil `createKeyPair` metode Amazon EC2 Client dengan [CreateKeyPairRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateKeyPairRequest.html)yang berisi nama kunci.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.CreateKeyPairRequest;
import com.amazonaws.services.ec2.model.CreateKeyPairResult;
```

 **Kode** 

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

CreateKeyPairRequest request = new CreateKeyPairRequest()
    .withKeyName(key_name);

CreateKeyPairResult response = ec2.createKeyPair(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/CreateKeyPair.java).

## Menggambarkan Pasangan Kunci
<a name="describing-key-pairs"></a>

Untuk membuat daftar pasangan kunci Anda atau untuk mendapatkan informasi tentang mereka, hubungi `describeKeyPairs` metode EC2 Klien Amazon. Ia mengembalikan [DescribeKeyPairsResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeKeyPairsResult.html)yang dapat Anda gunakan untuk mengakses daftar pasangan kunci dengan memanggil `getKeyPairs` metodenya, yang mengembalikan daftar [KeyPairInfo](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/KeyPairInfo.html)objek.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.DescribeKeyPairsResult;
import com.amazonaws.services.ec2.model.KeyPairInfo;
```

 **Kode** 

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

DescribeKeyPairsResult response = ec2.describeKeyPairs();

for(KeyPairInfo key_pair : response.getKeyPairs()) {
    System.out.printf(
        "Found key pair with name %s " +
        "and fingerprint %s",
        key_pair.getKeyName(),
        key_pair.getKeyFingerprint());
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DescribeKeyPairs.java).

## Menghapus Pasangan Kunci
<a name="deleting-a-key-pair"></a>

Untuk menghapus key pair, panggil `deleteKeyPair` metode Amazon EC2 Client, berikan [DeleteKeyPairRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DeleteKeyPairRequest.html)yang berisi nama key pair yang akan dihapus.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.DeleteKeyPairRequest;
import com.amazonaws.services.ec2.model.DeleteKeyPairResult;
```

 **Kode** 

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

DeleteKeyPairRequest request = new DeleteKeyPairRequest()
    .withKeyName(key_name);

DeleteKeyPairResult response = ec2.deleteKeyPair(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DeleteKeyPair.java).

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Amazon EC2 Pasangan Kunci](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) dalam Panduan Amazon EC2 Pengguna untuk Instans Linux
+  [CreateKeyPair](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html)di Referensi Amazon EC2 API
+  [DescribeKeyPairs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeKeyPairs.html)di Referensi Amazon EC2 API
+  [DeleteKeyPair](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteKeyPair.html)di Referensi Amazon EC2 API

# Bekerja dengan kelompok keamanan di Amazon EC2
<a name="examples-ec2-security-groups"></a>

## Membuat Grup Keamanan
<a name="creating-a-security-group"></a>

Untuk membuat grup keamanan, panggil `createSecurityGroup` metode EC2 Klien Amazon dengan [CreateSecurityGroupRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/CreateSecurityGroupRequest.html)yang berisi nama kunci.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.CreateSecurityGroupRequest;
import com.amazonaws.services.ec2.model.CreateSecurityGroupResult;
```

 **Kode** 

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

CreateSecurityGroupRequest create_request = new
    CreateSecurityGroupRequest()
        .withGroupName(group_name)
        .withDescription(group_desc)
        .withVpcId(vpc_id);

CreateSecurityGroupResult create_response =
    ec2.createSecurityGroup(create_request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/CreateSecurityGroup.java).

## Mengkonfigurasi Grup Keamanan
<a name="configuring-a-security-group"></a>

Grup keamanan dapat mengontrol lalu lintas masuk (masuk) dan keluar (keluar) ke instans Anda. Amazon EC2 

Untuk menambahkan aturan ingress ke grup keamanan Anda, gunakan `authorizeSecurityGroupIngress` metode EC2 Klien Amazon, dengan memberikan nama grup keamanan dan aturan akses ([IpPermission](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/IpPermission.html)) yang ingin Anda tetapkan padanya dalam objek [AuthorizeSecurityGroupIngressRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AuthorizeSecurityGroupIngressRequest.html). Contoh berikut menunjukkan cara menambahkan izin IP ke grup keamanan.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.CreateSecurityGroupRequest;
import com.amazonaws.services.ec2.model.CreateSecurityGroupResult;
```

 **Kode** 

```
IpRange ip_range = new IpRange()
    .withCidrIp("0.0.0.0/0");

IpPermission ip_perm = new IpPermission()
    .withIpProtocol("tcp")
    .withToPort(80)
    .withFromPort(80)
    .withIpv4Ranges(ip_range);

IpPermission ip_perm2 = new IpPermission()
    .withIpProtocol("tcp")
    .withToPort(22)
    .withFromPort(22)
    .withIpv4Ranges(ip_range);

AuthorizeSecurityGroupIngressRequest auth_request = new
    AuthorizeSecurityGroupIngressRequest()
        .withGroupName(group_name)
        .withIpPermissions(ip_perm, ip_perm2);

AuthorizeSecurityGroupIngressResult auth_response =
    ec2.authorizeSecurityGroupIngress(auth_request);
```

Untuk menambahkan aturan keluar ke grup keamanan, berikan data serupa dalam metode [AuthorizeSecurityGroupEgressRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/AuthorizeSecurityGroupEgressRequest.html)ke EC2 Klien Amazon`authorizeSecurityGroupEgress`.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/CreateSecurityGroup.java).

## Menggambarkan Grup Keamanan
<a name="describing-security-groups"></a>

Untuk menjelaskan grup keamanan Anda atau mendapatkan informasi tentang mereka, hubungi `describeSecurityGroups` metode EC2 Klien Amazon. Ia mengembalikan [DescribeSecurityGroupsResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DescribeSecurityGroupsResult.html)yang dapat Anda gunakan untuk mengakses daftar grup keamanan dengan memanggil `getSecurityGroups` metodenya, yang mengembalikan daftar [SecurityGroup](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/SecurityGroup.html)objek.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.DescribeSecurityGroupsRequest;
import com.amazonaws.services.ec2.model.DescribeSecurityGroupsResult;
```

 **Kode** 

```
final String USAGE =
    "To run this example, supply a group id\n" +
    "Ex: DescribeSecurityGroups <group-id>\n";

if (args.length != 1) {
    System.out.println(USAGE);
    System.exit(1);
}

String group_id = args[0];
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DescribeSecurityGroups.java).

## Menghapus Grup Keamanan
<a name="deleting-a-security-group"></a>

Untuk menghapus grup keamanan, panggil `deleteSecurityGroup` metode EC2 Klien Amazon, berikan [DeleteSecurityGroupRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/ec2/model/DeleteSecurityGroupRequest.html)yang berisi ID grup keamanan yang akan dihapus.

 **Impor** 

```
import com.amazonaws.services.ec2.AmazonEC2;
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
import com.amazonaws.services.ec2.model.DeleteSecurityGroupRequest;
import com.amazonaws.services.ec2.model.DeleteSecurityGroupResult;
```

 **Kode** 

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

DeleteSecurityGroupRequest request = new DeleteSecurityGroupRequest()
    .withGroupId(group_id);

DeleteSecurityGroupResult response = ec2.deleteSecurityGroup(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/ec2/src/main/java/aws/example/ec2/DeleteSecurityGroup.java).

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Amazon EC2 Grup Keamanan](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) dalam Panduan Amazon EC2 Pengguna untuk Instans Linux
+  [Mengotorisasi Lalu Lintas Masuk untuk Instans Linux Anda](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html) di Panduan Amazon EC2 Pengguna untuk Instans Linux
+  [CreateSecurityGroup](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html)di Referensi Amazon EC2 API
+  [DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)di Referensi Amazon EC2 API
+  [DeleteSecurityGroup](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteSecurityGroup.html)di Referensi Amazon EC2 API
+  [AuthorizeSecurityGroupIngress](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AuthorizeSecurityGroupIngress.html)di Referensi Amazon EC2 API

# Contoh IAM Menggunakan AWS SDK untuk Java
<a name="examples-iam"></a>

Bagian ini memberikan contoh pemrograman [IAM](https://aws.amazon.com/iam/) dengan menggunakan. [AWS SDK untuk Java](https://aws.amazon.com/sdk-for-java/)

 AWS Identity and Access Management (IAM) memungkinkan Anda untuk mengontrol akses ke AWS layanan dan sumber daya untuk pengguna Anda dengan aman. Menggunakan IAM, Anda dapat membuat dan mengelola AWS pengguna dan grup, dan menggunakan izin untuk mengizinkan dan menolak akses mereka ke AWS sumber daya. Untuk panduan lengkap IAM, kunjungi [Panduan IAM Pengguna](https://docs.aws.amazon.com/IAM/latest/UserGuide/).

**catatan**  
Contohnya hanya mencakup kode yang diperlukan untuk mendemonstrasikan setiap teknik. [Kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java). Dari sana, Anda dapat mengunduh satu file sumber atau mengkloning repositori secara lokal untuk mendapatkan semua contoh untuk dibangun dan dijalankan.

**Topics**
+ [Mengelola Kunci Akses IAM](examples-iam-access-keys.md)
+ [Mengelola Pengguna IAM](examples-iam-users.md)
+ [Menggunakan Alias Akun IAM](examples-iam-account-aliases.md)
+ [Bekerja dengan Kebijakan IAM](examples-iam-policies.md)
+ [Bekerja dengan Sertifikat Server IAM](examples-iam-server-certificates.md)

# Mengelola Kunci Akses IAM
<a name="examples-iam-access-keys"></a>

## Membuat Kunci Akses
<a name="creating-an-access-key"></a>

Untuk membuat kunci akses IAM, panggil AmazonIdentityManagementClient `createAccessKey` metode dengan [CreateAccessKeyRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/CreateAccessKeyRequest.html)objek.

 `CreateAccessKeyRequest`memiliki dua konstruktor - satu yang mengambil nama pengguna dan satu lagi tanpa parameter. Jika Anda menggunakan versi yang tidak mengambil parameter, Anda harus mengatur nama pengguna menggunakan metode `withUserName` setter sebelum meneruskannya ke `createAccessKey` metode.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.CreateAccessKeyRequest;
import com.amazonaws.services.identitymanagement.model.CreateAccessKeyResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

CreateAccessKeyRequest request = new CreateAccessKeyRequest()
    .withUserName(user);

CreateAccessKeyResult response = iam.createAccessKey(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/CreateAccessKey.java) di GitHub.

## Kunci Akses Daftar
<a name="listing-access-keys"></a>

Untuk membuat daftar kunci akses untuk pengguna tertentu, buat [ListAccessKeysRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/ListAccessKeysRequest.html)objek yang berisi nama pengguna untuk mencantumkan kunci, dan meneruskannya ke AmazonIdentityManagementClient `listAccessKeys` metode.

**catatan**  
Jika Anda tidak memberikan nama pengguna ke`listAccessKeys`, itu akan mencoba untuk daftar kunci akses yang terkait dengan Akun AWS yang menandatangani permintaan.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.AccessKeyMetadata;
import com.amazonaws.services.identitymanagement.model.ListAccessKeysRequest;
import com.amazonaws.services.identitymanagement.model.ListAccessKeysResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

boolean done = false;
ListAccessKeysRequest request = new ListAccessKeysRequest()
        .withUserName(username);

while (!done) {

    ListAccessKeysResult response = iam.listAccessKeys(request);

    for (AccessKeyMetadata metadata :
            response.getAccessKeyMetadata()) {
        System.out.format("Retrieved access key %s",
                metadata.getAccessKeyId());
    }

    request.setMarker(response.getMarker());

    if (!response.getIsTruncated()) {
        done = true;
    }
}
```

Hasil `listAccessKeys` paged (dengan maksimum default 100 record per panggilan). Anda dapat memanggil `getIsTruncated` [ListAccessKeysResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/ListAccessKeysResult.html)objek yang dikembalikan untuk melihat apakah kueri mengembalikan hasil yang lebih sedikit kemudian tersedia. Jika demikian, maka panggil `ListAccessKeysRequest` dan `setMarker` teruskan kembali ke pemanggilan berikutnya. `listAccessKeys`

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/ListAccessKeys.java) di GitHub.

## Mengambil Waktu Terakhir Digunakan Kunci Akses
<a name="retrieving-an-access-key-s-last-used-time"></a>

Untuk mendapatkan waktu kunci akses terakhir digunakan, panggil `getAccessKeyLastUsed` metode AmazonIdentityManagementClient ini dengan ID kunci akses (yang dapat diteruskan menggunakan [GetAccessKeyLastUsedRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/GetAccessKeyLastUsedRequest.html)objek, atau langsung ke overload yang mengambil ID kunci akses secara langsung.

Anda kemudian dapat menggunakan [GetAccessKeyLastUsedResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/GetAccessKeyLastUsedResult.html)objek yang dikembalikan untuk mengambil waktu terakhir kunci yang digunakan.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.GetAccessKeyLastUsedRequest;
import com.amazonaws.services.identitymanagement.model.GetAccessKeyLastUsedResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

GetAccessKeyLastUsedRequest request = new GetAccessKeyLastUsedRequest()
    .withAccessKeyId(access_id);

GetAccessKeyLastUsedResult response = iam.getAccessKeyLastUsed(request);

System.out.println("Access key was last used at: " +
        response.getAccessKeyLastUsed().getLastUsedDate());
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/AccessKeyLastUsed.java) di GitHub.

## Mengaktifkan atau Menonaktifkan Kunci Akses
<a name="iam-access-keys-update"></a>

Anda dapat mengaktifkan atau menonaktifkan kunci akses dengan membuat [UpdateAccessKeyRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/UpdateAccessKeyRequest.html)objek, memberikan ID kunci akses, opsional nama pengguna, dan [Status](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/StatusType.html) yang diinginkan, lalu meneruskan objek permintaan ke metode AmazonIdentityManagementClient ini`updateAccessKey`.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.UpdateAccessKeyRequest;
import com.amazonaws.services.identitymanagement.model.UpdateAccessKeyResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

UpdateAccessKeyRequest request = new UpdateAccessKeyRequest()
    .withAccessKeyId(access_id)
    .withUserName(username)
    .withStatus(status);

UpdateAccessKeyResult response = iam.updateAccessKey(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/UpdateAccessKey.java) di GitHub.

## Menghapus Kunci Akses
<a name="deleting-an-access-key"></a>

Untuk menghapus kunci akses secara permanen, panggil `deleteKey` metode ini, berikan dengan ID dan nama pengguna kunci akses yang [DeleteAccessKeyRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/DeleteAccessKeyRequest.html)berisi. AmazonIdentityManagementClient

**catatan**  
Setelah dihapus, kunci tidak dapat lagi diambil atau digunakan. Untuk menonaktifkan sementara kunci sehingga dapat diaktifkan lagi nanti, gunakan [updateAccessKey](#iam-access-keys-update)metode sebagai gantinya.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.DeleteAccessKeyRequest;
import com.amazonaws.services.identitymanagement.model.DeleteAccessKeyResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

DeleteAccessKeyRequest request = new DeleteAccessKeyRequest()
    .withAccessKeyId(access_key)
    .withUserName(username);

DeleteAccessKeyResult response = iam.deleteAccessKey(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/DeleteAccessKey.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [CreateAccessKey](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html)di Referensi API IAM
+  [ListAccessKeys](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccessKeys.html)di Referensi API IAM
+  [GetAccessKeyLastUsed](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetAccessKeyLastUsed.html)di Referensi API IAM
+  [UpdateAccessKey](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html)di Referensi API IAM
+  [DeleteAccessKey](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html)di Referensi API IAM

# Mengelola Pengguna IAM
<a name="examples-iam-users"></a>

## Membuat Pengguna
<a name="creating-a-user"></a>

Buat pengguna IAM baru dengan memberikan nama pengguna ke `createUser` metode AmazonIdentityManagementClient ini, baik secara langsung atau menggunakan [CreateUserRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/CreateUserRequest.html)objek yang berisi nama pengguna.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.CreateUserRequest;
import com.amazonaws.services.identitymanagement.model.CreateUserResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

CreateUserRequest request = new CreateUserRequest()
    .withUserName(username);

CreateUserResult response = iam.createUser(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/CreateUser.java) di GitHub.

## Daftar Pengguna
<a name="listing-users"></a>

Untuk membuat daftar pengguna IAM untuk akun Anda, buat yang baru [ListUsersRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/ListUsersRequest.html)dan teruskan ke `listUsers` metode AmazonIdentityManagementClient ini. Anda dapat mengambil daftar pengguna dengan memanggil [ListUsersResult](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/identitymanagement/model/ListUsersResult.html)objek `getUsers` yang dikembalikan.

Daftar pengguna yang dikembalikan `listUsers` oleh halaman. Anda dapat memeriksa untuk melihat ada lebih banyak hasil untuk diambil dengan memanggil `getIsTruncated` metode objek respons. Jika kembali`true`, kemudian memanggil `setMarker()` metode permintaan objek, melewati nilai kembali dari `getMarker()` metode objek respon.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.ListUsersRequest;
import com.amazonaws.services.identitymanagement.model.ListUsersResult;
import com.amazonaws.services.identitymanagement.model.User;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

boolean done = false;
ListUsersRequest request = new ListUsersRequest();

while(!done) {
    ListUsersResult response = iam.listUsers(request);

    for(User user : response.getUsers()) {
        System.out.format("Retrieved user %s", user.getUserName());
    }

    request.setMarker(response.getMarker());

    if(!response.getIsTruncated()) {
        done = true;
    }
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/ListUsers.java) di GitHub.

## Memperbarui Pengguna
<a name="updating-a-user"></a>

Untuk memperbarui pengguna, panggil `updateUser` metode AmazonIdentityManagementClient objek, yang mengambil [UpdateUserRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/UpdateUserRequest.html)objek yang dapat Anda gunakan untuk mengubah *nama* atau *jalur* pengguna.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.UpdateUserRequest;
import com.amazonaws.services.identitymanagement.model.UpdateUserResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

UpdateUserRequest request = new UpdateUserRequest()
    .withUserName(cur_name)
    .withNewUserName(new_name);

UpdateUserResult response = iam.updateUser(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/UpdateUser.java) di GitHub.

## Menghapus Pengguna
<a name="deleting-a-user"></a>

Untuk menghapus pengguna, panggil AmazonIdentityManagementClient `deleteUser` permintaan dengan [UpdateUserRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/UpdateUserRequest.html)objek yang ditetapkan dengan nama pengguna untuk dihapus.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.DeleteConflictException;
import com.amazonaws.services.identitymanagement.model.DeleteUserRequest;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

DeleteUserRequest request = new DeleteUserRequest()
    .withUserName(username);

try {
    iam.deleteUser(request);
} catch (DeleteConflictException e) {
    System.out.println("Unable to delete user. Verify user is not" +
            " associated with any resources");
    throw e;
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/DeleteUser.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) dalam IAM Panduan Pengguna
+  [Mengelola Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html) di IAM Panduan Pengguna
+  [CreateUser](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html)di Referensi API IAM
+  [ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html)di Referensi API IAM
+  [UpdateUser](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateUser.html)di Referensi API IAM
+  [DeleteUser](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteUser.html)di Referensi API IAM

# Menggunakan Alias Akun IAM
<a name="examples-iam-account-aliases"></a>

Jika Anda ingin URL untuk halaman login berisi nama perusahaan atau pengenal ramah lainnya, bukan Akun AWS ID Anda, Anda dapat membuat alias untuk Anda. Akun AWS

**catatan**  
 AWS mendukung persis satu alias akun per akun.

## Membuat Akun Alias
<a name="creating-an-account-alias"></a>

Untuk membuat alias akun, panggil `createAccountAlias` metode AmazonIdentityManagementClient ini dengan [CreateAccountAliasRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/CreateAccountAliasRequest.html)objek yang berisi nama alias.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.CreateAccountAliasRequest;
import com.amazonaws.services.identitymanagement.model.CreateAccountAliasResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

CreateAccountAliasRequest request = new CreateAccountAliasRequest()
    .withAccountAlias(alias);

CreateAccountAliasResult response = iam.createAccountAlias(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/CreateAccountAlias.java) di GitHub.

## Daftar Alias Akun
<a name="listing-account-aliases"></a>

Untuk membuat daftar alias akun Anda, jika ada, hubungi `listAccountAliases` metode AmazonIdentityManagementClient ini.

**catatan**  
Yang dikembalikan [ListAccountAliasesResult](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/identitymanagement/model/ListAccountAliasesResult.html)mendukung yang sama `getIsTruncated` dan `getMarker` metode seperti metode AWS SDK untuk Java *daftar* lainnya, tetapi hanya Akun AWS dapat memiliki *satu* alias akun.

 **impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.ListAccountAliasesResult;
```

 **kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

ListAccountAliasesResult response = iam.listAccountAliases();

for (String alias : response.getAccountAliases()) {
    System.out.printf("Retrieved account alias %s", alias);
}
```

lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/ListAccountAliases.java) di GitHub.

## Menghapus alias akun
<a name="deleting-an-account-alias"></a>

Untuk menghapus alias akun Anda, hubungi `deleteAccountAlias` metode AmazonIdentityManagementClient ini. Saat menghapus alias akun, Anda harus memberikan namanya menggunakan objek. [DeleteAccountAliasRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/DeleteAccountAliasRequest.html)

 **impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.DeleteAccountAliasRequest;
import com.amazonaws.services.identitymanagement.model.DeleteAccountAliasResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

DeleteAccountAliasRequest request = new DeleteAccountAliasRequest()
    .withAccountAlias(alias);

DeleteAccountAliasResult response = iam.deleteAccountAlias(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/DeleteAccountAlias.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [ID AWS Akun Anda dan Aliasnya](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html) di IAM Panduan Pengguna
+  [CreateAccountAlias](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccountAlias.html)di Referensi API IAM
+  [ListAccountAliases](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAccountAliases.html)di Referensi API IAM
+  [DeleteAccountAlias](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccountAlias.html)di Referensi API IAM

# Bekerja dengan Kebijakan IAM
<a name="examples-iam-policies"></a>

## Membuat Kebijakan
<a name="creating-a-policy"></a>

Untuk membuat kebijakan baru, berikan nama kebijakan dan dokumen kebijakan berformat JSON dalam metode [CreatePolicyRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/CreatePolicyRequest.html)to the's. AmazonIdentityManagementClient `createPolicy`

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.CreatePolicyRequest;
import com.amazonaws.services.identitymanagement.model.CreatePolicyResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

CreatePolicyRequest request = new CreatePolicyRequest()
    .withPolicyName(policy_name)
    .withPolicyDocument(POLICY_DOCUMENT);

CreatePolicyResult response = iam.createPolicy(request);
```

[Dokumen kebijakan IAM adalah string JSON dengan sintaks yang terdokumentasi dengan baik.](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html) Berikut adalah contoh yang menyediakan akses untuk membuat permintaan tertentu DynamoDB.

```
public static final String POLICY_DOCUMENT =
    "{" +
    "  \"Version\": \"2012-10-17\",		 	 	 " +
    "  \"Statement\": [" +
    "    {" +
    "        \"Effect\": \"Allow\"," +
    "        \"Action\": \"logs:CreateLogGroup\"," +
    "        \"Resource\": \"%s\"" +
    "    }," +
    "    {" +
    "        \"Effect\": \"Allow\"," +
    "        \"Action\": [" +
    "            \"dynamodb:DeleteItem\"," +
    "            \"dynamodb:GetItem\"," +
    "            \"dynamodb:PutItem\"," +
    "            \"dynamodb:Scan\"," +
    "            \"dynamodb:UpdateItem\"" +
    "       ]," +
    "       \"Resource\": \"RESOURCE_ARN\"" +
    "    }" +
    "   ]" +
    "}";
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/CreatePolicy.java) di GitHub.

## Mendapatkan Kebijakan
<a name="getting-a-policy"></a>

Untuk mengambil kebijakan yang ada, panggil `getPolicy` metode, yang menyediakan ARN kebijakan dalam [GetPolicyRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/GetPolicyRequest.html)objek. AmazonIdentityManagementClient

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.GetPolicyRequest;
import com.amazonaws.services.identitymanagement.model.GetPolicyResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

GetPolicyRequest request = new GetPolicyRequest()
    .withPolicyArn(policy_arn);

GetPolicyResult response = iam.getPolicy(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/GetPolicy.java) di GitHub.

## Melampirkan Kebijakan Peran
<a name="attaching-a-role-policy"></a>

Anda dapat melampirkan kebijakan ke IAMhttp: //docs.aws.amazon. com/IAM/latest/UserGuide/id\$1roles.html [role] dengan memanggil `attachRolePolicy` metode AmazonIdentityManagementClient's, menyediakannya dengan nama peran dan kebijakan ARN dalam file. [AttachRolePolicyRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/AttachRolePolicyRequest.html)

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.AttachRolePolicyRequest;
import com.amazonaws.services.identitymanagement.model.AttachedPolicy;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

AttachRolePolicyRequest attach_request =
    new AttachRolePolicyRequest()
        .withRoleName(role_name)
        .withPolicyArn(POLICY_ARN);

iam.attachRolePolicy(attach_request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/AttachRolePolicy.java) di GitHub.

## Daftar Kebijakan Peran Terlampir
<a name="listing-attached-role-policies"></a>

Buat daftar kebijakan terlampir pada peran dengan memanggil `listAttachedRolePolicies` metode ini. AmazonIdentityManagementClient Dibutuhkan [ListAttachedRolePoliciesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/ListAttachedRolePoliciesRequest.html)objek yang berisi nama peran untuk mencantumkan kebijakan.

Panggil `getAttachedPolicies` [ListAttachedRolePoliciesResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/ListAttachedRolePoliciesResult.html)objek yang dikembalikan untuk mendapatkan daftar kebijakan terlampir. Hasil mungkin terpotong; jika `getIsTruncated` metode `ListAttachedRolePoliciesResult` objek kembali`true`, panggil `setMarker` metode `ListAttachedRolePoliciesRequest` objek dan gunakan untuk memanggil `listAttachedRolePolicies` lagi untuk mendapatkan kumpulan hasil berikutnya.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.ListAttachedRolePoliciesRequest;
import com.amazonaws.services.identitymanagement.model.ListAttachedRolePoliciesResult;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

ListAttachedRolePoliciesRequest request =
    new ListAttachedRolePoliciesRequest()
        .withRoleName(role_name);

List<AttachedPolicy> matching_policies = new ArrayList<>();

boolean done = false;

while(!done) {
    ListAttachedRolePoliciesResult response =
        iam.listAttachedRolePolicies(request);

    matching_policies.addAll(
            response.getAttachedPolicies()
                    .stream()
                    .filter(p -> p.getPolicyName().equals(role_name))
                    .collect(Collectors.toList()));

    if(!response.getIsTruncated()) {
        done = true;
    }
    request.setMarker(response.getMarker());
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/AttachRolePolicy.java) di GitHub.

## Melepaskan Kebijakan Peran
<a name="detaching-a-role-policy"></a>

Untuk melepaskan kebijakan dari peran, panggil `detachRolePolicy` metode AmazonIdentityManagementClient ini, berikan nama peran dan kebijakan ARN dalam file. [DetachRolePolicyRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/DetachRolePolicyRequest.html)

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.DetachRolePolicyRequest;
import com.amazonaws.services.identitymanagement.model.DetachRolePolicyResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

DetachRolePolicyRequest request = new DetachRolePolicyRequest()
    .withRoleName(role_name)
    .withPolicyArn(policy_arn);

DetachRolePolicyResult response = iam.detachRolePolicy(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/DetachRolePolicy.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Ikhtisar Kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) dalam Panduan IAM Pengguna.
+  [AWS Referensi Kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) dalam Panduan IAM Pengguna.
+  [CreatePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html)di Referensi API IAM
+  [GetPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html)di Referensi API IAM
+  [AttachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html)di Referensi API IAM
+  [ListAttachedRolePolicies](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedRolePolicies.html)di Referensi API IAM
+  [DetachRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachRolePolicy.html)di Referensi API IAM

# Bekerja dengan Sertifikat Server IAM
<a name="examples-iam-server-certificates"></a>

*Untuk mengaktifkan koneksi HTTPS ke situs web atau aplikasi Anda AWS, Anda memerlukan sertifikat server SSL/TLS.* Anda dapat menggunakan sertifikat server yang disediakan oleh AWS Certificate Manager atau sertifikat yang Anda peroleh dari penyedia eksternal.

Kami menyarankan Anda menggunakan ACM untuk menyediakan, mengelola, dan menyebarkan sertifikat server Anda. Dengan ACM Anda dapat meminta sertifikat, menyebarkannya ke AWS sumber daya Anda, dan membiarkan ACM menangani perpanjangan sertifikat untuk Anda. Sertifikat yang disediakan oleh ACM gratis. Untuk informasi selengkapnya tentang ACM, lihat [Panduan Pengguna ACM](https://docs.aws.amazon.com/acm/latest/userguide/).

## Mendapatkan Sertifikat Server
<a name="getting-a-server-certificate"></a>

Anda dapat mengambil sertifikat server dengan memanggil `getServerCertificate` metode, meneruskannya [GetServerCertificateRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/GetServerCertificateRequest.html)dengan nama sertifikat. AmazonIdentityManagementClient

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.GetServerCertificateRequest;
import com.amazonaws.services.identitymanagement.model.GetServerCertificateResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

GetServerCertificateRequest request = new GetServerCertificateRequest()
            .withServerCertificateName(cert_name);

GetServerCertificateResult response = iam.getServerCertificate(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/GetServerCertificate.java) di GitHub.

## Daftar Sertifikat Server
<a name="listing-server-certificates"></a>

Untuk mencantumkan sertifikat server Anda, panggil `listServerCertificates` metode ini dengan file [ListServerCertificatesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/ListServerCertificatesRequest.html). AmazonIdentityManagementClient Ini mengembalikan a [ListServerCertificatesResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/ListServerCertificatesResult.html).

Panggil `getServerCertificateMetadataList` metode `ListServerCertificateResult` objek yang dikembalikan untuk mendapatkan daftar [ServerCertificateMetadata](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/ServerCertificateMetadata.html)objek yang dapat Anda gunakan untuk mendapatkan informasi tentang setiap sertifikat.

Hasil mungkin terpotong; jika `getIsTruncated` metode `ListServerCertificateResult` objek kembali`true`, panggil `setMarker` metode `ListServerCertificatesRequest` objek dan gunakan untuk memanggil `listServerCertificates` lagi untuk mendapatkan kumpulan hasil berikutnya.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.ListServerCertificatesRequest;
import com.amazonaws.services.identitymanagement.model.ListServerCertificatesResult;
import com.amazonaws.services.identitymanagement.model.ServerCertificateMetadata;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

boolean done = false;
ListServerCertificatesRequest request =
        new ListServerCertificatesRequest();

while(!done) {

    ListServerCertificatesResult response =
        iam.listServerCertificates(request);

    for(ServerCertificateMetadata metadata :
            response.getServerCertificateMetadataList()) {
        System.out.printf("Retrieved server certificate %s",
                metadata.getServerCertificateName());
    }

    request.setMarker(response.getMarker());

    if(!response.getIsTruncated()) {
        done = true;
    }
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/ListServerCertificates.java) di GitHub.

## Memperbarui Sertifikat Server
<a name="updating-a-server-certificate"></a>

Anda dapat memperbarui nama atau jalur sertifikat server dengan memanggil `updateServerCertificate` metode ini. AmazonIdentityManagementClient Dibutuhkan [UpdateServerCertificateRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/UpdateServerCertificateRequest.html)objek yang ditetapkan dengan nama sertifikat server saat ini dan baik nama baru atau jalur baru untuk digunakan.

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.UpdateServerCertificateRequest;
import com.amazonaws.services.identitymanagement.model.UpdateServerCertificateResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

UpdateServerCertificateRequest request =
    new UpdateServerCertificateRequest()
        .withServerCertificateName(cur_name)
        .withNewServerCertificateName(new_name);

UpdateServerCertificateResult response =
    iam.updateServerCertificate(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/UpdateServerCertificate.java) di GitHub.

## Menghapus Sertifikat Server
<a name="deleting-a-server-certificate"></a>

Untuk menghapus sertifikat server, panggil `deleteServerCertificate` metode dengan [DeleteServerCertificateRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/identitymanagement/model/DeleteServerCertificateRequest.html)berisi nama sertifikat. AmazonIdentityManagementClient

 **Impor** 

```
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.DeleteServerCertificateRequest;
import com.amazonaws.services.identitymanagement.model.DeleteServerCertificateResult;
```

 **Kode** 

```
final AmazonIdentityManagement iam =
    AmazonIdentityManagementClientBuilder.defaultClient();

DeleteServerCertificateRequest request =
    new DeleteServerCertificateRequest()
        .withServerCertificateName(cert_name);

DeleteServerCertificateResult response =
    iam.deleteServerCertificate(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/iam/src/main/java/aws/example/iam/DeleteServerCertificate.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Bekerja dengan Sertifikat Server](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html) di Panduan IAM Pengguna
+  [GetServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetServerCertificate.html)di Referensi API IAM
+  [ListServerCertificates](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListServerCertificates.html)di Referensi API IAM
+  [UpdateServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServerCertificate.html)di Referensi API IAM
+  [DeleteServerCertificate](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServerCertificate.html)di Referensi API IAM
+  [Panduan Pengguna ACM](https://docs.aws.amazon.com/acm/latest/userguide/) 

# Lambda Contoh Menggunakan AWS SDK untuk Java
<a name="lambda-examples"></a>

Bagian ini memberikan contoh pemrograman Lambda menggunakan AWS SDK untuk Java.

**catatan**  
Contohnya hanya mencakup kode yang diperlukan untuk mendemonstrasikan setiap teknik. [Kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java). Dari sana, Anda dapat mengunduh satu file sumber atau mengkloning repositori secara lokal untuk mendapatkan semua contoh untuk dibangun dan dijalankan.

**Topics**
+ [Operasi layanan](examples-lambda.md)

# Memanggil, Membuat Daftar, dan Menghapus Fungsi Lambda
<a name="examples-lambda"></a>

Bagian ini memberikan contoh pemrograman dengan klien Lambda layanan dengan menggunakan AWS SDK untuk Java. Untuk mempelajari cara membuat Lambda fungsi, lihat [Cara Membuat AWS Lambda fungsi](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/lambda-tutorial.html).

**Topics**
+ [Memanggil fungsi](#invoke-function)
+ [Daftar fungsi](#list-function)
+ [Hapus fungsi](#delete-function)

## Memanggil fungsi
<a name="invoke-function"></a>

Anda dapat memanggil Lambda fungsi dengan membuat [AWSLambda](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/AWSLambda.html)objek dan menjalankan metodenya`invoke`. Buat [InvokeRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/model/InvokeRequest.html)objek untuk menentukan informasi tambahan seperti nama fungsi dan payload untuk diteruskan ke Lambda fungsi. Nama fungsi muncul sebagai *arn:aws:lambda*: us-east- 1:555556330391:function:. HelloFunction Anda dapat mengambil nilai dengan melihat fungsi di. Konsol Manajemen AWS

Untuk meneruskan data payload ke fungsi, panggil `withPayload` metode [InvokeRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/model/InvokeRequest.html)objek dan tentukan String dalam format JSON, seperti yang ditunjukkan pada contoh kode berikut.

 **Impor** 

```
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.lambda.AWSLambda;
import com.amazonaws.services.lambda.AWSLambdaClientBuilder;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
import com.amazonaws.services.lambda.model.ServiceException;

import java.nio.charset.StandardCharsets;
```

 **Kode** 

Contoh kode berikut menunjukkan bagaimana untuk memanggil fungsi. Lambda 

```
        String functionName = args[0];

        InvokeRequest invokeRequest = new InvokeRequest()
                .withFunctionName(functionName)
                .withPayload("{\n" +
                        " \"Hello \": \"Paris\",\n" +
                        " \"countryCode\": \"FR\"\n" +
                        "}");
        InvokeResult invokeResult = null;

        try {
            AWSLambda awsLambda = AWSLambdaClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(Regions.US_WEST_2).build();

            invokeResult = awsLambda.invoke(invokeRequest);

            String ans = new String(invokeResult.getPayload().array(), StandardCharsets.UTF_8);

            //write out the return value
            System.out.println(ans);

        } catch (ServiceException e) {
            System.out.println(e);
        }

        System.out.println(invokeResult.getStatusCode());
```

Lihat contoh lengkapnya di [Github](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/lambda/src/main/java/com/example/lambda/LambdaInvokeFunction.java).

## Daftar fungsi
<a name="list-function"></a>

Bangun [AWSLambda](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/AWSLambda.html)objek dan panggil `listFunctions` metodenya. Metode ini mengembalikan [ListFunctionsResult](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/model/ListFunctionsResult.html)objek. Anda dapat memanggil `getFunctions` metode objek ini untuk mengembalikan daftar [FunctionConfiguration](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/model/FunctionConfiguration.html)objek. Anda dapat mengulangi melalui daftar untuk mengambil informasi tentang fungsi. Misalnya, contoh kode Java berikut menunjukkan cara mendapatkan setiap nama fungsi.

 **Impor** 

```
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.lambda.AWSLambda;
import com.amazonaws.services.lambda.AWSLambdaClientBuilder;
import com.amazonaws.services.lambda.model.FunctionConfiguration;
import com.amazonaws.services.lambda.model.ListFunctionsResult;
import com.amazonaws.services.lambda.model.ServiceException;
import java.util.Iterator;
import java.util.List;
```

 **Kode** 

Contoh kode Java berikut menunjukkan bagaimana untuk mengambil daftar nama Lambda fungsi.

```
        ListFunctionsResult functionResult = null;

        try {
            AWSLambda awsLambda = AWSLambdaClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(Regions.US_WEST_2).build();

            functionResult = awsLambda.listFunctions();

            List<FunctionConfiguration> list = functionResult.getFunctions();

            for (Iterator iter = list.iterator(); iter.hasNext(); ) {
                FunctionConfiguration config = (FunctionConfiguration)iter.next();

                System.out.println("The function name is "+config.getFunctionName());
            }

        } catch (ServiceException e) {
            System.out.println(e);
        }
```

Lihat contoh lengkapnya di [Github](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/lambda/src/main/java/com/example/lambda/ListFunctions.java).

## Hapus fungsi
<a name="delete-function"></a>

Bangun [AWSLambda](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/AWSLambda.html)objek dan panggil `deleteFunction` metodenya. Buat [DeleteFunctionRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/model/DeleteFunctionRequest.html)objek dan berikan ke `deleteFunction` metode. Objek ini berisi informasi seperti nama fungsi yang akan dihapus. Nama fungsi muncul sebagai *arn:aws:lambda*: us-east- 1:555556330391:function:. HelloFunction Anda dapat mengambil nilai dengan melihat fungsi di. Konsol Manajemen AWS

 **Impor** 

```
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.lambda.AWSLambda;
import com.amazonaws.services.lambda.AWSLambdaClientBuilder;
import com.amazonaws.services.lambda.model.ServiceException;
import com.amazonaws.services.lambda.model.DeleteFunctionRequest;
```

 **Kode** 

Kode Java berikut menunjukkan cara menghapus Lambda fungsi.

```
        String functionName = args[0];
        try {
            AWSLambda awsLambda = AWSLambdaClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(Regions.US_WEST_2).build();

            DeleteFunctionRequest delFunc = new DeleteFunctionRequest();
            delFunc.withFunctionName(functionName);

            //Delete the function
            awsLambda.deleteFunction(delFunc);
            System.out.println("The function is deleted");

        } catch (ServiceException e) {
            System.out.println(e);
        }
```

Lihat contoh lengkapnya di [Github](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/lambda/src/main/java/com/example/lambda/DeleteFunction.java).

# Amazon Pinpoint Contoh Menggunakan AWS SDK untuk Java
<a name="examples-pinpoint"></a>

Bagian ini memberikan contoh pemrograman [Amazon Pinpoint](https://aws.amazon.com/pinpoint/)menggunakan [AWS SDK untuk Java](https://aws.amazon.com/sdk-for-java/).

**catatan**  
Contohnya hanya mencakup kode yang diperlukan untuk mendemonstrasikan setiap teknik. [Kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java). Dari sana, Anda dapat mengunduh satu file sumber atau mengkloning repositori secara lokal untuk mendapatkan semua contoh untuk dibangun dan dijalankan.

**Topics**
+ [Membuat dan Menghapus Aplikasi di Amazon Pinpoint](examples-pinpoint-create-app.md)
+ [Membuat Endpoint di Amazon Pinpoint](examples-pinpoint-create-endpoint.md)
+ [Membuat Segmen di Amazon Pinpoint](examples-pinpoint-create-segment.md)
+ [Membuat Kampanye di Amazon Pinpoint](examples-pinpoint-create-campaign.md)
+ [Memperbarui Saluran di Amazon Pinpoint](examples-pinpoint-update-channel.md)

# Membuat dan Menghapus Aplikasi di Amazon Pinpoint
<a name="examples-pinpoint-create-app"></a>

Aplikasi adalah Amazon Pinpoint proyek di mana Anda menentukan audiens untuk aplikasi yang berbeda, dan Anda melibatkan audiens ini dengan pesan yang disesuaikan. Contoh di halaman ini menunjukkan cara membuat aplikasi baru atau menghapus yang sudah ada.

## Buat Aplikasi
<a name="create-an-app"></a>

Buat aplikasi baru Amazon Pinpoint dengan memberikan nama aplikasi ke [CreateAppRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/CreateAppRequest.html)objek, lalu meneruskan objek AmazonPinpointClient itu ke `createApp` metode.

 **Impor** 

```
import com.amazonaws.services.pinpoint.AmazonPinpoint;
import com.amazonaws.services.pinpoint.AmazonPinpointClientBuilder;
import com.amazonaws.services.pinpoint.model.CreateAppRequest;
import com.amazonaws.services.pinpoint.model.CreateAppResult;
import com.amazonaws.services.pinpoint.model.CreateApplicationRequest;
```

 **Kode** 

```
CreateApplicationRequest appRequest = new CreateApplicationRequest()
		.withName(appName);

CreateAppRequest request = new CreateAppRequest();
request.withCreateApplicationRequest(appRequest);
CreateAppResult result = pinpoint.createApp(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/pinpoint/src/main/java/com/example/pinpoint/CreateApp.java) di GitHub.

## Menghapus Aplikasi
<a name="delete-an-app"></a>

Untuk menghapus aplikasi, panggil AmazonPinpointClient `deleteApp` permintaan dengan [DeleteAppRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/DeleteAppRequest.html)objek yang disetel dengan nama aplikasi yang akan dihapus.

 **Impor** 

```
import com.amazonaws.services.pinpoint.AmazonPinpoint;
import com.amazonaws.services.pinpoint.AmazonPinpointClientBuilder;
```

 **Kode** 

```
DeleteAppRequest deleteRequest = new DeleteAppRequest()
		.withApplicationId(appID);

pinpoint.deleteApp(deleteRequest);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/pinpoint/src/main/java/com/example/pinpoint/DeleteApp.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Aplikasi](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-apps.html) di Referensi Amazon Pinpoint API
+  [Aplikasi](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-app.html) di Referensi Amazon Pinpoint API

# Membuat Endpoint di Amazon Pinpoint
<a name="examples-pinpoint-create-endpoint"></a>

Endpoint secara unik mengidentifikasi perangkat pengguna yang dapat Anda gunakan untuk mengirim pemberitahuan push. Amazon Pinpoint Jika aplikasi Anda diaktifkan dengan Amazon Pinpoint dukungan, aplikasi Anda akan secara otomatis mendaftarkan titik akhir Amazon Pinpoint saat pengguna baru membuka aplikasi Anda. Contoh berikut menunjukkan bagaimana menambahkan endpoint baru secara terprogram.

## Buat Endpoint
<a name="create-an-endpoint"></a>

Buat endpoint baru Amazon Pinpoint dengan menyediakan data endpoint dalam sebuah [EndpointRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/EndpointRequest.html)objek.

 **Impor** 

```
import com.amazonaws.services.pinpoint.AmazonPinpoint;
import com.amazonaws.services.pinpoint.AmazonPinpointClientBuilder;
import com.amazonaws.services.pinpoint.model.UpdateEndpointRequest;
import com.amazonaws.services.pinpoint.model.UpdateEndpointResult;
import com.amazonaws.services.pinpoint.model.EndpointDemographic;
import com.amazonaws.services.pinpoint.model.EndpointLocation;
import com.amazonaws.services.pinpoint.model.EndpointRequest;
import com.amazonaws.services.pinpoint.model.EndpointResponse;
import com.amazonaws.services.pinpoint.model.EndpointUser;
import com.amazonaws.services.pinpoint.model.GetEndpointRequest;
import com.amazonaws.services.pinpoint.model.GetEndpointResult;
```

 **Kode** 

```
HashMap<String, List<String>> customAttributes = new HashMap<>();
List<String> favoriteTeams = new ArrayList<>();
favoriteTeams.add("Lakers");
favoriteTeams.add("Warriors");
customAttributes.put("team", favoriteTeams);


EndpointDemographic demographic = new EndpointDemographic()
        .withAppVersion("1.0")
        .withMake("apple")
        .withModel("iPhone")
        .withModelVersion("7")
        .withPlatform("ios")
        .withPlatformVersion("10.1.1")
        .withTimezone("America/Los_Angeles");

EndpointLocation location = new EndpointLocation()
        .withCity("Los Angeles")
        .withCountry("US")
        .withLatitude(34.0)
        .withLongitude(-118.2)
        .withPostalCode("90068")
        .withRegion("CA");

Map<String,Double> metrics = new HashMap<>();
metrics.put("health", 100.00);
metrics.put("luck", 75.00);

EndpointUser user = new EndpointUser()
        .withUserId(UUID.randomUUID().toString());

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); // Quoted "Z" to indicate UTC, no timezone offset
String nowAsISO = df.format(new Date());

EndpointRequest endpointRequest = new EndpointRequest()
        .withAddress(UUID.randomUUID().toString())
        .withAttributes(customAttributes)
        .withChannelType("APNS")
        .withDemographic(demographic)
        .withEffectiveDate(nowAsISO)
        .withLocation(location)
        .withMetrics(metrics)
        .withOptOut("NONE")
        .withRequestId(UUID.randomUUID().toString())
        .withUser(user);
```

Kemudian buat [UpdateEndpointRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/UpdateEndpointRequest.html)objek dengan EndpointRequest objek itu. Akhirnya, berikan UpdateEndpointRequest objek ke AmazonPinpointClient `updateEndpoint` metode ini.

 **Kode** 

```
UpdateEndpointRequest updateEndpointRequest = new UpdateEndpointRequest()
        .withApplicationId(appId)
        .withEndpointId(endpointId)
        .withEndpointRequest(endpointRequest);

UpdateEndpointResult updateEndpointResponse = client.updateEndpoint(updateEndpointRequest);
System.out.println("Update Endpoint Response: " + updateEndpointResponse.getMessageBody());
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/pinpoint/src/main/java/com/example/pinpoint/CreateEndpoint.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Menambahkan Endpoint](https://docs.aws.amazon.com/pinpoint/latest/developerguide/endpoints.html) di Panduan Amazon Pinpoint Pengembang
+  [Titik akhir](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-endpoint.html) dalam Referensi Amazon Pinpoint API

# Membuat Segmen di Amazon Pinpoint
<a name="examples-pinpoint-create-segment"></a>

Segmen pengguna mewakili subset pengguna Anda yang didasarkan pada karakteristik bersama, seperti seberapa baru pengguna membuka aplikasi Anda atau perangkat mana yang mereka gunakan. Contoh berikut menunjukkan bagaimana mendefinisikan segmen pengguna.

## Buat Segmen
<a name="create-a-segment"></a>

Buat segmen baru Amazon Pinpoint dengan mendefinisikan dimensi segmen dalam suatu [SegmentDimensions](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/SegmentDimensions.html)objek.

 **Impor** 

```
import com.amazonaws.services.pinpoint.AmazonPinpoint;
import com.amazonaws.services.pinpoint.AmazonPinpointClientBuilder;
import com.amazonaws.services.pinpoint.model.CreateSegmentRequest;
import com.amazonaws.services.pinpoint.model.CreateSegmentResult;
import com.amazonaws.services.pinpoint.model.AttributeDimension;
import com.amazonaws.services.pinpoint.model.AttributeType;
import com.amazonaws.services.pinpoint.model.RecencyDimension;
import com.amazonaws.services.pinpoint.model.SegmentBehaviors;
import com.amazonaws.services.pinpoint.model.SegmentDemographics;
import com.amazonaws.services.pinpoint.model.SegmentDimensions;
import com.amazonaws.services.pinpoint.model.SegmentLocation;
import com.amazonaws.services.pinpoint.model.SegmentResponse;
import com.amazonaws.services.pinpoint.model.WriteSegmentRequest;
```

 **Kode** 

```
Pinpoint pinpoint = AmazonPinpointClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
Map<String, AttributeDimension> segmentAttributes = new HashMap<>();
segmentAttributes.put("Team", new AttributeDimension().withAttributeType(AttributeType.INCLUSIVE).withValues("Lakers"));

SegmentBehaviors segmentBehaviors = new SegmentBehaviors();
SegmentDemographics segmentDemographics = new SegmentDemographics();
SegmentLocation segmentLocation = new SegmentLocation();

RecencyDimension recencyDimension = new RecencyDimension();
recencyDimension.withDuration("DAY_30").withRecencyType("ACTIVE");
segmentBehaviors.setRecency(recencyDimension);

SegmentDimensions dimensions = new SegmentDimensions()
        .withAttributes(segmentAttributes)
        .withBehavior(segmentBehaviors)
        .withDemographic(segmentDemographics)
        .withLocation(segmentLocation);
```

Selanjutnya mengatur [SegmentDimensions](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/SegmentDimensions.html)objek dalam a [WriteSegmentRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/WriteSegmentRequest.html), yang pada gilirannya digunakan untuk membuat [CreateSegmentRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/CreateSegmentRequest.html)objek. Kemudian berikan CreateSegmentRequest objek ke `createSegment` metode AmazonPinpointClient ini.

 **Kode** 

```
WriteSegmentRequest writeSegmentRequest = new WriteSegmentRequest()
        .withName("MySegment").withDimensions(dimensions);

CreateSegmentRequest createSegmentRequest = new CreateSegmentRequest()
        .withApplicationId(appId).withWriteSegmentRequest(writeSegmentRequest);

CreateSegmentResult createSegmentResult = client.createSegment(createSegmentRequest);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/pinpoint/src/main/java/com/example/pinpoint/CreateSegment.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Amazon Pinpoint Segmen](https://docs.aws.amazon.com/pinpoint/latest/userguide/segments.html) dalam Panduan Amazon Pinpoint Pengguna
+  [Membuat Segmen](https://docs.aws.amazon.com/pinpoint/latest/developerguide/segments.html) di Panduan Amazon Pinpoint Pengembang
+  [Segmen](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-segments.html) dalam Referensi Amazon Pinpoint API
+  [Segmen](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-segment.html) dalam Referensi Amazon Pinpoint API

# Membuat Kampanye di Amazon Pinpoint
<a name="examples-pinpoint-create-campaign"></a>

Anda dapat menggunakan kampanye untuk membantu meningkatkan interaksi antara aplikasi dan pengguna. Anda dapat membuat kampanye untuk menjangkau segmen tertentu dari pengguna Anda dengan pesan yang disesuaikan atau promosi khusus. Contoh ini menunjukkan cara membuat kampanye standar baru yang mengirimkan pemberitahuan push kustom ke segmen tertentu.

## Buat Kampanye
<a name="create-a-campaign"></a>

Sebelum membuat kampanye baru, Anda harus menentukan [Jadwal](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/Schedule.html) dan [Pesan](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/Message.html) dan menetapkan nilai-nilai ini dalam [WriteCampaignRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/WriteCampaignRequest.html)objek.

 **Impor** 

```
import com.amazonaws.services.pinpoint.AmazonPinpoint;
import com.amazonaws.services.pinpoint.AmazonPinpointClientBuilder;
import com.amazonaws.services.pinpoint.model.CreateCampaignRequest;
import com.amazonaws.services.pinpoint.model.CreateCampaignResult;
import com.amazonaws.services.pinpoint.model.Action;
import com.amazonaws.services.pinpoint.model.CampaignResponse;
import com.amazonaws.services.pinpoint.model.Message;
import com.amazonaws.services.pinpoint.model.MessageConfiguration;
import com.amazonaws.services.pinpoint.model.Schedule;
import com.amazonaws.services.pinpoint.model.WriteCampaignRequest;
```

 **Kode** 

```
Schedule schedule = new Schedule()
        .withStartTime("IMMEDIATE");

Message defaultMessage = new Message()
        .withAction(Action.OPEN_APP)
        .withBody("My message body.")
        .withTitle("My message title.");

MessageConfiguration messageConfiguration = new MessageConfiguration()
        .withDefaultMessage(defaultMessage);

WriteCampaignRequest request = new WriteCampaignRequest()
        .withDescription("My description.")
        .withSchedule(schedule)
        .withSegmentId(segmentId)
        .withName("MyCampaign")
        .withMessageConfiguration(messageConfiguration);
```

Kemudian buat kampanye baru Amazon Pinpoint [WriteCampaignRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/WriteCampaignRequest.html)dengan menyediakan konfigurasi kampanye ke [CreateCampaignRequest](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/pinpoint/model/CreateCampaignRequest.html)objek. Akhirnya, berikan CreateCampaignRequest objek ke AmazonPinpointClient `createCampaign` metode ini.

 **Kode** 

```
CreateCampaignRequest createCampaignRequest = new CreateCampaignRequest()
        .withApplicationId(appId).withWriteCampaignRequest(request);

CreateCampaignResult result = client.createCampaign(createCampaignRequest);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/pinpoint/src/main/java/com/example/pinpoint/CreateApp.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Amazon Pinpoint Kampanye](https://docs.aws.amazon.com/pinpoint/latest/userguide/campaigns.html) di Panduan Amazon Pinpoint Pengguna
+  [Membuat Kampanye](https://docs.aws.amazon.com/pinpoint/latest/developerguide/campaigns.html) di Panduan Amazon Pinpoint Pengembang
+  [Kampanye](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-campaigns.html) di Referensi Amazon Pinpoint API
+  [Kampanye](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-campaign.html) di Referensi Amazon Pinpoint API
+  [Aktivitas Kampanye](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-campaign-activities.html) di Referensi Amazon Pinpoint API
+  [Versi Kampanye](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-campaign-versions.html) di Referensi Amazon Pinpoint API
+  [Versi Kampanye](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-campaign-version.html) di Referensi Amazon Pinpoint API

# Memperbarui Saluran di Amazon Pinpoint
<a name="examples-pinpoint-update-channel"></a>

Saluran menentukan jenis platform tempat Anda dapat mengirimkan pesan. Contoh ini menunjukkan cara menggunakan APNs saluran untuk mengirim pesan.

## Memperbarui Saluran
<a name="update-a-channel"></a>

Aktifkan saluran Amazon Pinpoint dengan memberikan ID aplikasi dan objek permintaan dari jenis saluran yang ingin Anda perbarui. Contoh ini memperbarui APNs saluran, yang memerlukan objek [APNSChannelRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/APNSChannelRequest.html). Atur ini di [UpdateApnsChannelRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/pinpoint/model/UpdateApnsChannelRequest.html)dan berikan objek AmazonPinpointClient itu ke `updateApnsChannel` metode ini.

 **Impor** 

```
import com.amazonaws.services.pinpoint.AmazonPinpoint;
import com.amazonaws.services.pinpoint.AmazonPinpointClientBuilder;
import com.amazonaws.services.pinpoint.model.APNSChannelRequest;
import com.amazonaws.services.pinpoint.model.APNSChannelResponse;
import com.amazonaws.services.pinpoint.model.GetApnsChannelRequest;
import com.amazonaws.services.pinpoint.model.GetApnsChannelResult;
import com.amazonaws.services.pinpoint.model.UpdateApnsChannelRequest;
import com.amazonaws.services.pinpoint.model.UpdateApnsChannelResult;
```

 **Kode** 

```
APNSChannelRequest request = new APNSChannelRequest()
		.withEnabled(enabled);

UpdateApnsChannelRequest updateRequest = new UpdateApnsChannelRequest()
		.withAPNSChannelRequest(request)
		.withApplicationId(appId);
UpdateApnsChannelResult result = client.updateApnsChannel(updateRequest);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/pinpoint/src/main/java/com/example/pinpoint/UpdateChannel.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Amazon Pinpoint Saluran](https://docs.aws.amazon.com/pinpoint/latest/userguide/channels.html) dalam Panduan Amazon Pinpoint Pengguna
+  [Saluran ADM](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-adm-channel.html) di Referensi Amazon Pinpoint API
+  [APNs Saluran](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-apns-channel.html) di Referensi Amazon Pinpoint API
+  [APNs Saluran Kotak Pasir](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-apns-sandbox-channel.html) di Referensi Amazon Pinpoint API
+  [APNs Saluran VoIP di Referensi](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-apns-voip-channel.html) API Amazon Pinpoint 
+  [APNs Saluran Kotak Pasir VoIP](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-apns-voip-sandbox-channel.html) di Referensi API Amazon Pinpoint 
+  [Saluran Baidu](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-baidu-channel.html) di Referensi Amazon Pinpoint API
+  [Saluran Email](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-email-channel.html) di Referensi Amazon Pinpoint API
+  [Saluran GCM](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-gcm-channel.html) di Referensi Amazon Pinpoint API
+  [Saluran SMS](https://docs.aws.amazon.com/pinpoint/latest/apireference/rest-api-sms-channel.html) di Referensi Amazon Pinpoint API

# Amazon S3 Contoh Menggunakan AWS SDK untuk Java
<a name="examples-s3"></a>

Bagian ini memberikan contoh pemrograman [Amazon S3](https://aws.amazon.com/s3/)menggunakan [AWS SDK untuk Java](https://aws.amazon.com/sdk-for-java/).

**catatan**  
Contohnya hanya mencakup kode yang diperlukan untuk mendemonstrasikan setiap teknik. [Kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java). Dari sana, Anda dapat mengunduh satu file sumber atau mengkloning repositori secara lokal untuk mendapatkan semua contoh untuk dibangun dan dijalankan.

**Topics**
+ [Membuat, Membuat Daftar, dan Menghapus Bucket Amazon S3](examples-s3-buckets.md)
+ [Melakukan Operasi pada Amazon S3 Objek](examples-s3-objects.md)
+ [Mengelola Izin Amazon S3 Akses untuk Bucket dan Objek](examples-s3-access-permissions.md)
+ [Mengelola Akses ke Amazon S3 Bucket Menggunakan Kebijakan Bucket](examples-s3-bucket-policies.md)
+ [Menggunakan TransferManager untuk Amazon S3 Operasi](examples-s3-transfermanager.md)
+ [Mengkonfigurasi Amazon S3 Bucket sebagai Situs Web](examples-s3-website-configuration.md)
+ [Gunakan Amazon S3 enkripsi sisi klien](examples-crypto.md)

# Membuat, Membuat Daftar, dan Menghapus Bucket Amazon S3
<a name="examples-s3-buckets"></a>

Setiap objek (file) di Amazon S3 harus berada dalam *ember*, yang mewakili koleksi (wadah) objek. Setiap ember dikenal dengan *kunci* (nama), yang harus unik. Untuk informasi terperinci tentang bucket dan konfigurasinya, lihat [Bekerja dengan Amazon S3 Bucket](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html) di Amazon Simple Storage Service Panduan Pengguna.

**catatan**  
Praktik Terbaik  
Kami menyarankan Anda mengaktifkan aturan [AbortIncompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html)siklus hidup pada bucket Anda Amazon S3 .  
Aturan ini mengarahkan Amazon S3 untuk membatalkan unggahan multipart yang tidak selesai dalam jumlah hari tertentu setelah dimulai. Ketika batas waktu yang ditetapkan terlampaui, Amazon S3 batalkan unggahan dan kemudian menghapus data unggahan yang tidak lengkap.  
Untuk informasi selengkapnya, lihat [Konfigurasi Siklus Hidup untuk Bucket dengan Pembuatan Versi di Panduan Pengguna](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-bucket-with-versioning.html). Amazon S3 

**catatan**  
Contoh kode ini mengasumsikan bahwa Anda memahami materi dalam [Menggunakan AWS SDK untuk Java](basics.md) dan telah mengonfigurasi AWS kredensi default menggunakan informasi di [Siapkan AWS Kredensial dan](setup-credentials.md) Wilayah untuk Pengembangan.

## Buat Bucket
<a name="create-bucket"></a>

Gunakan metode klien AmazonS3. `createBucket` [Bucket](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/Bucket.html) baru dikembalikan. `createBucket`Metode ini akan memunculkan pengecualian jika bucket sudah ada.

**catatan**  
Untuk memeriksa apakah bucket sudah ada sebelum mencoba membuatnya dengan nama yang sama, panggil `doesBucketExist` metode tersebut. Ini akan kembali `true` jika ember ada, dan `false` sebaliknya.

 **Impor** 

```
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.Bucket;

import java.util.List;
```

 **Kode** 

```
if (s3.doesBucketExistV2(bucket_name)) {
    System.out.format("Bucket %s already exists.\n", bucket_name);
    b = getBucket(bucket_name);
} else {
    try {
        b = s3.createBucket(bucket_name);
    } catch (AmazonS3Exception e) {
        System.err.println(e.getErrorMessage());
    }
}
return b;
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/CreateBucket.java) di GitHub.

## Buat Daftar Bucket
<a name="list-buckets"></a>

Gunakan metode klien AmazonS3. `listBucket` Jika berhasil, daftar [Bucket](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/Bucket.html) dikembalikan.

 **Impor** 

```
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;

import java.util.List;
```

 **Kode** 

```
List<Bucket> buckets = s3.listBuckets();
System.out.println("Your {S3} buckets are:");
for (Bucket b : buckets) {
    System.out.println("* " + b.getName());
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/ListBuckets.java) di GitHub.

## Hapus Bucket
<a name="delete-bucket"></a>

Sebelum Anda dapat menghapus Amazon S3 ember, Anda harus memastikan bahwa ember kosong atau kesalahan akan terjadi. Jika Anda memiliki [bucket berversi](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html), Anda juga harus menghapus objek berversi apa pun yang terkait dengan bucket.

**catatan**  
[Contoh lengkap](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucket.java) mencakup masing-masing langkah ini secara berurutan, memberikan solusi lengkap untuk menghapus Amazon S3 ember dan isinya.

**Topics**
+ [Hapus Objek dari Bucket Tidak Berversi Sebelum Menghapusnya](#remove-objects-from-an-unversioned-bucket-before-deleting-it)
+ [Hapus Objek dari Bucket Berversi Sebelum Menghapusnya](#remove-objects-from-a-versioned-bucket-before-deleting-it)
+ [Hapus Ember Kosong](#delete-an-empty-bucket)

### Hapus Objek dari Bucket Tidak Berversi Sebelum Menghapusnya
<a name="remove-objects-from-an-unversioned-bucket-before-deleting-it"></a>

Gunakan `listObjects` metode klien AmazonS3 untuk mengambil daftar objek dan `deleteObject` menghapus masing-masing objek.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.util.Iterator;
```

 **Kode** 

```
System.out.println(" - removing objects from bucket");
ObjectListing object_listing = s3.listObjects(bucket_name);
while (true) {
    for (Iterator<?> iterator =
         object_listing.getObjectSummaries().iterator();
         iterator.hasNext(); ) {
        S3ObjectSummary summary = (S3ObjectSummary) iterator.next();
        s3.deleteObject(bucket_name, summary.getKey());
    }

    // more object_listing to retrieve?
    if (object_listing.isTruncated()) {
        object_listing = s3.listNextBatchOfObjects(object_listing);
    } else {
        break;
    }
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucket.java) di GitHub.

### Hapus Objek dari Bucket Berversi Sebelum Menghapusnya
<a name="remove-objects-from-a-versioned-bucket-before-deleting-it"></a>

Jika Anda menggunakan [bucket berversi](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html), Anda juga perlu menghapus semua versi objek yang tersimpan di bucket sebelum bucket dapat dihapus.

Menggunakan pola yang mirip dengan yang digunakan saat menghapus objek di dalam ember, hapus objek berversi dengan menggunakan `listVersions` metode klien AmazonS3 untuk mencantumkan objek berversi apa pun, dan kemudian menghapus masing-masing objek. `deleteVersion`

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.util.Iterator;
```

 **Kode** 

```
System.out.println(" - removing versions from bucket");
VersionListing version_listing = s3.listVersions(
        new ListVersionsRequest().withBucketName(bucket_name));
while (true) {
    for (Iterator<?> iterator =
         version_listing.getVersionSummaries().iterator();
         iterator.hasNext(); ) {
        S3VersionSummary vs = (S3VersionSummary) iterator.next();
        s3.deleteVersion(
                bucket_name, vs.getKey(), vs.getVersionId());
    }

    if (version_listing.isTruncated()) {
        version_listing = s3.listNextBatchOfVersions(
                version_listing);
    } else {
        break;
    }
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucket.java) di GitHub.

### Hapus Ember Kosong
<a name="delete-an-empty-bucket"></a>

Setelah Anda menghapus objek dari bucket (termasuk objek berversi apa pun), Anda dapat menghapus bucket itu sendiri dengan menggunakan metode klien AmazonS3. `deleteBucket`

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.util.Iterator;
```

 **Kode** 

```
System.out.println(" OK, bucket ready to delete!");
s3.deleteBucket(bucket_name);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucket.java) di GitHub.

# Melakukan Operasi pada Amazon S3 Objek
<a name="examples-s3-objects"></a>

 Amazon S3 Objek mewakili *file* atau kumpulan data. Setiap benda harus berada di dalam [ember](examples-s3-buckets.md).

**catatan**  
Contoh kode ini mengasumsikan bahwa Anda memahami materi dalam [Menggunakan AWS SDK untuk Java](basics.md) dan telah mengonfigurasi AWS kredensyal default menggunakan informasi di [Siapkan AWS Kredensyal dan](setup-credentials.md) Wilayah untuk Pengembangan.

**Topics**
+ [Meng-unggah Objek](#upload-object)
+ [Daftar Objek](#list-objects)
+ [Mengunduh Objek](#download-object)
+ [Salin, Pindahkan, atau Ganti Nama Objek](#copy-object)
+ [Menghapus Objek](#delete-object)
+ [Hapus Beberapa Objek Sekaligus](#delete-objects)

## Meng-unggah Objek
<a name="upload-object"></a>

Gunakan `putObject` metode klien AmazonS3, berikan nama bucket, nama kunci, dan file untuk diunggah. *Bucket harus ada, atau kesalahan akan terjadi*.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
```

 **Kode** 

```
System.out.format("Uploading %s to S3 bucket %s...\n", file_path, bucket_name);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    s3.putObject(bucket_name, key_name, new File(file_path));
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/PutObject.java) di GitHub.

## Daftar Objek
<a name="list-objects"></a>

Untuk mendapatkan daftar objek dalam bucket, gunakan `listObjects` metode klien AmazonS3, yang menyediakan nama bucket.

`listObjects`Metode mengembalikan [ObjectListing](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/ObjectListing.html)objek yang memberikan informasi tentang objek dalam ember. Untuk membuat daftar nama objek (kunci), gunakan `getObjectSummaries` metode untuk mendapatkan Daftar ObjectSummary objek [S3](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/S3ObjectSummary.html), yang masing-masing mewakili satu objek dalam ember. Kemudian panggil `getKey` metodenya untuk mengambil nama objek.

 **Impor** 

```
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsV2Result;
import com.amazonaws.services.s3.model.S3ObjectSummary;
```

 **Kode** 

```
System.out.format("Objects in S3 bucket %s:\n", bucket_name);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
ListObjectsV2Result result = s3.listObjectsV2(bucket_name);
List<S3ObjectSummary> objects = result.getObjectSummaries();
for (S3ObjectSummary os : objects) {
    System.out.println("* " + os.getKey());
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/ListObjects.java) di GitHub.

## Mengunduh Objek
<a name="download-object"></a>

Gunakan `getObject` metode klien AmazonS3, berikan nama bucket dan objek untuk diunduh. Jika berhasil, metode mengembalikan [S3Object](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/S3Object.html). *Bucket dan kunci objek yang ditentukan harus ada, atau kesalahan akan terjadi*.

Anda bisa mendapatkan konten objek dengan memanggil `getObjectContent``S3Object`. Ini mengembalikan [S3 ObjectInputStream](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/S3ObjectInputStream.html) yang berperilaku sebagai objek Java `InputStream` standar.

Contoh berikut mengunduh objek dari S3 dan menyimpan isinya ke file (menggunakan nama yang sama dengan kunci objek).

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;

import java.io.File;
```

 **Kode** 

```
System.out.format("Downloading %s from S3 bucket %s...\n", key_name, bucket_name);
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    S3Object o = s3.getObject(bucket_name, key_name);
    S3ObjectInputStream s3is = o.getObjectContent();
    FileOutputStream fos = new FileOutputStream(new File(key_name));
    byte[] read_buf = new byte[1024];
    int read_len = 0;
    while ((read_len = s3is.read(read_buf)) > 0) {
        fos.write(read_buf, 0, read_len);
    }
    s3is.close();
    fos.close();
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
} catch (FileNotFoundException e) {
    System.err.println(e.getMessage());
    System.exit(1);
} catch (IOException e) {
    System.err.println(e.getMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/GetObject.java) di GitHub.

## Salin, Pindahkan, atau Ganti Nama Objek
<a name="copy-object"></a>

Anda dapat menyalin objek dari satu bucket ke bucket lainnya dengan menggunakan metode klien AmazonS3. `copyObject` Dibutuhkan nama bucket untuk disalin, objek yang akan disalin, dan nama bucket tujuan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
```

 **Kode** 

```
try {
    s3.copyObject(from_bucket, object_key, to_bucket, object_key);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
System.out.println("Done!");
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/CopyObject.java) di GitHub.

**catatan**  
Anda dapat menggunakan `copyObject` dengan [DeleteObject](#delete-object) **untuk** memindahkan **atau** mengganti nama objek, dengan terlebih dahulu menyalin objek ke nama baru (Anda dapat menggunakan bucket yang sama dengan sumber dan tujuan) dan kemudian menghapus objek dari lokasi lamanya.

## Menghapus Objek
<a name="delete-object"></a>

Gunakan `deleteObject` metode klien AmazonS3, berikan nama bucket dan objek yang akan dihapus. *Bucket dan kunci objek yang ditentukan harus ada, atau kesalahan akan terjadi*.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
```

 **Kode** 

```
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    s3.deleteObject(bucket_name, object_key);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteObject.java) di GitHub.

## Hapus Beberapa Objek Sekaligus
<a name="delete-objects"></a>

Menggunakan `deleteObjects` metode klien AmazonS3, Anda dapat menghapus beberapa objek dari bucket yang sama dengan meneruskan nama mereka ke metode link:sdk-for-java/v1/reference/com/amazonaws/services/s3/model/DeleteObjectsRequest.html. ``

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
```

 **Kode** 

```
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    DeleteObjectsRequest dor = new DeleteObjectsRequest(bucket_name)
            .withKeys(object_keys);
    s3.deleteObjects(dor);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteObjects.java) di GitHub.

# Mengelola Izin Amazon S3 Akses untuk Bucket dan Objek
<a name="examples-s3-access-permissions"></a>

Anda dapat menggunakan daftar kontrol akses (ACLs) untuk Amazon S3 bucket dan objek untuk kontrol halus atas sumber daya Anda. Amazon S3 

**catatan**  
Contoh kode ini mengasumsikan bahwa Anda memahami materi dalam [Menggunakan AWS SDK untuk Java](basics.md) dan telah mengonfigurasi AWS kredensi default menggunakan informasi di [Siapkan AWS Kredensial dan](setup-credentials.md) Wilayah untuk Pengembangan.

## Dapatkan Daftar Kontrol Akses untuk Bucket
<a name="get-the-access-control-list-for-a-bucket"></a>

Untuk mendapatkan ACL saat ini untuk bucket, panggil `getBucketAcl` metode AmazonS3, berikan nama *bucket* ke kueri. Metode ini mengembalikan sebuah [AccessControlList](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/AccessControlList.html)objek. Untuk mendapatkan setiap hibah akses dalam daftar, panggil `getGrantsAsList` metodenya, yang akan mengembalikan daftar Java standar objek [Grant](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/Grant.html).

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AccessControlList;
import com.amazonaws.services.s3.model.Grant;
```

 **Kode** 

```
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    AccessControlList acl = s3.getBucketAcl(bucket_name);
    List<Grant> grants = acl.getGrantsAsList();
    for (Grant grant : grants) {
        System.out.format("  %s: %s\n", grant.getGrantee().getIdentifier(),
                grant.getPermission().toString());
    }
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/GetAcl.java) di GitHub.

## Mengatur Daftar Kontrol Akses untuk Bucket
<a name="set-the-access-control-list-for-a-bucket"></a>

Untuk menambahkan atau memodifikasi izin ke ACL untuk bucket, panggil metode AmazonS3. `setBucketAcl` Dibutuhkan [AccessControlList](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/AccessControlList.html)objek yang berisi daftar penerima hibah dan tingkat akses untuk ditetapkan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AccessControlList;
import com.amazonaws.services.s3.model.EmailAddressGrantee;
```

 **Kode** 

```
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    // get the current ACL
    AccessControlList acl = s3.getBucketAcl(bucket_name);
    // set access for the grantee
    EmailAddressGrantee grantee = new EmailAddressGrantee(email);
    Permission permission = Permission.valueOf(access);
    acl.grantPermission(grantee, permission);
    s3.setBucketAcl(bucket_name, acl);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

**catatan**  
Anda dapat memberikan pengenal unik penerima hibah secara langsung menggunakan kelas Penerima, atau menggunakan [EmailAddressGrantee](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/EmailAddressGrantee.html)kelas untuk mengatur [penerima hibah](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/Grantee.html) melalui email, seperti yang telah kita lakukan di sini.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/SetAcl.java) di GitHub.

## Dapatkan Daftar Kontrol Akses untuk Objek
<a name="get-the-access-control-list-for-an-object"></a>

Untuk mendapatkan ACL saat ini untuk suatu objek, panggil `getObjectAcl` metode AmazonS3, berikan *nama bucket dan nama* *objek* ke kueri. Seperti`getBucketAcl`, metode ini mengembalikan [AccessControlList](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/AccessControlList.html)objek yang dapat Anda gunakan untuk memeriksa setiap [Grant](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/Grant.html).

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AccessControlList;
import com.amazonaws.services.s3.model.Grant;
```

 **Kode** 

```
try {
    AccessControlList acl = s3.getObjectAcl(bucket_name, object_key);
    List<Grant> grants = acl.getGrantsAsList();
    for (Grant grant : grants) {
        System.out.format("  %s: %s\n", grant.getGrantee().getIdentifier(),
                grant.getPermission().toString());
    }
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/GetAcl.java) di GitHub.

## Mengatur Daftar Kontrol Akses untuk Objek
<a name="set-the-access-control-list-for-an-object"></a>

Untuk menambahkan atau memodifikasi izin ke ACL untuk objek, panggil metode AmazonS3. `setObjectAcl` Dibutuhkan [AccessControlList](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/AccessControlList.html)objek yang berisi daftar penerima hibah dan tingkat akses untuk ditetapkan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AccessControlList;
import com.amazonaws.services.s3.model.EmailAddressGrantee;
```

 **Kode** 

```
    try {
        // get the current ACL
        AccessControlList acl = s3.getObjectAcl(bucket_name, object_key);
        // set access for the grantee
        EmailAddressGrantee grantee = new EmailAddressGrantee(email);
        Permission permission = Permission.valueOf(access);
        acl.grantPermission(grantee, permission);
        s3.setObjectAcl(bucket_name, object_key, acl);
    } catch (AmazonServiceException e) {
        System.err.println(e.getErrorMessage());
        System.exit(1);
    }
}
```

**catatan**  
Anda dapat memberikan pengenal unik penerima hibah secara langsung menggunakan kelas Penerima, atau menggunakan [EmailAddressGrantee](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/EmailAddressGrantee.html)kelas untuk mengatur [penerima hibah](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/Grantee.html) melalui email, seperti yang telah kita lakukan di sini.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/SetAcl.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [DAPATKAN Bucket acl](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETacl.html) di Referensi Amazon S3 API
+  [PUT Bucket acl](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTacl.html) di Referensi Amazon S3 API
+  [GET Object acl](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html) di Referensi Amazon S3 API
+  [PUT Object acl](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUTacl.html) di Referensi Amazon S3 API

# Mengelola Akses ke Amazon S3 Bucket Menggunakan Kebijakan Bucket
<a name="examples-s3-bucket-policies"></a>

Anda dapat menyetel, mendapatkan, atau menghapus *kebijakan bucket* untuk mengelola akses ke Amazon S3 bucket Anda.

## Menetapkan Kebijakan Bucket
<a name="set-s3-bucket-policy"></a>

Anda dapat menyetel kebijakan bucket untuk bucket S3 tertentu dengan:
+ Memanggil klien AmazonS3 `setBucketPolicy` dan menyediakannya [SetBucketPolicyRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/SetBucketPolicyRequest.html) 
+ Menyetel kebijakan secara langsung dengan menggunakan `setBucketPolicy` overload yang mengambil nama bucket dan teks kebijakan (dalam format JSON)

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.policy.Policy;
import com.amazonaws.auth.policy.Principal;
```

 **Kode** 

```
    s3.setBucketPolicy(bucket_name, policy_text);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

### Menggunakan Kelas Kebijakan untuk Menghasilkan atau Memvalidasi Kebijakan
<a name="use-s3-bucket-policy-class"></a>

Saat memberikan kebijakan bucket`setBucketPolicy`, Anda dapat melakukan hal berikut:
+ Tentukan kebijakan secara langsung sebagai string teks berformat JSON
+ Membangun kebijakan menggunakan class [Policy](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/auth/policy/Policy.html)

Dengan menggunakan `Policy` kelas, Anda tidak perlu khawatir tentang memformat string teks Anda dengan benar. Untuk mendapatkan teks kebijakan JSON dari `Policy` kelas, gunakan `toJson` metodenya.

 **Impor** 

```
import com.amazonaws.auth.policy.Resource;
import com.amazonaws.auth.policy.Statement;
import com.amazonaws.auth.policy.actions.S3Actions;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
```

 **Kode** 

```
        new Statement(Statement.Effect.Allow)
                .withPrincipals(Principal.AllUsers)
                .withActions(S3Actions.GetObject)
                .withResources(new Resource(
                        "{region-arn}s3:::" + bucket_name + "/*")));
return bucket_policy.toJson();
```

`Policy`Kelas juga menyediakan `fromJson` metode yang dapat mencoba untuk membangun kebijakan menggunakan string JSON passed-in. Metode memvalidasinya untuk memastikan bahwa teks dapat diubah menjadi struktur kebijakan yang valid, dan akan gagal dengan `IllegalArgumentException` jika teks kebijakan tidak valid.

```
Policy bucket_policy = null;
try {
    bucket_policy = Policy.fromJson(file_text.toString());
} catch (IllegalArgumentException e) {
    System.out.format("Invalid policy text in file: \"%s\"",
            policy_file);
    System.out.println(e.getMessage());
}
```

Anda dapat menggunakan teknik ini untuk mencegah kebijakan yang Anda baca dari file atau cara lain.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/SetBucketPolicy.java) di GitHub.

## Dapatkan Kebijakan Bucket
<a name="get-s3-bucket-policy"></a>

Untuk mengambil kebijakan Amazon S3 bucket, panggil `getBucketPolicy` metode klien AmazonS3, berikan nama bucket untuk mendapatkan kebijakan tersebut.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
```

 **Kode** 

```
  try {
      BucketPolicy bucket_policy = s3.getBucketPolicy(bucket_name);
      policy_text = bucket_policy.getPolicyText();
  } catch (AmazonServiceException e) {
      System.err.println(e.getErrorMessage());
      System.exit(1);
  }
```

Jika bucket bernama tidak ada, jika Anda tidak memiliki akses ke sana, atau jika tidak memiliki kebijakan bucket, maka akan `AmazonServiceException` dilemparkan.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/GetBucketPolicy.java) di GitHub.

## Menghapus Kebijakan Bucket
<a name="delete-s3-bucket-policy"></a>

Untuk menghapus kebijakan bucket, hubungi klien AmazonS3`deleteBucketPolicy`, berikan nama bucket.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
```

 **Kode** 

```
  try {
      s3.deleteBucketPolicy(bucket_name);
  } catch (AmazonServiceException e) {
      System.err.println(e.getErrorMessage());
      System.exit(1);
  }
```

Metode ini berhasil bahkan jika bucket belum memiliki kebijakan. Jika Anda menentukan nama bucket yang tidak ada atau jika Anda tidak memiliki akses ke bucket, maka akan `AmazonServiceException` ditampilkan.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteBucketPolicy.java) di GitHub.

## Info Selengkapnya
<a name="more-info"></a>
+  [Ikhtisar Bahasa Kebijakan Akses](https://docs.aws.amazon.com/AmazonS3/latest/dev/access-policy-language-overview.html) di Panduan Amazon Simple Storage Service Pengguna
+  [Contoh Kebijakan Bucket](https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html) di Panduan Amazon Simple Storage Service Pengguna

# Menggunakan TransferManager untuk Amazon S3 Operasi
<a name="examples-s3-transfermanager"></a>

Anda dapat menggunakan AWS SDK untuk Java TransferManager kelas untuk mentransfer file secara andal dari lingkungan lokal ke Amazon S3 dan untuk menyalin objek dari satu lokasi S3 ke lokasi lainnya. `TransferManager`bisa mendapatkan kemajuan transfer dan jeda atau melanjutkan unggahan dan unduhan.

**catatan**  
Praktik Terbaik  
Kami menyarankan Anda mengaktifkan aturan [AbortIncompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html)siklus hidup pada bucket Anda Amazon S3 .  
Aturan ini mengarahkan Amazon S3 untuk membatalkan unggahan multipart yang tidak selesai dalam jumlah hari tertentu setelah dimulai. Ketika batas waktu yang ditetapkan terlampaui, Amazon S3 batalkan unggahan dan kemudian menghapus data unggahan yang tidak lengkap.  
Untuk informasi selengkapnya, lihat [Konfigurasi Siklus Hidup untuk Bucket dengan Pembuatan Versi di Panduan Pengguna](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-bucket-with-versioning.html). Amazon S3 

**catatan**  
Contoh kode ini mengasumsikan bahwa Anda memahami materi dalam [Menggunakan AWS SDK untuk Java](basics.md) dan telah mengonfigurasi AWS kredensi default menggunakan informasi di [Siapkan AWS Kredensial dan](setup-credentials.md) Wilayah untuk Pengembangan.

## Unggah File dan Direktori
<a name="transfermanager-uploading"></a>

TransferManager dapat mengunggah file, daftar file, dan direktori ke Amazon S3 bucket apa pun yang telah Anda buat [sebelumnya](examples-s3-buckets.md#create-bucket).

**Topics**
+ [Unggah Satu File](#transfermanager-upload-file)
+ [Unggah Daftar File](#transfermanager-upload-file-list)
+ [Unggah Direktori](#transfermanager-upload-directory)

### Unggah Satu File
<a name="transfermanager-upload-file"></a>

`upload`Metode panggilan TransferManager, memberikan nama Amazon S3 bucket, nama kunci (objek), dan objek Java [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) standar yang mewakili file yang akan diunggah.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
```

 **Kode** 

```
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Upload xfer = xfer_mgr.upload(bucket_name, key_name, f);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    //  or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

`upload`Metode *segera* kembali, menyediakan `Upload` objek yang akan digunakan untuk memeriksa status transfer atau menunggu sampai selesai.

Lihat [Tunggu Transfer Selesai](#transfermanager-wait-for-completion) untuk informasi tentang penggunaan `waitForCompletion` agar berhasil menyelesaikan transfer sebelum `shutdownNow` metode panggilan TransferManager. Sambil menunggu transfer selesai, Anda dapat melakukan polling atau mendengarkan pembaruan tentang status dan kemajuannya. Lihat [Dapatkan Status Transfer dan Kemajuan](#transfermanager-get-status-and-progress) untuk informasi selengkapnya.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java) di GitHub.

### Unggah Daftar File
<a name="transfermanager-upload-file-list"></a>

Untuk mengunggah beberapa file dalam satu operasi, panggil TransferManager `uploadFileList` metode, berikan yang berikut:
+ Nama Amazon S3 ember
+ Sebuah *key prefix* untuk menambahkan ke nama-nama objek yang dibuat (jalur di dalam ember untuk menempatkan objek)
+ Sebuah objek [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) yang mewakili direktori relatif dari mana untuk membuat jalur file
+ Sebuah objek [List](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/List.html) yang berisi satu set objek [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) untuk meng-upload

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
```

 **Kode** 

```
ArrayList<File> files = new ArrayList<File>();
for (String path : file_paths) {
    files.add(new File(path));
}

TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    MultipleFileUpload xfer = xfer_mgr.uploadFileList(bucket_name,
            key_prefix, new File("."), files);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

Lihat [Tunggu Transfer Selesai](#transfermanager-wait-for-completion) untuk informasi tentang penggunaan `waitForCompletion` agar berhasil menyelesaikan transfer sebelum `shutdownNow` metode panggilan TransferManager. Sambil menunggu transfer selesai, Anda dapat melakukan polling atau mendengarkan pembaruan tentang status dan kemajuannya. Lihat [Dapatkan Status Transfer dan Kemajuan](#transfermanager-get-status-and-progress) untuk informasi selengkapnya.

[MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html)Objek yang dikembalikan oleh `uploadFileList` dapat digunakan untuk menanyakan status transfer atau kemajuan. Lihat [Polling Kemajuan Transfer Saat Ini](#transfermanager-get-progress-polling) dan [Dapatkan Kemajuan Transfer dengan a ProgressListener](#transfermanager-progress-listener) untuk informasi selengkapnya.

Anda juga dapat menggunakan `MultipleFileUpload` `getSubTransfers` metode ini untuk mendapatkan `Upload` objek individual untuk setiap file yang ditransfer. Untuk informasi selengkapnya, lihat [Mendapatkan Kemajuan Subtransfer](#transfermanager-get-subtransfer-progress).

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java) di GitHub.

### Unggah Direktori
<a name="transfermanager-upload-directory"></a>

Anda dapat menggunakan TransferManager `uploadDirectory` metode ini untuk mengunggah seluruh direktori file, dengan opsi untuk menyalin file di subdirektori secara rekursif. **Anda memberikan nama Amazon S3 bucket, key prefix S3, objek File [yang mewakili direktori lokal yang](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) akan disalin, dan `boolean` nilai yang menunjukkan apakah Anda ingin menyalin subdirektori secara rekursif (benar atau salah).**

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.MultipleFileUpload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
```

 **Kode** 

```
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    MultipleFileUpload xfer = xfer_mgr.uploadDirectory(bucket_name,
            key_prefix, new File(dir_path), recursive);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

Lihat [Tunggu Transfer Selesai](#transfermanager-wait-for-completion) untuk informasi tentang penggunaan `waitForCompletion` agar berhasil menyelesaikan transfer sebelum `shutdownNow` metode panggilan TransferManager. Sambil menunggu transfer selesai, Anda dapat melakukan polling atau mendengarkan pembaruan tentang status dan kemajuannya. Lihat [Dapatkan Status Transfer dan Kemajuan](#transfermanager-get-status-and-progress) untuk informasi selengkapnya.

[MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html)Objek yang dikembalikan oleh `uploadFileList` dapat digunakan untuk menanyakan status transfer atau kemajuan. Lihat [Polling Kemajuan Transfer Saat Ini](#transfermanager-get-progress-polling) dan [Dapatkan Kemajuan Transfer dengan a ProgressListener](#transfermanager-progress-listener) untuk informasi selengkapnya.

Anda juga dapat menggunakan `MultipleFileUpload` `getSubTransfers` metode ini untuk mendapatkan `Upload` objek individual untuk setiap file yang ditransfer. Untuk informasi selengkapnya, lihat [Mendapatkan Kemajuan Subtransfer](#transfermanager-get-subtransfer-progress).

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrUpload.java) di GitHub.

## Unduh File atau Direktori
<a name="transfermanager-downloading"></a>

Gunakan TransferManager kelas untuk mengunduh file tunggal (Amazon S3 objek) atau direktori (nama Amazon S3 bucket diikuti oleh awalan objek) dari Amazon S3.

**Topics**
+ [Unduh File Tunggal](#transfermanager-download-file)
+ [Unduh Direktori](#tranfermanager-download-directory)

### Unduh File Tunggal
<a name="transfermanager-download-file"></a>

Gunakan `download` metode ini, berikan nama Amazon S3 bucket yang berisi objek yang ingin Anda unduh, nama kunci (objek), dan objek [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) yang mewakili file yang akan dibuat di sistem lokal Anda. TransferManager

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.Download;
import com.amazonaws.services.s3.transfer.MultipleFileDownload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

import java.io.File;
```

 **Kode** 

```
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Download xfer = xfer_mgr.download(bucket_name, key_name, f);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

Lihat [Tunggu Transfer Selesai](#transfermanager-wait-for-completion) untuk informasi tentang penggunaan `waitForCompletion` agar berhasil menyelesaikan transfer sebelum `shutdownNow` metode panggilan TransferManager. Sambil menunggu transfer selesai, Anda dapat melakukan polling atau mendengarkan pembaruan tentang status dan kemajuannya. Lihat [Dapatkan Status Transfer dan Kemajuan](#transfermanager-get-status-and-progress) untuk informasi selengkapnya.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrDownload.java) di GitHub.

### Unduh Direktori
<a name="tranfermanager-download-directory"></a>

Untuk mengunduh sekumpulan file yang berbagi key prefix umum (analog dengan direktori pada sistem file) dari Amazon S3, gunakan metode ini. TransferManager `downloadDirectory` Metode ini mengambil nama Amazon S3 bucket yang berisi objek yang ingin Anda unduh, awalan objek yang dibagikan oleh semua objek, dan objek [File](https://docs.oracle.com/javase/8/docs/api/index.html?java/io/File.html) yang mewakili direktori untuk mengunduh file di sistem lokal Anda. Jika direktori bernama belum ada, itu akan dibuat.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.Download;
import com.amazonaws.services.s3.transfer.MultipleFileDownload;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

import java.io.File;
```

 **Kode** 

```
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();

try {
    MultipleFileDownload xfer = xfer_mgr.downloadDirectory(
            bucket_name, key_prefix, new File(dir_path));
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

Lihat [Tunggu Transfer Selesai](#transfermanager-wait-for-completion) untuk informasi tentang penggunaan `waitForCompletion` agar berhasil menyelesaikan transfer sebelum `shutdownNow` metode panggilan TransferManager. Sambil menunggu transfer selesai, Anda dapat melakukan polling atau mendengarkan pembaruan tentang status dan kemajuannya. Lihat [Dapatkan Status Transfer dan Kemajuan](#transfermanager-get-status-and-progress) untuk informasi selengkapnya.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrDownload.java) di GitHub.

## Menyalin objek
<a name="transfermanager-copy-object"></a>

Untuk menyalin objek dari satu bucket S3 ke bucket lainnya, gunakan TransferManager `copy` metode ini.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
```

 **Kode** 

```
System.out.println("Copying s3 object: " + from_key);
System.out.println("      from bucket: " + from_bucket);
System.out.println("     to s3 object: " + to_key);
System.out.println("        in bucket: " + to_bucket);

TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Copy xfer = xfer_mgr.copy(from_bucket, from_key, to_bucket, to_key);
    // loop with Transfer.isDone()
    XferMgrProgress.showTransferProgress(xfer);
    // or block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(xfer);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrCopy.java) di GitHub.

## Tunggu Transfer Selesai
<a name="transfermanager-wait-for-completion"></a>

Jika aplikasi Anda (atau thread) dapat memblokir hingga transfer selesai, Anda dapat menggunakan `waitForCompletion` metode antarmuka [Transfer](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Transfer.html) untuk memblokir hingga transfer selesai atau pengecualian terjadi.

```
try {
    xfer.waitForCompletion();
} catch (AmazonServiceException e) {
    System.err.println("Amazon service error: " + e.getMessage());
    System.exit(1);
} catch (AmazonClientException e) {
    System.err.println("Amazon client error: " + e.getMessage());
    System.exit(1);
} catch (InterruptedException e) {
    System.err.println("Transfer interrupted: " + e.getMessage());
    System.exit(1);
}
```

Anda mendapatkan kemajuan transfer jika Anda melakukan polling untuk acara *sebelum* menelepon`waitForCompletion`, menerapkan mekanisme polling pada utas terpisah, atau menerima pembaruan kemajuan secara asinkron menggunakan file. [ProgressListener](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressListener.html)

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java) di GitHub.

## Dapatkan Status Transfer dan Kemajuan
<a name="transfermanager-get-status-and-progress"></a>

Masing-masing kelas dikembalikan oleh TransferManager`upload*`,`download*`, dan `copy` metode mengembalikan instance dari salah satu kelas berikut, tergantung pada apakah itu operasi satu file atau beberapa file.


**​**  

| Kelas | Dikembalikan oleh | 
| --- | --- | 
|   [Salin](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Copy.html)   |   `copy`   | 
|   [Unduh](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Download.html)   |   `download`   | 
|   [MultipleFileDownload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileDownload.html)   |   `downloadDirectory`   | 
|   [Unggah](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Upload.html)   |   `upload`   | 
|   [MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html)   |   `uploadFileList`, `uploadDirectory`   | 

Semua kelas ini menerapkan antarmuka [Transfer](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Transfer.html). `Transfer`menyediakan metode yang berguna untuk mendapatkan kemajuan transfer, menjeda atau melanjutkan transfer, dan mendapatkan status transfer saat ini atau akhir.

**Topics**
+ [Polling Kemajuan Transfer Saat Ini](#transfermanager-get-progress-polling)
+ [Dapatkan Kemajuan Transfer dengan ProgressListener](#transfermanager-progress-listener)
+ [Dapatkan Kemajuan Subtransfer](#transfermanager-get-subtransfer-progress)

### Polling Kemajuan Transfer Saat Ini
<a name="transfermanager-get-progress-polling"></a>

Loop ini mencetak kemajuan transfer, memeriksa kemajuannya saat berjalan dan, ketika selesai, mencetak status akhirnya.

 **Impor** 

```
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.transfer.*;
import com.amazonaws.services.s3.transfer.Transfer.TransferState;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
```

 **Kode** 

```
// print the transfer's human-readable description
System.out.println(xfer.getDescription());
// print an empty progress bar...
printProgressBar(0.0);
// update the progress bar while the xfer is ongoing.
do {
    try {
        Thread.sleep(100);
    } catch (InterruptedException e) {
        return;
    }
    // Note: so_far and total aren't used, they're just for
    // documentation purposes.
    TransferProgress progress = xfer.getProgress();
    long so_far = progress.getBytesTransferred();
    long total = progress.getTotalBytesToTransfer();
    double pct = progress.getPercentTransferred();
    eraseProgressBar();
    printProgressBar(pct);
} while (xfer.isDone() == false);
// print the final state of the transfer.
TransferState xfer_state = xfer.getState();
System.out.println(": " + xfer_state);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java) di GitHub.

### Dapatkan Kemajuan Transfer dengan ProgressListener
<a name="transfermanager-progress-listener"></a>

Anda dapat melampirkan [ProgressListener](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressListener.html)ke transfer apa pun dengan menggunakan `addProgressListener` metode antarmuka [Transfer](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Transfer.html).

A hanya [ProgressListener](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressListener.html)membutuhkan satu metode`progressChanged`, yang mengambil [ProgressEvent](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/event/ProgressEvent.html)objek. Anda dapat menggunakan objek untuk mendapatkan total byte operasi dengan memanggil `getBytes` metodenya, dan jumlah byte yang ditransfer sejauh ini dengan memanggil. `getBytesTransferred`

 **Impor** 

```
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.transfer.*;
import com.amazonaws.services.s3.transfer.Transfer.TransferState;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
```

 **Kode** 

```
File f = new File(file_path);
TransferManager xfer_mgr = TransferManagerBuilder.standard().build();
try {
    Upload u = xfer_mgr.upload(bucket_name, key_name, f);
    // print an empty progress bar...
    printProgressBar(0.0);
    u.addProgressListener(new ProgressListener() {
        public void progressChanged(ProgressEvent e) {
            double pct = e.getBytesTransferred() * 100.0 / e.getBytes();
            eraseProgressBar();
            printProgressBar(pct);
        }
    });
    // block with Transfer.waitForCompletion()
    XferMgrProgress.waitForCompletion(u);
    // print the final state of the transfer.
    TransferState xfer_state = u.getState();
    System.out.println(": " + xfer_state);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
xfer_mgr.shutdownNow();
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java) di GitHub.

### Dapatkan Kemajuan Subtransfer
<a name="transfermanager-get-subtransfer-progress"></a>

[MultipleFileUpload](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/MultipleFileUpload.html)Kelas dapat mengembalikan informasi tentang subtransfernya dengan memanggil `getSubTransfers` metodenya. Ini mengembalikan [Koleksi](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Collection.html) objek [Unggah](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/transfer/Upload.html) yang tidak dapat dimodifikasi yang menyediakan status transfer individu dan kemajuan setiap sub-transfer.

 **Impor** 

```
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.services.s3.transfer.*;
import com.amazonaws.services.s3.transfer.Transfer.TransferState;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
```

 **Kode** 

```
Collection<? extends Upload> sub_xfers = new ArrayList<Upload>();
sub_xfers = multi_upload.getSubTransfers();

do {
    System.out.println("\nSubtransfer progress:\n");
    for (Upload u : sub_xfers) {
        System.out.println("  " + u.getDescription());
        if (u.isDone()) {
            TransferState xfer_state = u.getState();
            System.out.println("  " + xfer_state);
        } else {
            TransferProgress progress = u.getProgress();
            double pct = progress.getPercentTransferred();
            printProgressBar(pct);
            System.out.println();
        }
    }

    // wait a bit before the next update.
    try {
        Thread.sleep(200);
    } catch (InterruptedException e) {
        return;
    }
} while (multi_upload.isDone() == false);
// print the final state of the transfer.
TransferState xfer_state = multi_upload.getState();
System.out.println("\nMultipleFileUpload " + xfer_state);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/XferMgrProgress.java) di GitHub.

## Info Selengkapnya
<a name="transfermanager-see-also"></a>
+  [Kunci Objek](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html) di Panduan Amazon Simple Storage Service Pengguna

# Mengkonfigurasi Amazon S3 Bucket sebagai Situs Web
<a name="examples-s3-website-configuration"></a>

Anda dapat mengonfigurasi Amazon S3 bucket untuk berperilaku sebagai situs web. Untuk melakukan ini, Anda perlu mengatur konfigurasi situs webnya.

**catatan**  
Contoh kode ini mengasumsikan bahwa Anda memahami materi dalam [Menggunakan AWS SDK untuk Java](basics.md) dan telah mengonfigurasi AWS kredensi default menggunakan informasi di [Siapkan AWS Kredensial dan](setup-credentials.md) Wilayah untuk Pengembangan.

## Mengatur Konfigurasi Situs Web Bucket
<a name="set-a-bucket-s-website-configuration"></a>

Untuk mengatur konfigurasi situs web Amazon S3 bucket, panggil `setWebsiteConfiguration` metode AmazonS3 dengan nama bucket untuk menyetel konfigurasi, dan [BucketWebsiteConfiguration](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/BucketWebsiteConfiguration.html)objek yang berisi konfigurasi situs web bucket.

*Diperlukan* pengaturan dokumen indeks; semua parameter lainnya bersifat opsional.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketWebsiteConfiguration;
```

 **Kode** 

```
    String bucket_name, String index_doc, String error_doc) {
BucketWebsiteConfiguration website_config = null;

if (index_doc == null) {
    website_config = new BucketWebsiteConfiguration();
} else if (error_doc == null) {
    website_config = new BucketWebsiteConfiguration(index_doc);
} else {
    website_config = new BucketWebsiteConfiguration(index_doc, error_doc);
}

final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    s3.setBucketWebsiteConfiguration(bucket_name, website_config);
} catch (AmazonServiceException e) {
    System.out.format(
            "Failed to set website configuration for bucket '%s'!\n",
            bucket_name);
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
```

**catatan**  
Menyetel konfigurasi situs web tidak mengubah izin akses untuk bucket Anda. Untuk membuat file Anda terlihat di web, Anda juga perlu menetapkan *kebijakan bucket* yang memungkinkan akses baca publik ke file di bucket. Untuk informasi selengkapnya, lihat [Mengelola Akses ke Amazon S3 Bucket Menggunakan Kebijakan Bucket](examples-s3-bucket-policies.md).

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/SetWebsiteConfiguration.java) di GitHub.

## Dapatkan Konfigurasi Situs Web Bucket
<a name="get-a-bucket-s-website-configuration"></a>

Untuk mendapatkan konfigurasi situs web Amazon S3 bucket, panggil `getWebsiteConfiguration` metode AmazonS3 dengan nama bucket untuk mengambil konfigurasi.

Konfigurasi akan dikembalikan sebagai [BucketWebsiteConfiguration](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/BucketWebsiteConfiguration.html)objek. Jika tidak ada konfigurasi situs web untuk bucket, maka `null` akan dikembalikan.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketWebsiteConfiguration;
```

 **Kode** 

```
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    BucketWebsiteConfiguration config =
            s3.getBucketWebsiteConfiguration(bucket_name);
    if (config == null) {
        System.out.println("No website configuration found!");
    } else {
        System.out.format("Index document: %s\n",
                config.getIndexDocumentSuffix());
        System.out.format("Error document: %s\n",
                config.getErrorDocument());
    }
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.out.println("Failed to get website configuration!");
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/GetWebsiteConfiguration.java) di GitHub.

## Menghapus Konfigurasi Situs Web Bucket
<a name="delete-a-bucket-s-website-configuration"></a>

Untuk menghapus konfigurasi situs web Amazon S3 bucket, panggil `deleteWebsiteConfiguration` metode AmazonS3 dengan nama bucket untuk menghapus konfigurasi dari.

 **Impor** 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
```

 **Kode** 

```
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
try {
    s3.deleteBucketWebsiteConfiguration(bucket_name);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.out.println("Failed to delete website configuration!");
    System.exit(1);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/DeleteWebsiteConfiguration.java) di GitHub.

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Situs web PUT Bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html) di Referensi Amazon S3 API
+  [Dapatkan situs web Bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETwebsite.html) di Referensi Amazon S3 API
+  [HAPUS situs web Bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETEwebsite.html) di Referensi Amazon S3 API

# Gunakan Amazon S3 enkripsi sisi klien
<a name="examples-crypto"></a>

Mengenkripsi data menggunakan klien Amazon S3 enkripsi adalah salah satu cara Anda dapat memberikan lapisan perlindungan tambahan untuk informasi sensitif yang Anda simpan. Amazon S3 Contoh di bagian ini menunjukkan cara membuat dan mengkonfigurasi klien Amazon S3 enkripsi untuk aplikasi Anda.

Jika Anda baru mengenal kriptografi, lihat [Dasar-Dasar Kriptografi](https://docs.aws.amazon.com/kms/latest/developerguide/crypto-intro.html) di Panduan Pengembang AWS KMS untuk ikhtisar dasar istilah dan algoritma kriptografi. Untuk informasi tentang dukungan kriptografi di semua AWS SDKs, lihat [AWS Dukungan SDK untuk Enkripsi Amazon S3 Sisi Klien](https://docs.aws.amazon.com/general/latest/gr/aws_sdk_cryptography.html) di Referensi Umum. Amazon Web Services 

**catatan**  
Contoh kode ini mengasumsikan bahwa Anda memahami materi dalam [Menggunakan AWS SDK untuk Java](basics.md) dan telah mengonfigurasi AWS kredensi default menggunakan informasi di [Siapkan AWS Kredensial dan](setup-credentials.md) Wilayah untuk Pengembangan.

Jika Anda menggunakan versi 1.11.836 atau versi sebelumnya AWS SDK untuk Java, lihat [Migrasi Klien Amazon S3 Enkripsi untuk informasi tentang memigrasi](s3-encryption-migration.md) aplikasi Anda ke versi yang lebih baru. Jika Anda tidak dapat bermigrasi, lihat [contoh lengkap ini](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/S3Encrypt.java) di GitHub.

Jika tidak, jika Anda menggunakan versi 1.11.837 atau yang lebih baru AWS SDK untuk Java, jelajahi contoh topik yang tercantum di bawah ini untuk menggunakan Amazon S3 enkripsi sisi klien.

**Topics**
+ [Amazon S3 enkripsi sisi klien dengan kunci master klien](examples-crypto-masterkey.md)
+ [Amazon S3 enkripsi sisi klien dengan kunci terkelola AWS KMS](examples-crypto-kms.md)

# Amazon S3 enkripsi sisi klien dengan kunci master klien
<a name="examples-crypto-masterkey"></a>

Contoh berikut menggunakan kelas [AmazonS3 EncryptionClient V2Builder](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/AmazonS3EncryptionClientV2Builder.html) untuk membuat klien dengan enkripsi sisi Amazon S3 klien diaktifkan. Setelah diaktifkan, objek apa pun yang Anda unggah untuk Amazon S3 menggunakan klien ini akan dienkripsi. Objek apa pun yang Anda dapatkan dari Amazon S3 menggunakan klien ini akan didekripsi secara otomatis.

**catatan**  
Contoh berikut menunjukkan penggunaan enkripsi Amazon S3 sisi klien dengan kunci master klien yang dikelola pelanggan. Untuk mempelajari cara menggunakan enkripsi dengan kunci terkelola AWS KMS, lihat [enkripsi Amazon S3 sisi klien dengan kunci terkelola AWS KMS](examples-crypto-kms.md).

Anda dapat memilih dari dua mode enkripsi saat mengaktifkan Amazon S3 enkripsi sisi klien: otentikasi ketat atau diautentikasi. Bagian berikut menunjukkan cara mengaktifkan setiap jenis. Untuk mempelajari algoritma mana yang digunakan setiap mode, lihat [CryptoMode](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/CryptoMode.html)definisinya.

## Impor yang diperlukan
<a name="required-imports"></a>

Impor kelas berikut untuk contoh-contoh ini.

 **Impor** 

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3EncryptionClientV2Builder;
import com.amazonaws.services.s3.AmazonS3EncryptionV2;
import com.amazonaws.services.s3.model.CryptoConfigurationV2;
import com.amazonaws.services.s3.model.CryptoMode;
import com.amazonaws.services.s3.model.EncryptionMaterials;
import com.amazonaws.services.s3.model.StaticEncryptionMaterialsProvider;
```

## Enkripsi otentikasi yang ketat
<a name="strict-authenticated-encryption"></a>

Enkripsi otentikasi yang ketat adalah mode default jika tidak `CryptoMode` ditentukan.

Untuk mengaktifkan mode ini secara eksplisit, tentukan `StrictAuthenticatedEncryption` nilai dalam metode. `withCryptoConfiguration`

**catatan**  
Untuk menggunakan enkripsi otentikasi sisi klien, Anda harus menyertakan file [jar Bouncy Castle](https://www.bouncycastle.org/download/bouncy-castle-java/) terbaru di classpath aplikasi Anda.

 **Kode** 

```
AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.US_WEST_2)
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.StrictAuthenticatedEncryption)))
         .withEncryptionMaterialsProvider(new StaticEncryptionMaterialsProvider(new EncryptionMaterials(secretKey)))
         .build();

s3Encryption.putObject(bucket_name, ENCRYPTED_KEY2, "This is the 2nd content to encrypt");
```

## Mode enkripsi yang diautentikasi
<a name="authenticated-encryption-mode"></a>

Saat Anda menggunakan `AuthenticatedEncryption` mode, algoritma pembungkus kunci yang ditingkatkan diterapkan selama enkripsi. Saat mendekripsi dalam mode ini, algoritme dapat memverifikasi integritas objek yang didekripsi dan melempar pengecualian jika pemeriksaan gagal. Untuk detail selengkapnya tentang cara kerja enkripsi yang diautentikasi, lihat posting blog Enkripsi [Terautentikasi Amazon S3 Sisi Klien](https://aws.amazon.com/blogs/developer/amazon-s3-client-side-authenticated-encryption).

**catatan**  
Untuk menggunakan enkripsi otentikasi sisi klien, Anda harus menyertakan file [jar Bouncy Castle](https://www.bouncycastle.org/download/bouncy-castle-java/) terbaru di classpath aplikasi Anda.

Untuk mengaktifkan mode ini, tentukan `AuthenticatedEncryption` nilai dalam `withCryptoConfiguration` metode.

 **Kode** 

```
AmazonS3EncryptionV2 s3EncryptionClientV2 = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.DEFAULT_REGION)
         .withClientConfiguration(new ClientConfiguration())
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode(CryptoMode.AuthenticatedEncryption))
         .withEncryptionMaterialsProvider(new StaticEncryptionMaterialsProvider(new EncryptionMaterials(secretKey)))
         .build();

s3EncryptionClientV2.putObject(bucket_name, ENCRYPTED_KEY1, "This is the 1st content to encrypt");
```

# Amazon S3 enkripsi sisi klien dengan kunci terkelola AWS KMS
<a name="examples-crypto-kms"></a>

Contoh berikut menggunakan kelas [AmazonS3 EncryptionClient V2Builder](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/AmazonS3EncryptionClientV2Builder.html) untuk membuat klien dengan enkripsi sisi Amazon S3 klien diaktifkan. Setelah dikonfigurasi, objek apa pun yang Anda unggah untuk Amazon S3 menggunakan klien ini akan dienkripsi. Setiap objek yang Anda dapatkan dari Amazon S3 menggunakan klien ini secara otomatis didekripsi.

**catatan**  
Contoh berikut menunjukkan cara menggunakan enkripsi Amazon S3 sisi klien dengan kunci terkelola AWS KMS. Untuk mempelajari cara menggunakan enkripsi dengan kunci Anda sendiri, lihat [enkripsi Amazon S3 sisi klien dengan kunci master klien](examples-crypto-masterkey.md).

Anda dapat memilih dari dua mode enkripsi saat mengaktifkan Amazon S3 enkripsi sisi klien: otentikasi ketat atau diautentikasi. Bagian berikut menunjukkan cara mengaktifkan setiap jenis. Untuk mempelajari algoritma mana yang digunakan setiap mode, lihat [CryptoMode](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/CryptoMode.html)definisinya.

## Impor yang diperlukan
<a name="required-imports"></a>

Impor kelas berikut untuk contoh-contoh ini.

 **Impor** 

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.kms.AWSKMS;
import com.amazonaws.services.kms.AWSKMSClientBuilder;
import com.amazonaws.services.kms.model.GenerateDataKeyRequest;
import com.amazonaws.services.kms.model.GenerateDataKeyResult;
import com.amazonaws.services.s3.AmazonS3EncryptionClientV2Builder;
import com.amazonaws.services.s3.AmazonS3EncryptionV2;
import com.amazonaws.services.s3.model.CryptoConfigurationV2;
import com.amazonaws.services.s3.model.CryptoMode;
import com.amazonaws.services.s3.model.EncryptionMaterials;
import com.amazonaws.services.s3.model.KMSEncryptionMaterialsProvider;
```

## Enkripsi otentikasi yang ketat
<a name="strict-authenticated-encryption-kms"></a>

Enkripsi otentikasi ketat adalah mode default jika tidak `CryptoMode` ditentukan.

Untuk mengaktifkan mode ini secara eksplisit, tentukan `StrictAuthenticatedEncryption` nilai dalam metode. `withCryptoConfiguration`

**catatan**  
Untuk menggunakan enkripsi otentikasi sisi klien, Anda harus menyertakan file [jar Bouncy Castle](https://www.bouncycastle.org/download/bouncy-castle-java/) terbaru di classpath aplikasi Anda.

 **Kode** 

```
AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.US_WEST_2)
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.StrictAuthenticatedEncryption)))
         .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId))
         .build();

s3Encryption.putObject(bucket_name, ENCRYPTED_KEY3, "This is the 3rd content to encrypt with a key created in the {console}");
System.out.println(s3Encryption.getObjectAsString(bucket_name, ENCRYPTED_KEY3));
```

Panggil `putObject` metode pada klien Amazon S3 enkripsi untuk mengunggah objek.

 **Kode** 

```
s3Encryption.putObject(bucket_name, ENCRYPTED_KEY3, "This is the 3rd content to encrypt with a key created in the {console}");
```

Anda dapat mengambil objek menggunakan klien yang sama. Contoh ini memanggil `getObjectAsString` metode untuk mengambil string yang disimpan.

 **Kode** 

```
System.out.println(s3Encryption.getObjectAsString(bucket_name, ENCRYPTED_KEY3));
```

## Mode enkripsi yang diautentikasi
<a name="authenticated-encryption-kms"></a>

Saat Anda menggunakan `AuthenticatedEncryption` mode, algoritma pembungkus kunci yang ditingkatkan diterapkan selama enkripsi. Saat mendekripsi dalam mode ini, algoritme dapat memverifikasi integritas objek yang didekripsi dan melempar pengecualian jika pemeriksaan gagal. Untuk detail selengkapnya tentang cara kerja enkripsi yang diautentikasi, lihat posting blog Enkripsi [Terautentikasi Amazon S3 Sisi Klien](https://aws.amazon.com/blogs/developer/amazon-s3-client-side-authenticated-encryption).

**catatan**  
Untuk menggunakan enkripsi otentikasi sisi klien, Anda harus menyertakan file [jar Bouncy Castle](https://www.bouncycastle.org/download/bouncy-castle-java/) terbaru di classpath aplikasi Anda.

Untuk mengaktifkan mode ini, tentukan `AuthenticatedEncryption` nilai dalam `withCryptoConfiguration` metode.

 **Kode** 

```
AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.US_WEST_2)
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.AuthenticatedEncryption)))
         .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId))
         .build();
```

## Mengkonfigurasi klien AWS KMS
<a name="configure-kms"></a>

Klien Amazon S3 enkripsi membuat AWS KMS klien secara default, kecuali satu ditentukan secara eksplisit.

Untuk mengatur wilayah untuk klien yang dibuat secara otomatis ini, atur AWS KMS . `awsKmsRegion`

 **Kode** 

```
Region kmsRegion = Region.getRegion(Regions.AP_NORTHEAST_1);

AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
        .withRegion(Regions.US_WEST_2)
        .withCryptoConfiguration(new CryptoConfigurationV2().withAwsKmsRegion(kmsRegion))
        .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId))
        .build();
```

Atau, Anda dapat menggunakan AWS KMS klien Anda sendiri untuk menginisialisasi klien enkripsi.

 **Kode** 

```
AWSKMS kmsClient = AWSKMSClientBuilder.standard()
        .withRegion(Regions.US_WEST_2);
        .build();

AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
        .withRegion(Regions.US_WEST_2)
        .withKmsClient(kmsClient)
        .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.AuthenticatedEncryption)))
        .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId))
        .build();
```

# Amazon SQS Contoh Menggunakan AWS SDK untuk Java
<a name="examples-sqs"></a>

Bagian ini memberikan contoh pemrograman [Amazon SQS](https://aws.amazon.com/sqs/)menggunakan [AWS SDK untuk Java](https://aws.amazon.com/sdk-for-java/).

**catatan**  
Contohnya hanya mencakup kode yang diperlukan untuk mendemonstrasikan setiap teknik. [Kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java). Dari sana, Anda dapat mengunduh satu file sumber atau mengkloning repositori secara lokal untuk mendapatkan semua contoh untuk dibangun dan dijalankan.

**Topics**
+ [Bekerja dengan Amazon SQS Antrian Pesan](examples-sqs-message-queues.md)
+ [Mengirim, Menerima, dan Menghapus Pesan Amazon SQS](examples-sqs-messages.md)
+ [Mengaktifkan Polling Panjang untuk Antrian Pesan Amazon SQS](examples-sqs-long-polling.md)
+ [Mengatur Batas Waktu Visibilitas di Amazon SQS](examples-sqs-visibility-timeout.md)
+ [Menggunakan Antrian Surat Mati di Amazon SQS](examples-sqs-dead-letter-queues.md)

# Bekerja dengan Amazon SQS Antrian Pesan
<a name="examples-sqs-message-queues"></a>

*Antrian pesan* adalah wadah logis yang digunakan untuk mengirim pesan dengan andal. Amazon SQS Ada dua jenis antrian: *standar* dan *first-in, first-out* (FIFO). Untuk mempelajari lebih lanjut tentang antrian dan perbedaan di antara jenis-jenis ini, lihat Panduan [Amazon SQS Pengembang](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/).

Topik ini menjelaskan cara membuat, membuat daftar, menghapus, dan mendapatkan URL Amazon SQS antrian dengan menggunakan. AWS SDK untuk Java

## Buat Antrian
<a name="sqs-create-queue"></a>

Gunakan `createQueue` metode klien AmazonSQS, menyediakan [CreateQueueRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/CreateQueueRequest.html)objek yang menjelaskan parameter antrian.

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.AmazonSQSException;
import com.amazonaws.services.sqs.model.CreateQueueRequest;
```

 **Kode** 

```
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
CreateQueueRequest create_request = new CreateQueueRequest(QUEUE_NAME)
        .addAttributesEntry("DelaySeconds", "60")
        .addAttributesEntry("MessageRetentionPeriod", "86400");

try {
    sqs.createQueue(create_request);
} catch (AmazonSQSException e) {
    if (!e.getErrorCode().equals("QueueAlreadyExists")) {
        throw e;
    }
}
```

Anda dapat menggunakan bentuk yang disederhanakan`createQueue`, yang hanya membutuhkan nama antrian, untuk membuat antrian standar.

```
sqs.createQueue("MyQueue" + new Date().getTime());
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/UsingQueues.java) di GitHub.

## Daftar Antrian
<a name="sqs-list-queues"></a>

Untuk membuat daftar Amazon SQS antrian untuk akun Anda, hubungi metode klien AmazonSQS. `listQueues`

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.ListQueuesResult;
```

 **Kode** 

```
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
ListQueuesResult lq_result = sqs.listQueues();
System.out.println("Your SQS Queue URLs:");
for (String url : lq_result.getQueueUrls()) {
    System.out.println(url);
}
```

Menggunakan `listQueues` kelebihan beban tanpa parameter apa pun mengembalikan *semua antrian*. Anda dapat memfilter hasil yang dikembalikan dengan meneruskannya `ListQueuesRequest` objek.

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.ListQueuesRequest;
```

 **Kode** 

```
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
String name_prefix = "Queue";
lq_result = sqs.listQueues(new ListQueuesRequest(name_prefix));
System.out.println("Queue URLs with prefix: " + name_prefix);
for (String url : lq_result.getQueueUrls()) {
    System.out.println(url);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/UsingQueues.java) di GitHub.

## Dapatkan URL untuk Antrian
<a name="sqs-get-queue-url"></a>

Panggil metode klien AmazonSQS. `getQueueUrl`

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
```

 **Kode** 

```
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
String queue_url = sqs.getQueueUrl(QUEUE_NAME).getQueueUrl();
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/UsingQueues.java) di GitHub.

## Hapus Antrian
<a name="sqs-delete-queue"></a>

Berikan [URL antrian ke metode](#sqs-get-queue-url) klien AmazonSQS. `deleteQueue`

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
```

 **Kode** 

```
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
sqs.deleteQueue(queue_url);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/UsingQueues.java) di GitHub.

## Info Selengkapnya
<a name="more-info"></a>
+  [Cara Kerja Amazon SQS Antrian di Panduan](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-how-it-works.html) Pengembang Amazon SQS 
+  [CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)di Referensi Amazon SQS API
+  [GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html)di Referensi Amazon SQS API
+  [ListQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html)di Referensi Amazon SQS API
+  [DeleteQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteQueues.html)di Referensi Amazon SQS API

# Mengirim, Menerima, dan Menghapus Pesan Amazon SQS
<a name="examples-sqs-messages"></a>

Topik ini menjelaskan cara mengirim, menerima, dan menghapus Amazon SQS pesan. Pesan selalu dikirimkan menggunakan [SQS Queue](examples-sqs-message-queues.md).

## Kirim Pesan
<a name="sqs-message-send"></a>

Tambahkan satu pesan ke Amazon SQS antrian dengan memanggil metode klien AmazonSQS. `sendMessage` Berikan [SendMessageRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/SendMessageRequest.html)objek yang berisi [URL](examples-sqs-message-queues.md#sqs-get-queue-url) antrian, isi pesan, dan nilai penundaan opsional (dalam hitungan detik).

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.SendMessageRequest;
```

 **Kode** 

```
SendMessageRequest send_msg_request = new SendMessageRequest()
        .withQueueUrl(queueUrl)
        .withMessageBody("hello world")
        .withDelaySeconds(5);
sqs.sendMessage(send_msg_request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/SendReceiveMessages.java) di GitHub.

### Kirim Beberapa Pesan Sekaligus
<a name="sqs-messages-send-multiple"></a>

Anda dapat mengirim lebih dari satu pesan dalam satu permintaan. Untuk mengirim beberapa pesan, gunakan `sendMessageBatch` metode klien AmazonSQS, yang mengambil [SendMessageBatchRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/SendMessageBatchRequest.html)berisi URL antrian dan daftar pesan (masing-masing a [SendMessageBatchRequestEntry](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/SendMessageBatchRequestEntry.html)) untuk dikirim. Anda juga dapat menetapkan nilai penundaan opsional per pesan.

 **Impor** 

```
import com.amazonaws.services.sqs.model.SendMessageBatchRequest;
import com.amazonaws.services.sqs.model.SendMessageBatchRequestEntry;
```

 **Kode** 

```
SendMessageBatchRequest send_batch_request = new SendMessageBatchRequest()
        .withQueueUrl(queueUrl)
        .withEntries(
                new SendMessageBatchRequestEntry(
                        "msg_1", "Hello from message 1"),
                new SendMessageBatchRequestEntry(
                        "msg_2", "Hello from message 2")
                        .withDelaySeconds(10));
sqs.sendMessageBatch(send_batch_request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/SendReceiveMessages.java) di GitHub.

## Menerima Pesan
<a name="sqs-messages-receive"></a>

Ambil pesan apa pun yang saat ini berada dalam antrian dengan memanggil `receiveMessage` metode klien AmazonSQS, meneruskannya URL antrian. Pesan dikembalikan sebagai daftar objek [Pesan](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/Message.html).

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.AmazonSQSException;
import com.amazonaws.services.sqs.model.SendMessageBatchRequest;
```

 **Kode** 

```
List<Message> messages = sqs.receiveMessage(queueUrl).getMessages();
```

## Hapus Pesan setelah Diterima
<a name="sqs-messages-delete"></a>

Setelah menerima pesan dan memproses isinya, hapus pesan dari antrian dengan mengirimkan alamat tanda terima pesan dan URL antrian ke metode klien AmazonSQS. `deleteMessage`

 **Kode** 

```
for (Message m : messages) {
    sqs.deleteMessage(queueUrl, m.getReceiptHandle());
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/SendReceiveMessages.java) di GitHub.

## Info Selengkapnya
<a name="more-info"></a>
+  [Cara Kerja Amazon SQS Antrian di Panduan](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-how-it-works.html) Pengembang Amazon SQS 
+  [SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)di Referensi Amazon SQS API
+  [SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html)di Referensi Amazon SQS API
+  [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)di Referensi Amazon SQS API
+  [DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)di Referensi Amazon SQS API

# Mengaktifkan Polling Panjang untuk Antrian Pesan Amazon SQS
<a name="examples-sqs-long-polling"></a>

 Amazon SQS menggunakan *polling singkat* secara default, hanya menanyakan sebagian dari server—berdasarkan distribusi acak berbobot—untuk menentukan apakah ada pesan yang tersedia untuk dimasukkan dalam respons.

Polling panjang membantu mengurangi biaya penggunaan Anda Amazon SQS dengan mengurangi jumlah tanggapan kosong ketika tidak ada pesan yang tersedia untuk dikembalikan sebagai balasan ReceiveMessage atas permintaan yang dikirim ke Amazon SQS antrian dan menghilangkan tanggapan kosong palsu.

**catatan**  
Anda dapat mengatur frekuensi polling yang panjang dari *1-20 detik*.

## Mengaktifkan Polling Panjang saat Membuat Antrian
<a name="sqs-long-polling-create-queue"></a>

Untuk mengaktifkan polling panjang saat membuat Amazon SQS antrian, setel `ReceiveMessageWaitTimeSeconds` atribut pada [CreateQueueRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/CreateQueueRequest.html)objek sebelum memanggil metode kelas AmazonSQS. `createQueue`

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.AmazonSQSException;
import com.amazonaws.services.sqs.model.CreateQueueRequest;
```

 **Kode** 

```
final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

// Enable long polling when creating a queue
CreateQueueRequest create_request = new CreateQueueRequest()
        .withQueueName(queue_name)
        .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20");

try {
    sqs.createQueue(create_request);
} catch (AmazonSQSException e) {
    if (!e.getErrorCode().equals("QueueAlreadyExists")) {
        throw e;
    }
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/LongPolling.java) di GitHub.

## Mengaktifkan Polling Panjang pada Antrian yang Ada
<a name="sqs-long-polling-existing-queue"></a>

Selain mengaktifkan polling panjang saat membuat antrian, Anda juga dapat mengaktifkannya pada antrian yang ada dengan menyetel [SetQueueAttributesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/SetQueueAttributesRequest.html)sebelum memanggil metode kelas `ReceiveMessageWaitTimeSeconds` AmazonSQS. `setQueueAttributes`

 **Impor** 

```
import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
```

 **Kode** 

```
SetQueueAttributesRequest set_attrs_request = new SetQueueAttributesRequest()
        .withQueueUrl(queue_url)
        .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20");
sqs.setQueueAttributes(set_attrs_request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/LongPolling.java) di GitHub.

## Mengaktifkan Polling Panjang pada Tanda Terima Pesan
<a name="sqs-long-polling-receive-message"></a>

Anda dapat mengaktifkan polling panjang saat menerima pesan dengan mengatur waktu tunggu dalam hitungan detik pada [ReceiveMessageRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/ReceiveMessageRequest.html)yang Anda berikan ke metode kelas AmazonSQS. `receiveMessage`

**catatan**  
Anda harus memastikan bahwa batas waktu permintaan AWS klien lebih besar dari waktu polling maksimum yang panjang (20-an) sehingga `receiveMessage` permintaan Anda tidak habis saat menunggu acara jajak pendapat berikutnya\$1

 **Impor** 

```
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
```

 **Kode** 

```
ReceiveMessageRequest receive_request = new ReceiveMessageRequest()
        .withQueueUrl(queue_url)
        .withWaitTimeSeconds(20);
sqs.receiveMessage(receive_request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/LongPolling.java) di GitHub.

## Info Selengkapnya
<a name="more-info"></a>
+  [Amazon SQS Polling Panjang](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html) di Panduan Amazon SQS Pengembang
+  [CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)di Referensi Amazon SQS API
+  [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)di Referensi Amazon SQS API
+  [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)di Referensi Amazon SQS API

# Mengatur Batas Waktu Visibilitas di Amazon SQS
<a name="examples-sqs-visibility-timeout"></a>

Ketika pesan diterima Amazon SQS, pesan tetap berada di antrian sampai dihapus untuk memastikan penerimaan. Pesan yang diterima, tetapi tidak dihapus, akan tersedia dalam permintaan berikutnya setelah *batas waktu visibilitas* tertentu untuk membantu mencegah pesan diterima lebih dari satu kali sebelum dapat diproses dan dihapus.

**catatan**  
Saat menggunakan [antrian standar](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html), batas waktu visibilitas bukanlah jaminan untuk menerima pesan dua kali. Jika Anda menggunakan antrian standar, pastikan kode Anda dapat menangani kasus di mana pesan yang sama telah dikirimkan lebih dari sekali.

## Menyetel Batas Waktu Visibilitas Pesan untuk Satu Pesan
<a name="sqs-visibility-timeout-receipt"></a>

Ketika Anda telah menerima pesan, Anda dapat mengubah batas waktu visibilitasnya dengan meneruskan pegangan tanda terima dalam [ChangeMessageVisibilityRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/ChangeMessageVisibilityRequest.html)metode kelas AmazonSQS. `changeMessageVisibility`

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
```

 **Kode** 

```
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

// Get the receipt handle for the first message in the queue.
String receipt = sqs.receiveMessage(queue_url)
                    .getMessages()
                    .get(0)
                    .getReceiptHandle();

sqs.changeMessageVisibility(queue_url, receipt, timeout);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/VisibilityTimeout.java) di GitHub.

## Menyetel Batas Waktu Visibilitas Pesan untuk Beberapa Pesan Sekaligus
<a name="setting-the-message-visibility-timeout-for-multiple-messages-at-once"></a>

Untuk mengatur batas waktu visibilitas pesan untuk beberapa pesan sekaligus, buat daftar [ChangeMessageVisibilityBatchRequestEntry](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/ChangeMessageVisibilityBatchRequestEntry.html)objek, masing-masing berisi string ID unik dan pegangan tanda terima. Kemudian, berikan daftar ke `changeMessageVisibilityBatch` metode kelas Amazon SQS klien.

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.ChangeMessageVisibilityBatchRequestEntry;
import java.util.ArrayList;
import java.util.List;
```

 **Kode** 

```
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

List<ChangeMessageVisibilityBatchRequestEntry> entries =
    new ArrayList<ChangeMessageVisibilityBatchRequestEntry>();

entries.add(new ChangeMessageVisibilityBatchRequestEntry(
            "unique_id_msg1",
            sqs.receiveMessage(queue_url)
               .getMessages()
               .get(0)
               .getReceiptHandle())
        .withVisibilityTimeout(timeout));

entries.add(new ChangeMessageVisibilityBatchRequestEntry(
            "unique_id_msg2",
            sqs.receiveMessage(queue_url)
               .getMessages()
               .get(0)
               .getReceiptHandle())
        .withVisibilityTimeout(timeout + 200));

sqs.changeMessageVisibilityBatch(queue_url, entries);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/VisibilityTimeout.java) di GitHub.

## Info Selengkapnya
<a name="more-info"></a>
+  Batas [Waktu Visibilitas di](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html) Panduan Pengembang Amazon SQS 
+  [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)di Referensi Amazon SQS API
+  [GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html)di Referensi Amazon SQS API
+  [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)di Referensi Amazon SQS API
+  [ChangeMessageVisibility](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html)di Referensi Amazon SQS API
+  [ChangeMessageVisibilityBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibilityBatch.html)di Referensi Amazon SQS API

# Menggunakan Antrian Surat Mati di Amazon SQS
<a name="examples-sqs-dead-letter-queues"></a>

 Amazon SQS memberikan dukungan untuk *antrian surat mati*. Antrian surat mati adalah antrian yang dapat ditargetkan antrian (sumber) lain untuk pesan yang tidak dapat diproses dengan sukses. Anda dapat menyisihkan dan mengisolasi pesan-pesan ini dalam antrian surat mati untuk menentukan mengapa pemrosesan mereka tidak berhasil.

## Membuat Antrian Surat Mati
<a name="sqs-dead-letter-queue-create-dl-queue"></a>

Antrian surat mati dibuat dengan cara yang sama seperti antrian biasa, tetapi memiliki batasan berikut:
+ Antrian huruf mati harus jenis antrian yang sama (FIFO atau standar) dengan antrian sumber.
+ Antrian huruf mati harus dibuat menggunakan yang sama Akun AWS dan wilayah sebagai antrian sumber.

Di sini kita membuat dua Amazon SQS antrian identik, salah satunya akan berfungsi sebagai antrian surat mati:

 **Impor** 

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.services.sqs.model.AmazonSQSException;
```

 **Kode** 

```
final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();

// Create source queue
try {
    sqs.createQueue(src_queue_name);
} catch (AmazonSQSException e) {
    if (!e.getErrorCode().equals("QueueAlreadyExists")) {
        throw e;
    }
}

// Create dead-letter queue
try {
    sqs.createQueue(dl_queue_name);
} catch (AmazonSQSException e) {
    if (!e.getErrorCode().equals("QueueAlreadyExists")) {
        throw e;
    }
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/DeadLetterQueues.java) di GitHub.

## Menunjuk Antrian Surat Mati untuk Antrian Sumber
<a name="sqs-dead-letter-queue-set-redrive-policy"></a>

Untuk menetapkan antrian huruf mati, Anda harus terlebih dahulu membuat *kebijakan redrive*, lalu menyetel kebijakan dalam atribut antrian. Kebijakan redrive ditentukan dalam JSON, dan menentukan ARN antrian surat mati dan jumlah maksimum kali pesan dapat diterima dan tidak diproses sebelum dikirim ke antrian surat mati.

Untuk menyetel kebijakan redrive untuk antrian sumber Anda, panggil `setQueueAttributes` metode kelas AmazonSQS dengan [SetQueueAttributesRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/sqs/model/SetQueueAttributesRequest.html)objek yang Anda tetapkan `RedrivePolicy` atributnya dengan kebijakan redrive JSON Anda.

 **Impor** 

```
import com.amazonaws.services.sqs.model.GetQueueAttributesRequest;
import com.amazonaws.services.sqs.model.GetQueueAttributesResult;
import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
```

 **Kode** 

```
String dl_queue_url = sqs.getQueueUrl(dl_queue_name)
                         .getQueueUrl();

GetQueueAttributesResult queue_attrs = sqs.getQueueAttributes(
        new GetQueueAttributesRequest(dl_queue_url)
            .withAttributeNames("QueueArn"));

String dl_queue_arn = queue_attrs.getAttributes().get("QueueArn");

// Set dead letter queue with redrive policy on source queue.
String src_queue_url = sqs.getQueueUrl(src_queue_name)
                          .getQueueUrl();

SetQueueAttributesRequest request = new SetQueueAttributesRequest()
        .withQueueUrl(src_queue_url)
        .addAttributesEntry("RedrivePolicy",
                "{\"maxReceiveCount\":\"5\", \"deadLetterTargetArn\":\""
                + dl_queue_arn + "\"}");

sqs.setQueueAttributes(request);
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/sqs/src/main/java/aws/example/sqs/DeadLetterQueues.java) di GitHub.

## Info Selengkapnya
<a name="more-info"></a>
+  [Menggunakan Antrian Amazon SQS Dead Letter](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) di Panduan Pengembang Amazon SQS 
+  [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)di Referensi Amazon SQS API

# Amazon SWF Contoh Menggunakan AWS SDK untuk Java
<a name="prog-services-swf"></a>

 [Amazon SWF](https://aws.amazon.com/swf/)[adalah layanan manajemen alur kerja yang membantu pengembang membangun dan menskalakan alur kerja terdistribusi yang dapat memiliki langkah paralel atau sekuensial yang terdiri dari aktivitas, alur kerja anak, atau bahkan tugas Lambda.](https://aws.amazon.com/lambda/)

Ada dua cara untuk bekerja dengan Amazon SWF menggunakan AWS SDK untuk Java, dengan menggunakan objek *klien* SWF, atau dengan menggunakan AWS Flow Framework untuk Java. AWS Flow Framework Untuk Java lebih sulit untuk dikonfigurasi pada awalnya, karena menggunakan anotasi yang berat dan bergantung pada pustaka tambahan seperti aspectJ dan Spring Framework. Namun, untuk proyek besar atau kompleks, Anda akan menghemat waktu pengkodean dengan menggunakan AWS Flow Framework for Java. Untuk informasi selengkapnya, lihat [Panduan Pengembang AWS Flow Framework untuk Java](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/).

Bagian ini memberikan contoh pemrograman Amazon SWF dengan menggunakan AWS SDK untuk Java klien secara langsung.

**Topics**
+ [Dasar-dasar SWF](swf-basics.md)
+ [Membangun Amazon SWF Aplikasi Sederhana](swf-hello.md)
+ [Lambda Tugas](swf-lambda-task.md)
+ [Mematikan Aktivitas dan Alur Kerja Pekerja dengan Anggun](swf-graceful-shutdown.md)
+ [Mendaftarkan Domain](prog-services-swf-register-domain.md)
+ [Daftar Domain](prog-services-swf-list-domains.md)

# Dasar-dasar SWF
<a name="swf-basics"></a>

Ini adalah pola umum untuk bekerja dengan Amazon SWF menggunakan AWS SDK untuk Java. Ini dimaksudkan terutama untuk referensi. Untuk tutorial pengantar yang lebih lengkap, lihat [Membangun Amazon SWF Aplikasi Sederhana](swf-hello.md).

## Dependensi
<a name="dependencies"></a>

 Amazon SWF Aplikasi dasar akan memerlukan dependensi berikut, yang disertakan dengan: AWS SDK untuk Java
+ aws-java-sdk-1.12.\$1.jar
+ commons-logging-1.2.\$1.jar
+ httpclient-4.3.\$1.jar
+ httpcore-4.3.\$1.jar
+ jackson-anotasi-2.12.\$1.jar
+ jackson-core-2.12.\$1.jar
+ jackson-databind-2.12.\$1.jar
+ joda-time-2.8.\$1.jar

**catatan**  
Nomor versi paket-paket ini akan berbeda tergantung pada versi SDK yang Anda miliki, tetapi versi yang disertakan dengan SDK telah diuji kompatibilitasnya, dan merupakan versi yang harus Anda gunakan.

 AWS Flow Framework untuk aplikasi Java memerlukan pengaturan tambahan, *dan* dependensi tambahan. Lihat [Panduan Pengembang Java AWS Flow Framework untuk](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/) informasi selengkapnya tentang penggunaan kerangka kerja.

## Impor
<a name="imports"></a>

Secara umum, Anda dapat menggunakan impor berikut untuk pengembangan kode:

```
import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClientBuilder;
import com.amazonaws.services.simpleworkflow.model.*;
```

Namun, ini adalah praktik yang baik untuk mengimpor hanya kelas yang Anda butuhkan. Anda mungkin akan berakhir menentukan kelas tertentu di ruang `com.amazonaws.services.simpleworkflow.model` kerja:

```
import com.amazonaws.services.simpleworkflow.model.PollForActivityTaskRequest;
import com.amazonaws.services.simpleworkflow.model.RespondActivityTaskCompletedRequest;
import com.amazonaws.services.simpleworkflow.model.RespondActivityTaskFailedRequest;
import com.amazonaws.services.simpleworkflow.model.TaskList;
```

Jika Anda menggunakan AWS Flow Framework untuk Java, Anda akan mengimpor kelas dari `com.amazonaws.services.simpleworkflow.flow` ruang kerja. Sebagai contoh:

```
import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
import com.amazonaws.services.simpleworkflow.flow.ActivityWorker;
```

**catatan**  
The AWS Flow Framework for Java memiliki persyaratan tambahan di luar basis AWS SDK untuk Java. Untuk informasi selengkapnya, lihat [Panduan Pengembang AWS Flow Framework untuk Java](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/).

## Menggunakan kelas klien SWF
<a name="using-the-swf-client-class"></a>

Antarmuka dasar Anda Amazon SWF adalah melalui [AmazonSimpleWorkflowAsyncClient](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowAsyncClient.html)kelas [AmazonSimpleWorkflowClient](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowClient.html)atau. Perbedaan utama antara ini adalah bahwa `\*AsyncClient` kelas mengembalikan objek [Future untuk pemrograman](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/Future.html) bersamaan (asinkron).

```
AmazonSimpleWorkflowClient swf = AmazonSimpleWorkflowClientBuilder.defaultClient();
```

# Membangun Amazon SWF Aplikasi Sederhana
<a name="swf-hello"></a>

Topik ini akan memperkenalkan Anda pada [Amazon SWF](https://aws.amazon.com/swf/)aplikasi pemrograman dengan AWS SDK untuk Java, sambil menyajikan beberapa konsep penting di sepanjang jalan.

## Tentang contoh
<a name="about-the-example"></a>

Proyek contoh akan membuat alur kerja dengan satu aktivitas yang menerima data alur kerja yang melewati AWS cloud (Dalam tradisi HelloWorld, itu akan menjadi nama seseorang untuk disapa) dan kemudian mencetak salam sebagai tanggapan.

Meskipun ini tampaknya sangat sederhana di permukaan, Amazon SWF aplikasi terdiri dari sejumlah bagian yang bekerja bersama:
+ **Domain**, digunakan sebagai wadah logis untuk data eksekusi alur kerja Anda.
+ Satu atau beberapa **alur kerja** yang mewakili komponen kode yang menentukan urutan logis eksekusi aktivitas alur kerja dan alur kerja anak Anda.
+ **Pekerja alur kerja**, juga dikenal sebagai *decider*, yang melakukan polling untuk tugas keputusan dan menjadwalkan kegiatan atau alur kerja anak sebagai tanggapan.
+ Satu atau lebih **kegiatan**, yang masing-masing mewakili unit kerja dalam alur kerja.
+ **Pekerja aktivitas yang melakukan** polling untuk tugas aktivitas dan menjalankan metode aktivitas sebagai respons.
+ Satu atau beberapa **daftar tugas**, yang merupakan antrian yang dikelola oleh Amazon SWF digunakan untuk mengeluarkan permintaan ke alur kerja dan pekerja aktivitas. Tugas pada daftar tugas yang dimaksudkan untuk pekerja alur kerja disebut *tugas keputusan*. Yang dimaksudkan untuk pekerja aktivitas disebut *tugas aktivitas*.
+ **Starter alur kerja** yang memulai eksekusi alur kerja Anda.

Di belakang layar, Amazon SWF mengatur pengoperasian komponen-komponen ini, mengoordinasikan alirannya dari AWS cloud, meneruskan data di antara mereka, menangani batas waktu dan pemberitahuan detak jantung, dan mencatat riwayat eksekusi alur kerja.

## Prasyarat
<a name="prerequisitesswf"></a>

### Lingkungan pengembangan
<a name="development-environment"></a>

Lingkungan pengembangan yang digunakan dalam tutorial ini terdiri dari:
+ The [AWS SDK untuk Java](https://aws.amazon.com/sdk-for-java/).
+  [Apache Maven (3.3.1](http://maven.apache.org/)).
+ JDK 1.7 atau yang lebih baru. Tutorial ini dikembangkan dan diuji menggunakan JDK 1.8.0.
+ Editor teks Java yang bagus (pilihan Anda).

**catatan**  
Jika Anda menggunakan sistem build yang berbeda dari Maven, Anda masih dapat membuat proyek menggunakan langkah-langkah yang sesuai untuk lingkungan Anda dan menggunakan konsep yang disediakan di sini untuk diikuti. Informasi lebih lanjut tentang mengkonfigurasi dan menggunakan AWS SDK untuk Java dengan berbagai sistem build disediakan di [Memulai](getting-started.md).  
Demikian juga, tetapi dengan lebih banyak usaha, langkah-langkah yang ditampilkan di sini dapat diimplementasikan menggunakan salah satu AWS SDKs dengan dukungan untuk Amazon SWF.

Semua dependensi eksternal yang diperlukan disertakan dengan AWS SDK untuk Java, jadi tidak ada tambahan untuk diunduh.

### AWS Akses
<a name="aws-access"></a>

Agar berhasil mengerjakan tutorial ini, Anda harus memiliki akses ke portal AWS akses seperti yang [dijelaskan di bagian pengaturan dasar](signup-create-iam-user.md#signup-create-iam-user-overview) panduan ini.

Petunjuk menjelaskan cara mengakses kredensyal sementara yang Anda salin dan tempel ke file bersama `credentials` lokal Anda. Kredensyal sementara yang Anda tempel harus dikaitkan dengan peran IAM AWS IAM Identity Center yang memiliki izin untuk mengakses Amazon SWF. Setelah menempelkan kredensyal sementara, `credentials` file Anda akan terlihat mirip dengan yang berikut ini.

```
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
aws_session_token=IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE
```

Kredensi sementara ini terkait dengan profil. `default`

## Buat proyek SWF
<a name="create-a-swf-project"></a>

1. Mulai proyek baru dengan Maven:

   ```
   mvn archetype:generate -DartifactId=helloswf \
   -DgroupId=aws.example.helloswf -DinteractiveMode=false
   ```

   Ini akan membuat proyek baru dengan struktur proyek maven standar:

   ```
   helloswf
   ├── pom.xml
   └── src
       ├── main
       │   └── java
       │       └── aws
       │           └── example
       │               └── helloswf
       │                   └── App.java
       └── test
           └── ...
   ```

   Anda dapat mengabaikan atau menghapus `test` direktori dan semua isinya, kami tidak akan menggunakannya untuk tutorial ini. Anda juga dapat menghapus`App.java`, karena kami akan menggantinya dengan kelas baru.

1. Edit `pom.xml` file proyek dan tambahkan **aws-java-sdk-simpleworkflow**modul dengan menambahkan ketergantungan untuknya di dalam `<dependencies>` blok.

   ```
   <dependencies>
     <dependency>
       <groupId>com.amazonaws</groupId>
       <artifactId>aws-java-sdk-simpleworkflow</artifactId>
       <version>1.11.1000</version>
     </dependency>
   </dependencies>
   ```

1.  *Pastikan Maven membangun proyek Anda dengan dukungan JDK* 1.7\$1. Tambahkan yang berikut ini ke proyek Anda (baik sebelum atau sesudah `<dependencies>` pemblokiran) di`pom.xml`:

   ```
   <build>
     <plugins>
       <plugin>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>3.6.1</version>
         <configuration>
             <source>1.8</source>
             <target>1.8</target>
         </configuration>
       </plugin>
     </plugins>
   </build>
   ```

## Kode proyek
<a name="code-the-project"></a>

Contoh proyek akan terdiri dari empat aplikasi terpisah, yang akan kita kunjungi satu per satu:
+  **HelloTypes.java** --berisi data tipe domain, aktivitas, dan alur kerja proyek, dibagikan dengan komponen lainnya. Ini juga menangani pendaftaran jenis ini dengan SWF.
+  **ActivityWorker.java** --berisi pekerja aktivitas, yang melakukan polling untuk tugas aktivitas dan menjalankan aktivitas sebagai respons.
+  **WorkflowWorker.java** --berisi workflow worker (decider), yang melakukan polling untuk tugas keputusan dan menjadwalkan aktivitas baru.
+  **WorkflowStarter.java** --berisi starter alur kerja, yang memulai eksekusi alur kerja baru, yang akan menyebabkan SWF mulai menghasilkan tugas keputusan dan alur kerja untuk dikonsumsi pekerja Anda.

### Langkah-langkah umum untuk semua file sumber
<a name="swf-hello-common"></a>

Semua file yang Anda buat untuk menampung kelas Java Anda akan memiliki beberapa kesamaan. Demi kepentingan waktu, langkah-langkah ini *akan tersirat setiap kali Anda menambahkan file baru ke proyek*:

1. Buat file di `src/main/java/aws/example/helloswf/` direktori proyek.

1. Tambahkan `package` deklarasi ke awal setiap file untuk mendeklarasikan namespace-nya. Contoh proyek menggunakan:

   ```
   package aws.example.helloswf;
   ```

1. Tambahkan `import` deklarasi untuk [AmazonSimpleWorkflowClient](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowClient.html)kelas dan untuk beberapa kelas di `com.amazonaws.services.simpleworkflow.model` namespace. Untuk menyederhanakan hal-hal, kita akan menggunakan:

   ```
   import com.amazonaws.regions.Regions;
   import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
   import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClientBuilder;
   import com.amazonaws.services.simpleworkflow.model.*;
   ```

### Daftarkan domain, alur kerja, dan jenis aktivitas
<a name="swf-hello-hellotypes"></a>

Kita akan mulai dengan membuat kelas executable baru,. `HelloTypes.java` File ini akan berisi data bersama yang perlu diketahui oleh berbagai bagian alur kerja Anda, seperti nama dan versi aktivitas dan jenis alur kerja Anda, nama domain, dan nama daftar tugas.

1. Buka editor teks Anda dan buat file`HelloTypes.java`, tambahkan deklarasi paket dan impor sesuai dengan [langkah-langkah umum](#swf-hello-common).

1. Deklarasikan `HelloTypes` kelas dan berikan nilai yang akan digunakan untuk aktivitas terdaftar dan jenis alur kerja Anda:

   ```
       public static final String DOMAIN = "HelloDomain";
       public static final String TASKLIST = "HelloTasklist";
       public static final String WORKFLOW = "HelloWorkflow";
       public static final String WORKFLOW_VERSION = "1.0";
       public static final String ACTIVITY = "HelloActivity";
       public static final String ACTIVITY_VERSION = "1.0";
   ```

   Nilai-nilai ini akan digunakan di seluruh kode.

1. Setelah deklarasi String, buat instance dari [AmazonSimpleWorkflowClient](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowClient.html)kelas. Ini adalah antarmuka dasar untuk Amazon SWF metode yang disediakan oleh AWS SDK untuk Java.

   ```
   private static final AmazonSimpleWorkflow swf =
       AmazonSimpleWorkflowClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
   ```

   Cuplikan sebelumnya mengasumsikan bahwa kredensyal sementara dikaitkan dengan profil. `default` Jika Anda menggunakan profil yang berbeda, ubah kode di atas sebagai berikut dan ganti *profile\$1name * dengan nama nama profil yang sebenarnya.

   ```
   private static final AmazonSimpleWorkflow swf =
           AmazonSimpleWorkflowClientBuilder
                   .standard()
                   .withCredentials(new ProfileCredentialsProvider("profile_name"))
                   .withRegion(Regions.DEFAULT_REGION)
                   .build();
   ```

1. Tambahkan fungsi baru untuk mendaftarkan domain SWF. *Domain* adalah wadah logis untuk sejumlah aktivitas SWF terkait dan jenis alur kerja. Komponen SWF hanya dapat berkomunikasi satu sama lain jika mereka ada dalam domain yang sama.

   ```
       try {
           System.out.println("** Registering the domain '" + DOMAIN + "'.");
           swf.registerDomain(new RegisterDomainRequest()
               .withName(DOMAIN)
               .withWorkflowExecutionRetentionPeriodInDays("1"));
       } catch (DomainAlreadyExistsException e) {
           System.out.println("** Domain already exists!");
       }
   ```

   Saat Anda mendaftarkan domain, Anda memberinya *nama* (kumpulan 1 - 256 karakter tidak termasuk`:`,, `/``|`, karakter kontrol atau string literal '`arn') dan *periode retensi*, yang merupakan jumlah hari yang Amazon SWF akan menyimpan data riwayat eksekusi alur kerja Anda setelah eksekusi alur kerja selesai. Periode retensi eksekusi alur kerja maksimum adalah 90 hari. Untuk informasi selengkapnya, lihat [RegisterDomainRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/RegisterDomainRequest.html).

   Jika domain dengan nama itu sudah ada, a [DomainAlreadyExistsException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/DomainAlreadyExistsException.html)dinaikkan. Karena kami tidak peduli jika domain telah dibuat, kami dapat mengabaikan pengecualian.
**catatan**  
Kode ini menunjukkan pola umum saat bekerja dengan AWS SDK untuk Java metode, data untuk metode disediakan oleh kelas di `simpleworkflow.model` namespace, yang Anda buat instance dan isi menggunakan metode chainable. `0with*`

1. Tambahkan fungsi untuk mendaftarkan jenis aktivitas baru. *Aktivitas* mewakili unit kerja dalam alur kerja Anda.

   ```
       try {
           System.out.println("** Registering the activity type '" + ACTIVITY +
               "-" + ACTIVITY_VERSION + "'.");
           swf.registerActivityType(new RegisterActivityTypeRequest()
               .withDomain(DOMAIN)
               .withName(ACTIVITY)
               .withVersion(ACTIVITY_VERSION)
               .withDefaultTaskList(new TaskList().withName(TASKLIST))
               .withDefaultTaskScheduleToStartTimeout("30")
               .withDefaultTaskStartToCloseTimeout("600")
               .withDefaultTaskScheduleToCloseTimeout("630")
               .withDefaultTaskHeartbeatTimeout("10"));
       } catch (TypeAlreadyExistsException e) {
           System.out.println("** Activity type already exists!");
       }
   ```

   Jenis aktivitas diidentifikasi dengan *nama* dan *versi*, yang digunakan untuk mengidentifikasi aktivitas secara unik dari orang lain di domain tempat ia terdaftar. Aktivitas juga berisi sejumlah parameter opsional, seperti daftar tugas default yang digunakan untuk menerima tugas dan data dari SWF dan sejumlah batas waktu berbeda yang dapat Anda gunakan untuk menempatkan batasan pada berapa lama bagian yang berbeda dari eksekusi aktivitas dapat berlangsung. Untuk informasi selengkapnya, lihat [RegisterActivityTypeRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/RegisterActivityTypeRequest.html).
**catatan**  
Semua nilai batas waktu ditentukan dalam *hitungan detik*. Lihat [Jenis Amazon SWF Timeout](https://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-timeout-types.html) untuk deskripsi lengkap tentang bagaimana batas waktu memengaruhi eksekusi alur kerja Anda.

Jika jenis aktivitas yang Anda coba daftarkan sudah ada, [TypeAlreadyExistsException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/TypeAlreadyExistsException.html)maka akan muncul. Tambahkan fungsi untuk mendaftarkan jenis alur kerja baru. *Alur kerja*, juga dikenal sebagai *decider* mewakili logika eksekusi alur kerja Anda.

\$1

```
    try {
        System.out.println("** Registering the workflow type '" + WORKFLOW +
            "-" + WORKFLOW_VERSION + "'.");
        swf.registerWorkflowType(new RegisterWorkflowTypeRequest()
            .withDomain(DOMAIN)
            .withName(WORKFLOW)
            .withVersion(WORKFLOW_VERSION)
            .withDefaultChildPolicy(ChildPolicy.TERMINATE)
            .withDefaultTaskList(new TaskList().withName(TASKLIST))
            .withDefaultTaskStartToCloseTimeout("30"));
    } catch (TypeAlreadyExistsException e) {
        System.out.println("** Workflow type already exists!");
    }
```

\$1

Mirip dengan jenis aktivitas, jenis alur kerja diidentifikasi oleh *nama* dan *versi* dan juga memiliki batas waktu yang dapat dikonfigurasi. Untuk informasi selengkapnya, lihat [RegisterWorkflowTypeRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/RegisterWorkflowTypeRequest.html).

\$1

Jika jenis alur kerja yang Anda coba daftarkan sudah ada, maka akan muncul. [TypeAlreadyExistsException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/TypeAlreadyExistsException.html) Terakhir, buat kelas dapat dieksekusi dengan menyediakannya `main` metode, yang akan mendaftarkan domain, jenis aktivitas, dan jenis alur kerja secara bergantian:

\$1

```
    registerDomain();
    registerWorkflowType();
    registerActivityType();
```

Anda dapat [membangun](#swf-hello-build) dan [menjalankan](#swf-hello-run-register) aplikasi sekarang untuk menjalankan skrip pendaftaran, atau melanjutkan pengkodean aktivitas dan pekerja alur kerja. Setelah domain, alur kerja, dan aktivitas terdaftar, Anda tidak perlu menjalankannya lagi—jenis ini tetap ada hingga Anda tidak menggunakannya sendiri.

### Melaksanakan pekerja aktivitas
<a name="implement-the-activity-worker"></a>

*Aktivitas* adalah unit dasar kerja dalam alur kerja. Alur kerja menyediakan logika, penjadwalan aktivitas yang akan dijalankan (atau tindakan lain yang harus diambil) sebagai respons terhadap tugas keputusan. Alur kerja tipikal biasanya terdiri dari sejumlah aktivitas yang dapat berjalan secara sinkron, asinkron, atau kombinasi keduanya.

*Pekerja aktivitas* adalah sedikit kode yang melakukan polling untuk tugas aktivitas yang dihasilkan oleh Amazon SWF sebagai respons terhadap keputusan alur kerja. Ketika menerima tugas aktivitas, ia menjalankan aktivitas yang sesuai dan mengembalikan respons sukses/kegagalan kembali ke alur kerja.

Kami akan menerapkan pekerja aktivitas sederhana yang mendorong satu aktivitas.

1. Buka editor teks Anda dan buat file`ActivityWorker.java`, tambahkan deklarasi paket dan impor sesuai dengan [langkah-langkah umum](#swf-hello-common).

   ```
   import com.amazonaws.regions.Regions;
   import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
   import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClientBuilder;
   import com.amazonaws.services.simpleworkflow.model.*;
   ```

1. Tambahkan `ActivityWorker` kelas ke file, dan berikan anggota data untuk menahan klien SWF yang akan kita gunakan untuk berinteraksi dengan Amazon SWF:

   ```
       private static final AmazonSimpleWorkflow swf =
               AmazonSimpleWorkflowClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
   ```

1. Tambahkan metode yang akan kita gunakan sebagai aktivitas:

   ```
   private static String sayHello(String input) throws Throwable {
       return "Hello, " + input + "!";
   }
   ```

   Aktivitas hanya mengambil string, menggabungkannya menjadi salam dan mengembalikan hasilnya. Meskipun ada sedikit kemungkinan bahwa aktivitas ini akan menimbulkan pengecualian, ada baiknya untuk merancang aktivitas yang dapat menimbulkan kesalahan jika terjadi kesalahan.

1. Tambahkan `main` metode yang akan kita gunakan sebagai metode polling tugas aktivitas. Kita akan memulainya dengan menambahkan beberapa kode untuk polling daftar tugas untuk tugas aktivitas:

   ```
           System.out.println("Polling for an activity task from the tasklist '"
                   + HelloTypes.TASKLIST + "' in the domain '" +
                   HelloTypes.DOMAIN + "'.");
   
           ActivityTask task = swf.pollForActivityTask(
               new PollForActivityTaskRequest()
                   .withDomain(HelloTypes.DOMAIN)
                   .withTaskList(
                       new TaskList().withName(HelloTypes.TASKLIST)));
   
           String task_token = task.getTaskToken();
   ```

   Aktivitas menerima tugas dari Amazon SWF dengan memanggil `pollForActivityTask` metode klien SWF, menentukan domain dan daftar tugas yang akan digunakan dalam passed-in. [PollForActivityTaskRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/PollForActivityTaskRequest.html)

   Setelah tugas diterima, kami mengambil pengenal unik untuk itu dengan memanggil metode tugas. `getTaskToken`

1. Selanjutnya, tulis beberapa kode untuk memproses tugas yang masuk. Tambahkan berikut ini ke `main` metode Anda, tepat setelah kode yang melakukan polling untuk tugas dan mengambil token tugasnya.

   ```
       if (task_token != null) {
           String result = null;
           Throwable error = null;
   
           try {
               System.out.println("Executing the activity task with input '" +
                       task.getInput() + "'.");
               result = sayHello(task.getInput());
           } catch (Throwable th) {
               error = th;
           }
   
           if (error == null) {
               System.out.println("The activity task succeeded with result '"
                       + result + "'.");
               swf.respondActivityTaskCompleted(
                   new RespondActivityTaskCompletedRequest()
                       .withTaskToken(task_token)
                       .withResult(result));
           } else {
               System.out.println("The activity task failed with the error '"
                       + error.getClass().getSimpleName() + "'.");
               swf.respondActivityTaskFailed(
                   new RespondActivityTaskFailedRequest()
                       .withTaskToken(task_token)
                       .withReason(error.getClass().getSimpleName())
                       .withDetails(error.getMessage()));
           }
       }
   ```

   Jika token tugas tidak`null`, maka kita dapat mulai menjalankan metode aktivitas (`sayHello`), menyediakannya dengan data input yang dikirim dengan tugas.

   Jika tugas *berhasil* (tidak ada kesalahan yang dihasilkan), maka pekerja merespons SWF dengan memanggil `respondActivityTaskCompleted` metode klien SWF dengan [RespondActivityTaskCompletedRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/RespondActivityTaskCompletedRequest.html)objek yang berisi token tugas dan data hasil aktivitas.

   Di sisi lain, jika tugas *gagal*, maka kami merespons dengan memanggil `respondActivityTaskFailed` metode dengan [RespondActivityTaskFailedRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/RespondActivityTaskFailedRequest.html)objek, meneruskannya token tugas dan informasi tentang kesalahan.

**catatan**  
Kegiatan ini tidak akan ditutup dengan anggun jika dibunuh. Meskipun berada di luar cakupan tutorial ini, implementasi alternatif dari pekerja aktivitas ini disediakan dalam topik yang menyertainya, [Mematikan Aktivitas dan Pekerja Alur Kerja](swf-graceful-shutdown.md) dengan Anggun.

### Menerapkan pekerja alur kerja
<a name="implement-the-workflow-worker"></a>

Logika alur kerja Anda berada dalam sepotong kode yang dikenal sebagai **pekerja alur kerja**. Pekerja alur kerja melakukan polling untuk tugas keputusan yang dikirim oleh Amazon SWF dalam domain, dan pada daftar tugas default, tempat jenis alur kerja terdaftar.

Ketika pekerja alur kerja menerima tugas, itu membuat semacam keputusan (biasanya apakah akan menjadwalkan aktivitas baru atau tidak) dan mengambil tindakan yang tepat (seperti penjadwalan aktivitas).

1. Buka editor teks Anda dan buat file`WorkflowWorker.java`, tambahkan deklarasi paket dan impor sesuai dengan [langkah-langkah umum](#swf-hello-common).

1. Tambahkan beberapa impor tambahan ke file:

   ```
   import com.amazonaws.regions.Regions;
   import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
   import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClientBuilder;
   import com.amazonaws.services.simpleworkflow.model.*;
   import java.util.ArrayList;
   import java.util.List;
   import java.util.UUID;
   ```

1. Deklarasikan `WorkflowWorker` kelas, dan buat instance dari [AmazonSimpleWorkflowClient](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowClient.html)kelas yang digunakan untuk mengakses metode SWF.

   ```
       private static final AmazonSimpleWorkflow swf =
               AmazonSimpleWorkflowClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
   ```

1. Tambahkan `main` metode. Metode loop terus menerus, polling untuk tugas keputusan menggunakan metode klien `pollForDecisionTask` SWF. [PollForDecisionTaskRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/PollForDecisionTaskRequest.html)Ini memberikan detailnya.

   ```
       PollForDecisionTaskRequest task_request =
           new PollForDecisionTaskRequest()
               .withDomain(HelloTypes.DOMAIN)
               .withTaskList(new TaskList().withName(HelloTypes.TASKLIST));
   
       while (true) {
           System.out.println(
                   "Polling for a decision task from the tasklist '" +
                   HelloTypes.TASKLIST + "' in the domain '" +
                   HelloTypes.DOMAIN + "'.");
   
           DecisionTask task = swf.pollForDecisionTask(task_request);
   
           String taskToken = task.getTaskToken();
           if (taskToken != null) {
               try {
                   executeDecisionTask(taskToken, task.getEvents());
               } catch (Throwable th) {
                   th.printStackTrace();
               }
           }
       }
   ```

   Setelah tugas diterima, kita memanggil `getTaskToken` metodenya, yang mengembalikan string yang dapat digunakan untuk mengidentifikasi tugas. Jika token yang dikembalikan tidak`null`, maka kami memprosesnya lebih lanjut dalam `executeDecisionTask` metode, meneruskannya token tugas dan daftar [HistoryEvent](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/HistoryEvent.html)objek yang dikirim dengan tugas.

1. Tambahkan `executeDecisionTask` metode, ambil token tugas (a`String`) dan `HistoryEvent` daftar.

   ```
       List<Decision> decisions = new ArrayList<Decision>();
       String workflow_input = null;
       int scheduled_activities = 0;
       int open_activities = 0;
       boolean activity_completed = false;
       String result = null;
   ```

   Kami juga menyiapkan beberapa anggota data untuk melacak hal-hal seperti:
   + Daftar objek [Keputusan](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/Decision.html) yang digunakan untuk melaporkan hasil pemrosesan tugas.
   + String untuk menahan input alur kerja yang disediakan oleh acara WorkflowExecutionStarted "”
   + hitungan aktivitas yang dijadwalkan dan terbuka (berjalan) untuk menghindari penjadwalan aktivitas yang sama ketika telah dijadwalkan atau sedang berjalan.
   + boolean untuk menunjukkan bahwa aktivitas telah selesai.
   + String untuk menahan hasil aktivitas, untuk mengembalikannya sebagai hasil alur kerja kami.

1. Selanjutnya, tambahkan beberapa kode `executeDecisionTask` untuk memproses `HistoryEvent` objek yang dikirim dengan tugas, berdasarkan jenis peristiwa yang dilaporkan oleh `getEventType` metode.

   ```
   System.out.println("Executing the decision task for the history events: [");
   for (HistoryEvent event : events) {
       System.out.println("  " + event);
       switch(event.getEventType()) {
           case "WorkflowExecutionStarted":
               workflow_input =
                   event.getWorkflowExecutionStartedEventAttributes()
                        .getInput();
               break;
           case "ActivityTaskScheduled":
               scheduled_activities++;
               break;
           case "ScheduleActivityTaskFailed":
               scheduled_activities--;
               break;
           case "ActivityTaskStarted":
               scheduled_activities--;
               open_activities++;
               break;
           case "ActivityTaskCompleted":
               open_activities--;
               activity_completed = true;
               result = event.getActivityTaskCompletedEventAttributes()
                             .getResult();
               break;
           case "ActivityTaskFailed":
               open_activities--;
               break;
           case "ActivityTaskTimedOut":
               open_activities--;
               break;
       }
   }
   System.out.println("]");
   ```

   Untuk keperluan alur kerja kami, kami paling tertarik pada:
   + acara "WorkflowExecutionStarted", yang menunjukkan bahwa eksekusi alur kerja telah dimulai (biasanya berarti bahwa Anda harus menjalankan aktivitas pertama dalam alur kerja), dan yang memberikan input awal yang diberikan ke alur kerja. Dalam kasus ini, ini adalah bagian nama dari salam kami, sehingga disimpan dalam String untuk digunakan saat menjadwalkan aktivitas yang akan dijalankan.
   + acara "ActivityTaskCompleted", yang dikirim setelah aktivitas yang dijadwalkan selesai. Data acara juga mencakup nilai pengembalian dari aktivitas yang telah diselesaikan. Karena kita hanya memiliki satu aktivitas, kita akan menggunakan nilai itu sebagai hasil dari seluruh alur kerja.

   Jenis acara lainnya dapat digunakan jika alur kerja Anda membutuhkannya. Lihat deskripsi [HistoryEvent](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/HistoryEvent.html)kelas untuk informasi tentang setiap jenis acara.

   \$1 CATATAN: String dalam `switch` pernyataan diperkenalkan di Jawa 7. Jika Anda menggunakan versi Java yang lebih lama, Anda dapat menggunakan [EventType](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/model/EventType.html)kelas untuk mengonversi yang `String` dikembalikan oleh `history_event.getType()` ke nilai enum dan kemudian kembali ke `String` jika perlu:

```
EventType et = EventType.fromValue(event.getEventType());
```

1. Setelah `switch` pernyataan, tambahkan lebih banyak kode untuk merespons dengan *keputusan* yang tepat berdasarkan tugas yang diterima.

   ```
   if (activity_completed) {
       decisions.add(
           new Decision()
               .withDecisionType(DecisionType.CompleteWorkflowExecution)
               .withCompleteWorkflowExecutionDecisionAttributes(
                   new CompleteWorkflowExecutionDecisionAttributes()
                       .withResult(result)));
   } else {
       if (open_activities == 0 && scheduled_activities == 0) {
   
           ScheduleActivityTaskDecisionAttributes attrs =
               new ScheduleActivityTaskDecisionAttributes()
                   .withActivityType(new ActivityType()
                       .withName(HelloTypes.ACTIVITY)
                       .withVersion(HelloTypes.ACTIVITY_VERSION))
                   .withActivityId(UUID.randomUUID().toString())
                   .withInput(workflow_input);
   
           decisions.add(
                   new Decision()
                       .withDecisionType(DecisionType.ScheduleActivityTask)
                       .withScheduleActivityTaskDecisionAttributes(attrs));
       } else {
           // an instance of HelloActivity is already scheduled or running. Do nothing, another
           // task will be scheduled once the activity completes, fails or times out
       }
   }
   
   System.out.println("Exiting the decision task with the decisions " + decisions);
   ```
   + Jika aktivitas belum dijadwalkan, kami merespons dengan `ScheduleActivityTask` keputusan, yang memberikan informasi dalam [ScheduleActivityTaskDecisionAttributes](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/ScheduleActivityTaskDecisionAttributes.html)struktur tentang aktivitas yang Amazon SWF harus dijadwalkan berikutnya, juga termasuk data apa pun yang Amazon SWF harus dikirim ke aktivitas tersebut.
   + Jika aktivitas selesai, maka kami mempertimbangkan seluruh alur kerja selesai dan merespons dengan `CompletedWorkflowExecution` keputusan, mengisi [CompleteWorkflowExecutionDecisionAttributes](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/CompleteWorkflowExecutionDecisionAttributes.html)struktur untuk memberikan rincian tentang alur kerja yang telah selesai. Dalam hal ini, kami mengembalikan hasil aktivitas.

   Dalam kedua kasus, informasi keputusan ditambahkan ke `Decision` daftar yang dinyatakan di bagian atas metode.

1. Selesaikan tugas keputusan dengan mengembalikan daftar `Decision` objek yang dikumpulkan saat memproses tugas. Tambahkan kode ini di akhir `executeDecisionTask` metode yang telah kita tulis:

   ```
   swf.respondDecisionTaskCompleted(
       new RespondDecisionTaskCompletedRequest()
           .withTaskToken(taskToken)
           .withDecisions(decisions));
   ```

   `respondDecisionTaskCompleted`Metode klien SWF mengambil token tugas yang mengidentifikasi tugas serta daftar objek. `Decision`

### Menerapkan alur kerja starter
<a name="implement-the-workflow-starter"></a>

Akhirnya, kita akan menulis beberapa kode untuk memulai eksekusi alur kerja.

1. Buka editor teks Anda dan buat file`WorkflowStarter.java`, tambahkan deklarasi paket dan impor sesuai dengan [langkah-langkah umum](#swf-hello-common).

1. Tambahkan `WorkflowStarter` kelas:

   ```
   package aws.example.helloswf;
   
   
   import com.amazonaws.regions.Regions;
   import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
   import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClientBuilder;
   import com.amazonaws.services.simpleworkflow.model.*;
   
   public class WorkflowStarter {
       private static final AmazonSimpleWorkflow swf =
               AmazonSimpleWorkflowClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
       public static final String WORKFLOW_EXECUTION = "HelloWorldWorkflowExecution";
   
       public static void main(String[] args) {
           String workflow_input = "{SWF}";
           if (args.length > 0) {
               workflow_input = args[0];
           }
   
           System.out.println("Starting the workflow execution '" + WORKFLOW_EXECUTION +
                   "' with input '" + workflow_input + "'.");
   
           WorkflowType wf_type = new WorkflowType()
               .withName(HelloTypes.WORKFLOW)
               .withVersion(HelloTypes.WORKFLOW_VERSION);
   
           Run run = swf.startWorkflowExecution(new StartWorkflowExecutionRequest()
               .withDomain(HelloTypes.DOMAIN)
               .withWorkflowType(wf_type)
               .withWorkflowId(WORKFLOW_EXECUTION)
               .withInput(workflow_input)
               .withExecutionStartToCloseTimeout("90"));
   
           System.out.println("Workflow execution started with the run id '" +
                   run.getRunId() + "'.");
       }
   }
   ```

   `WorkflowStarter`Kelas terdiri dari metode tunggal`main`, yang mengambil argumen opsional diteruskan pada baris perintah sebagai data input untuk alur kerja.

   Metode klien SWF,`startWorkflowExecution`, mengambil [StartWorkflowExecutionRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/StartWorkflowExecutionRequest.html)objek sebagai input. Di sini, selain menentukan jenis domain dan alur kerja yang akan dijalankan, kami menyediakannya dengan:
   + nama eksekusi alur kerja yang dapat dibaca manusia
   + data input alur kerja (disediakan pada baris perintah dalam contoh kita)
   + nilai batas waktu yang mewakili berapa lama, dalam detik, seluruh alur kerja harus dijalankan.

   Objek [Run](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/Run.html) yang `startWorkflowExecution` mengembalikan memberikan *ID run*, nilai yang dapat digunakan untuk mengidentifikasi eksekusi alur kerja tertentu ini dalam Amazon SWF riwayat eksekusi alur kerja Anda.

   \$1 CATATAN: ID run dihasilkan oleh Amazon SWF, dan *tidak* sama dengan nama eksekusi alur kerja yang Anda berikan saat memulai eksekusi alur kerja.

## Bangun contoh
<a name="swf-hello-build"></a>

Untuk membangun proyek contoh dengan Maven, buka `helloswf` direktori dan ketik:

```
mvn package
```

Hasilnya `helloswf-1.0.jar` akan dihasilkan di `target` direktori.

## Jalankan contoh
<a name="run-the-example"></a>

Contoh ini terdiri dari empat kelas executable terpisah, yang dijalankan secara independen satu sama lain.

**catatan**  
Jika Anda menggunakan sistem Linux, macOS, atau Unix, Anda dapat menjalankan semuanya, satu demi satu, dalam satu jendela terminal. Jika Anda menjalankan Windows, Anda harus membuka dua instance baris perintah tambahan dan menavigasi ke `helloswf` direktori di masing-masing.

### Mengatur classpath Java
<a name="swf-hello-set-classpath"></a>

Meskipun Maven telah menangani dependensi untuk Anda, untuk menjalankan contoh, Anda harus menyediakan pustaka AWS SDK dan dependensinya pada classpath Java Anda. Anda dapat mengatur variabel `CLASSPATH` lingkungan ke lokasi pustaka AWS SDK dan `third-party/lib` direktori di SDK, yang mencakup dependensi yang diperlukan:

```
export CLASSPATH='target/helloswf-1.0.jar:/path/to/sdk/lib/*:/path/to/sdk/third-party/lib/*'
java example.swf.hello.HelloTypes
```

atau gunakan `-cp` opsi **` java `**perintah untuk mengatur classpath saat menjalankan setiap aplikasi.

```
java -cp target/helloswf-1.0.jar:/path/to/sdk/lib/*:/path/to/sdk/third-party/lib/* \
  example.swf.hello.HelloTypes
```

Gaya yang Anda gunakan terserah Anda. Jika Anda tidak kesulitan membangun kode, keduanya kemudian mencoba menjalankan contoh dan mendapatkan serangkaian kesalahan "NoClassDefFound", kemungkinan karena classpath disetel dengan tidak benar.

### Daftarkan domain, alur kerja, dan jenis aktivitas
<a name="swf-hello-run-register"></a>

Sebelum menjalankan pekerja dan starter alur kerja, Anda harus mendaftarkan domain dan alur kerja serta jenis aktivitas Anda. Kode untuk melakukan ini diimplementasikan di [Daftarkan alur kerja domain dan jenis aktivitas](#swf-hello-hellotypes).

Setelah membangun, dan jika Anda telah [mengatur CLASSPATH](#swf-hello-set-classpath), Anda dapat menjalankan kode registrasi dengan menjalankan perintah:

```
    echo 'Supply the name of one of the example classes as an argument.'
```

### Mulai aktivitas dan alur kerja pekerja
<a name="swf-hello-run-workers"></a>

Sekarang tipe telah terdaftar, Anda dapat memulai aktivitas dan alur kerja pekerja. Ini akan terus berjalan dan melakukan polling untuk tugas sampai mati, jadi Anda harus menjalankannya di jendela terminal terpisah, atau, jika Anda menjalankan di Linux, macOS, atau Unix, Anda dapat menggunakan `&` operator untuk menyebabkan masing-masing dari mereka menelurkan proses terpisah saat dijalankan.

```
    echo 'If there are arguments to the class, put them in quotes after the class name.'
    exit 1
```

Jika Anda menjalankan perintah ini di jendela terpisah, hilangkan `&` operator akhir dari setiap baris.

### Mulai eksekusi alur kerja
<a name="swf-hello-start-execution"></a>

Sekarang setelah pekerja aktivitas dan alur kerja Anda melakukan polling, Anda dapat memulai eksekusi alur kerja. Proses ini akan berjalan sampai alur kerja mengembalikan status selesai. Anda harus menjalankannya di jendela terminal baru (kecuali jika Anda menjalankan pekerja Anda sebagai proses melahirkan baru dengan menggunakan `&` operator).

```
fi
```

**catatan**  
Jika Anda ingin memberikan data input Anda sendiri, yang akan diteruskan terlebih dahulu ke alur kerja dan kemudian ke aktivitas, tambahkan ke baris perintah. Sebagai contoh:  

```
echo "## Running $className..."
```

Setelah Anda memulai eksekusi alur kerja, Anda harus mulai melihat output yang dikirimkan oleh kedua pekerja dan oleh eksekusi alur kerja itu sendiri. Ketika alur kerja akhirnya selesai, outputnya akan dicetak ke layar.

## Sumber lengkap untuk contoh ini
<a name="complete-source-for-this-example"></a>

Anda dapat menelusuri [sumber lengkap](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java/example_code/swf) untuk contoh ini di Github di repositori. *aws-java-developer-guide*

## Untuk informasi selengkapnya
<a name="for-more-information"></a>
+ Pekerja yang disajikan di sini dapat mengakibatkan tugas yang hilang jika mereka dimatikan saat jajak pendapat alur kerja masih berlangsung. Untuk mengetahui cara menutup pekerja dengan anggun, lihat Mematikan [Aktivitas dan Alur Kerja](swf-graceful-shutdown.md) Pekerja dengan Anggun.
+ Untuk mempelajari selengkapnya Amazon SWF, kunjungi [Amazon SWF](https://aws.amazon.com/swf/)halaman beranda atau lihat [Panduan Amazon SWF Pengembang](https://docs.aws.amazon.com/amazonswf/latest/developerguide/).
+ Anda dapat menggunakan AWS Flow Framework for Java untuk menulis alur kerja yang lebih kompleks dalam gaya Java yang elegan menggunakan anotasi. Untuk mempelajari lebih lanjut, lihat [Panduan Pengembang Java AWS Flow Framework untuk](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/).

# Lambda Tugas
<a name="swf-lambda-task"></a>

Sebagai alternatif, atau bersama dengan, Amazon SWF aktivitas, Anda dapat menggunakan fungsi [Lambda](https://aws.amazon.com/lambda/) untuk mewakili unit kerja dalam alur kerja Anda, dan menjadwalkannya mirip dengan aktivitas.

Topik ini berfokus pada bagaimana menerapkan Amazon SWF Lambda tugas menggunakan AWS SDK untuk Java. Untuk informasi selengkapnya tentang Lambda tugas secara umum, lihat [AWS Lambda Tugas](https://docs.aws.amazon.com/amazonswf/latest/developerguide/lambda-task.html) di Panduan Amazon SWF Pengembang.

## Siapkan peran IAM lintas layanan untuk menjalankan fungsi Lambda Anda
<a name="set-up-a-cross-service-iam-role-to-run-your-lambda-function"></a>

Sebelum Amazon SWF dapat menjalankan Lambda fungsi Anda, Anda perlu mengatur peran IAM untuk memberikan Amazon SWF izin untuk menjalankan Lambda fungsi atas nama Anda. Untuk informasi selengkapnya tentang cara melakukannya, lihat [AWS Lambda Tugas](https://docs.aws.amazon.com/amazonswf/latest/developerguide/lambda-task.html).

Anda akan memerlukan Nama Sumber Daya Amazon (ARN) dari peran IAM ini saat Anda mendaftarkan alur kerja yang akan menggunakan tugas. Lambda 

## Buat Lambda fungsi
<a name="create-a-lambda-function"></a>

Anda dapat menulis Lambda fungsi dalam sejumlah bahasa yang berbeda, termasuk Java. Untuk informasi selengkapnya tentang cara membuat, menyebarkan, dan menggunakan Lambda fungsi, lihat [Panduan AWS Lambda Pengembang](https://docs.aws.amazon.com/lambda/latest/dg/).

**catatan**  
Tidak masalah bahasa apa yang Anda gunakan untuk menulis Lambda fungsi Anda, itu dapat dijadwalkan dan dijalankan oleh Amazon SWF alur kerja *apa pun*, terlepas dari bahasa tempat kode alur kerja Anda ditulis. Amazon SWF menangani rincian menjalankan fungsi dan meneruskan data ke dan dari itu.

Berikut adalah Lambda fungsi sederhana yang dapat digunakan sebagai pengganti aktivitas dalam [Membangun Amazon SWF Aplikasi Sederhana](swf-hello.md).
+ Versi ini ditulis JavaScript, yang dapat dimasukkan langsung menggunakan [Konsol Manajemen AWS](https://console.aws.amazon.com/console/home):

  ```
  exports.handler = function(event, context) {
      context.succeed("Hello, " + event.who + "!");
  };
  ```
+ Berikut adalah fungsi yang sama yang ditulis di Java, yang juga dapat Anda gunakan dan jalankan di Lambda:

  ```
  package example.swf.hellolambda;
  
  import com.amazonaws.services.lambda.runtime.Context;
  import com.amazonaws.services.lambda.runtime.RequestHandler;
  import com.amazonaws.util.json.JSONException;
  import com.amazonaws.util.json.JSONObject;
  
  public class SwfHelloLambdaFunction implements RequestHandler<Object, Object> {
      @Override
      public Object handleRequest(Object input, Context context) {
          String who = "{SWF}";
          if (input != null) {
              JSONObject jso = null;
              try {
                  jso = new JSONObject(input.toString());
                  who = jso.getString("who");
              } catch (JSONException e) {
                  e.printStackTrace();
              }
          }
          return ("Hello, " + who + "!");
      }
  }
  ```
**catatan**  
Untuk mempelajari selengkapnya tentang penerapan fungsi Java ke Lambda, [lihat Membuat Paket Deployment (Java](https://docs.aws.amazon.com/lambda/latest/dg/lambda-java-how-to-create-deployment-package.html)) di AWS Lambda Panduan Pengembang. Anda juga akan ingin melihat bagian berjudul [Model Pemrograman untuk Lambda Fungsi Authoring di](https://docs.aws.amazon.com/lambda/latest/dg/java-programming-model.html) Java.

 Lambda fungsi mengambil *peristiwa* atau objek *input* sebagai parameter pertama, dan objek *konteks* sebagai yang kedua, yang memberikan informasi tentang permintaan untuk menjalankan Lambda fungsi. Fungsi khusus ini mengharapkan input berada di JSON, dengan `who` bidang yang disetel ke nama yang digunakan untuk membuat salam.

## Daftarkan alur kerja untuk digunakan dengan Lambda
<a name="register-a-workflow-for-use-with-lam"></a>

Agar alur kerja menjadwalkan Lambda fungsi, Anda harus memberikan nama peran IAM yang memberikan Amazon SWF izin untuk memanggil Lambda fungsi. Anda dapat mengatur ini selama pendaftaran alur kerja dengan menggunakan `withDefaultLambdaRole` atau `setDefaultLambdaRole` metode. [RegisterWorkflowTypeRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/RegisterWorkflowTypeRequest.html)

```
System.out.println("** Registering the workflow type '" + WORKFLOW + "-" + WORKFLOW_VERSION
        + "'.");
try {
    swf.registerWorkflowType(new RegisterWorkflowTypeRequest()
        .withDomain(DOMAIN)
        .withName(WORKFLOW)
        .withDefaultLambdaRole(lambda_role_arn)
        .withVersion(WORKFLOW_VERSION)
        .withDefaultChildPolicy(ChildPolicy.TERMINATE)
        .withDefaultTaskList(new TaskList().withName(TASKLIST))
        .withDefaultTaskStartToCloseTimeout("30"));
}
catch (TypeAlreadyExistsException e) {
```

## Jadwalkan Lambda tugas
<a name="schedule-a-lam-task"></a>

Menjadwalkan Lambda tugas mirip dengan menjadwalkan aktivitas. Anda memberikan [Keputusan](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/Decision.html) dengan `ScheduleLambdaFunction` [DecisionType](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/DecisionType.html)dan dengan [ScheduleLambdaFunctionDecisionAttributes](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/ScheduleLambdaFunctionDecisionAttributes.html).

```
running_functions == 0 && scheduled_functions == 0) {
AWSLambda lam = AWSLambdaClientBuilder.defaultClient();
GetFunctionConfigurationResult function_config =
    lam.getFunctionConfiguration(
            new GetFunctionConfigurationRequest()
                .withFunctionName("HelloFunction"));
String function_arn = function_config.getFunctionArn();

ScheduleLambdaFunctionDecisionAttributes attrs =
    new ScheduleLambdaFunctionDecisionAttributes()
        .withId("HelloFunction (Lambda task example)")
        .withName(function_arn)
        .withInput(workflow_input);

decisions.add(
```

Di`ScheduleLambdaFuntionDecisionAttributes`, Anda harus memberikan *nama*, yang merupakan ARN dari Lambda fungsi yang akan dipanggil, dan *id*, yang merupakan nama yang Amazon SWF akan digunakan untuk mengidentifikasi Lambda fungsi dalam log riwayat.

Anda juga dapat memberikan *input* opsional untuk Lambda fungsi tersebut dan menyetel *start untuk menutup nilai batas waktu*, yang merupakan jumlah detik Lambda fungsi yang diizinkan untuk dijalankan sebelum menghasilkan `LambdaFunctionTimedOut` acara.

**catatan**  
Kode ini menggunakan [AWSLambdaKlien](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/lambda/AWSLambdaClient.html) untuk mengambil ARN dari Lambda fungsi, mengingat nama fungsi. Anda dapat menggunakan teknik ini untuk menghindari hard-coding ARN lengkap (yang menyertakan Akun AWS ID Anda) dalam kode Anda.

## Tangani acara fungsi Lambda di decider Anda
<a name="handle-lam-function-events-in-your-decider"></a>

 Lambda tugas akan menghasilkan sejumlah peristiwa yang dapat Anda ambil tindakan saat melakukan polling untuk tugas keputusan di pekerja alur kerja Anda, sesuai dengan siklus hidup Lambda tugas Anda, dengan [EventType](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/EventType.html)nilai-nilai seperti`LambdaFunctionScheduled`,, dan. `LambdaFunctionStarted` `LambdaFunctionCompleted` Jika Lambda fungsi gagal, atau membutuhkan waktu lebih lama untuk dijalankan daripada nilai batas waktu yang ditetapkan, Anda akan menerima salah satu `LambdaFunctionFailed` atau jenis `LambdaFunctionTimedOut` acara, masing-masing.

```
boolean function_completed = false;
String result = null;

System.out.println("Executing the decision task for the history events: [");
for (HistoryEvent event : events) {
    System.out.println("  " + event);
    EventType event_type = EventType.fromValue(event.getEventType());
    switch(event_type) {
    case WorkflowExecutionStarted:
        workflow_input =
            event.getWorkflowExecutionStartedEventAttributes()
                 .getInput();
        break;
    case LambdaFunctionScheduled:
        scheduled_functions++;
        break;
    case ScheduleLambdaFunctionFailed:
        scheduled_functions--;
        break;
    case LambdaFunctionStarted:
        scheduled_functions--;
        running_functions++;
        break;
    case LambdaFunctionCompleted:
        running_functions--;
        function_completed = true;
        result = event.getLambdaFunctionCompletedEventAttributes()
                      .getResult();
        break;
    case LambdaFunctionFailed:
        running_functions--;
        break;
    case LambdaFunctionTimedOut:
        running_functions--;
        break;
```

## Menerima output dari Lambda fungsi Anda
<a name="receive-output-from-your-lam-function"></a>

Ketika Anda menerima `LambdaFunctionCompleted`[EventType](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/EventType.html), you can retrieve your 0 function’s return value by first calling `getLambdaFunctionCompletedEventAttributes` on [HistoryEvent](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/HistoryEvent.html)untuk mendapatkan [LambdaFunctionCompletedEventAttributes](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/LambdaFunctionCompletedEventAttributes.html)objek, dan kemudian memanggil `getResult` metodenya untuk mengambil output dari Lambda fungsi:

```
 LambdaFunctionCompleted:
running_functions--;
```

## Sumber lengkap untuk contoh ini
<a name="complete-source-for-this-example"></a>

Anda dapat menelusuri *sumber lengkap:github: `< awsdocs/aws-java-developer-guide/tree/master/doc\$1source/snippets/helloswf \$1lambda/> untuk contoh ini di Github* di repositori. *aws-java-developer-guide*

# Mematikan Aktivitas dan Alur Kerja Pekerja dengan Anggun
<a name="swf-graceful-shutdown"></a>

Topik [Membangun Amazon SWF Aplikasi Sederhana](swf-hello.md) menyediakan implementasi lengkap dari aplikasi alur kerja sederhana yang terdiri dari aplikasi pendaftaran, pekerja aktivitas dan alur kerja, dan starter alur kerja.

Kelas pekerja dirancang untuk berjalan terus menerus, polling untuk tugas yang dikirim oleh Amazon SWF untuk menjalankan kegiatan atau mengembalikan keputusan. Setelah permintaan jajak pendapat dibuat, Amazon SWF catat poller dan akan mencoba untuk menetapkan tugas untuk itu.

Jika pekerja alur kerja dihentikan selama polling panjang, Amazon SWF mungkin masih mencoba mengirim tugas ke pekerja yang dihentikan, sehingga tugas hilang (sampai tugas habis).

Salah satu cara untuk menangani situasi ini adalah dengan menunggu semua permintaan polling yang panjang untuk kembali sebelum pekerja dihentikan.

Dalam topik ini, kita akan menulis ulang activity worker dari`helloswf`, menggunakan shutdown hook Java untuk mencoba mematikan pekerja aktivitas secara anggun.

Berikut kode lengkapnya:

```
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import com.amazonaws.regions.Regions;
import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClientBuilder;
import com.amazonaws.services.simpleworkflow.model.ActivityTask;
import com.amazonaws.services.simpleworkflow.model.PollForActivityTaskRequest;
import com.amazonaws.services.simpleworkflow.model.RespondActivityTaskCompletedRequest;
import com.amazonaws.services.simpleworkflow.model.RespondActivityTaskFailedRequest;
import com.amazonaws.services.simpleworkflow.model.TaskList;

public class ActivityWorkerWithGracefulShutdown {

    private static final AmazonSimpleWorkflow swf =
        AmazonSimpleWorkflowClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build();
    private static final CountDownLatch waitForTermination = new CountDownLatch(1);
    private static volatile boolean terminate = false;

    private static String executeActivityTask(String input) throws Throwable {
        return "Hello, " + input + "!";
    }

    public static void main(String[] args) {
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                try {
                    terminate = true;
                    System.out.println("Waiting for the current poll request" +
                            " to return before shutting down.");
                    waitForTermination.await(60, TimeUnit.SECONDS);
                }
                catch (InterruptedException e) {
                    // ignore
                }
            }
        });
        try {
            pollAndExecute();
        }
        finally {
            waitForTermination.countDown();
        }
    }

    public static void pollAndExecute() {
        while (!terminate) {
            System.out.println("Polling for an activity task from the tasklist '"
                    + HelloTypes.TASKLIST + "' in the domain '" +
                    HelloTypes.DOMAIN + "'.");

            ActivityTask task = swf.pollForActivityTask(new PollForActivityTaskRequest()
                .withDomain(HelloTypes.DOMAIN)
                .withTaskList(new TaskList().withName(HelloTypes.TASKLIST)));

            String taskToken = task.getTaskToken();

            if (taskToken != null) {
                String result = null;
                Throwable error = null;

                try {
                    System.out.println("Executing the activity task with input '"
                            + task.getInput() + "'.");
                    result = executeActivityTask(task.getInput());
                }
                catch (Throwable th) {
                    error = th;
                }

                if (error == null) {
                    System.out.println("The activity task succeeded with result '"
                            + result + "'.");
                    swf.respondActivityTaskCompleted(
                        new RespondActivityTaskCompletedRequest()
                            .withTaskToken(taskToken)
                            .withResult(result));
                }
                else {
                    System.out.println("The activity task failed with the error '"
                            + error.getClass().getSimpleName() + "'.");
                    swf.respondActivityTaskFailed(
                        new RespondActivityTaskFailedRequest()
                            .withTaskToken(taskToken)
                            .withReason(error.getClass().getSimpleName())
                            .withDetails(error.getMessage()));
                }
            }
        }
    }
}
```

Dalam versi ini, kode polling yang ada dalam `main` fungsi dalam versi aslinya telah dipindahkan ke metodenya sendiri,`pollAndExecute`.

`main`Fungsi sekarang menggunakan [CountDownLatch](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/CountDownLatch.html)dalam hubungannya dengan [kait shutdown](https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Runtime.html) untuk menyebabkan thread menunggu hingga 60 detik setelah penghentiannya diminta sebelum membiarkan thread dimatikan.

# Mendaftarkan Domain
<a name="prog-services-swf-register-domain"></a>

Setiap alur kerja dan aktivitas [Amazon SWF](https://aws.amazon.com/swf/)membutuhkan *domain* untuk dijalankan.

1. Buat [RegisterDomainRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/RegisterDomainRequest.html)objek baru, berikan setidaknya nama domain dan periode retensi eksekusi alur kerja (parameter ini keduanya diperlukan).

1. Panggil [AmazonSimpleWorkflowClientmetode.registerDomain](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowClient.html#registerDomain-com.amazonaws.services.simpleworkflow.model.RegisterDomainRequest-) dengan objek. *RegisterDomainRequest*

1. Tangkap [DomainAlreadyExistsException](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/DomainAlreadyExistsException.html)jika domain yang Anda minta sudah ada (dalam hal ini, biasanya tidak ada tindakan yang diperlukan).

Kode berikut menunjukkan prosedur ini:

```
public void register_swf_domain(AmazonSimpleWorkflowClient swf, String name)
{
    RegisterDomainRequest request = new RegisterDomainRequest().withName(name);
    request.setWorkflowExecutionRetentionPeriodInDays("10");
    try
    {
        swf.registerDomain(request);
    }
    catch (DomainAlreadyExistsException e)
    {
        System.out.println("Domain already exists!");
    }
}
```

# Daftar Domain
<a name="prog-services-swf-list-domains"></a>

Anda dapat membuat daftar [Amazon SWF](https://aws.amazon.com/swf/)domain yang terkait dengan akun dan AWS wilayah Anda berdasarkan jenis pendaftaran.

1. Buat [ListDomainsRequest](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/ListDomainsRequest.html)objek, dan tentukan status pendaftaran domain yang Anda minati—ini diperlukan.

1. Panggil [AmazonSimpleWorkflowClient.listDomains dengan objek](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/AmazonSimpleWorkflowClient.html#listDomains-com.amazonaws.services.simpleworkflow.model.ListDomainsRequest-). *ListDomainRequest* Hasil disediakan dalam suatu [DomainInfos](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/DomainInfos.html)objek.

1. Panggil [getDomainInfos](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/DomainInfos.html#getDomainInfos--)objek yang dikembalikan untuk mendapatkan daftar [DomainInfo](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/DomainInfo.html)objek.

1. Panggil [getName](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/simpleworkflow/model/DomainInfo.html#getName--) pada setiap *DomainInfo*objek untuk mendapatkan namanya.

Kode berikut menunjukkan prosedur ini:

```
public void list_swf_domains(AmazonSimpleWorkflowClient swf)
{
    ListDomainsRequest request = new ListDomainsRequest();
    request.setRegistrationStatus("REGISTERED");
    DomainInfos domains = swf.listDomains(request);
    System.out.println("Current Domains:");
    for (DomainInfo di : domains.getDomainInfos())
    {
        System.out.println(" * " + di.getName());
    }
}
```

# Sampel Kode disertakan dengan SDK
<a name="java-dg-samples"></a>

Ini AWS SDK untuk Java dikemas dengan sampel kode yang menunjukkan banyak fitur SDK dalam program yang dapat dibangun dan dapat dijalankan. Anda dapat mempelajari atau memodifikasi ini untuk menerapkan AWS solusi Anda sendiri menggunakan AWS SDK untuk Java.

## Cara Mendapatkan Sampel
<a name="how-to-get-the-samples"></a>

Sampel AWS SDK untuk Java kode disediakan di direktori *sampel* SDK. Jika Anda mengunduh dan menginstal SDK menggunakan informasi di [Siapkan AWS SDK untuk Java](setup-install.md), Anda sudah memiliki sampel di sistem Anda.

Anda juga dapat melihat sampel terbaru di AWS SDK untuk Java GitHub repositori, di direktori [src/samples](https://github.com/aws/aws-sdk-java/tree/master/src/samples).

## Membangun dan Menjalankan Sampel Menggunakan Command Line
<a name="samples-cmdline"></a>

Sampel termasuk skrip build [Ant](http://ant.apache.org/) sehingga Anda dapat dengan mudah membangun dan menjalankannya dari baris perintah. Setiap sampel juga berisi file README dalam format HTML yang berisi informasi khusus untuk setiap sampel.

**catatan**  
Jika Anda menelusuri kode sampel GitHub, klik tombol **Raw** di tampilan kode sumber saat melihat file README.html sampel. Dalam mode mentah, HTML akan dirender sebagaimana dimaksud di browser Anda.

### Prasyarat
<a name="prerequisitessamples"></a>

Sebelum menjalankan salah satu AWS SDK untuk Java sampel, Anda perlu mengatur AWS kredensil Anda di lingkungan atau dengan AWS CLI, seperti yang ditentukan dalam [Mengatur AWS Kredensial dan](setup-credentials.md) Wilayah untuk Pengembangan. Sampel menggunakan rantai penyedia kredensi default bila memungkinkan. Jadi dengan menetapkan kredensil Anda dengan cara ini, Anda dapat menghindari praktik berisiko memasukkan AWS kredensil Anda ke dalam file dalam direktori kode sumber (di mana mereka mungkin secara tidak sengaja diperiksa dan dibagikan secara publik).

### Menjalankan Sampel
<a name="running-the-samples"></a>

1. Ubah ke direktori yang berisi kode sampel. Misalnya, jika Anda berada di direktori root unduhan AWS SDK dan ingin menjalankan `AwsConsoleApp` sampel, Anda akan mengetik:

   ```
   cd samples/AwsConsoleApp
   ```

1. Bangun dan jalankan sampel dengan Ant. Target build default melakukan kedua tindakan tersebut, sehingga Anda cukup memasukkan:

   ```
   ant
   ```

Sampel mencetak informasi ke output standar—misalnya:

```
===========================================

Welcome to the {AWS} Java SDK!

===========================================
You have access to 4 Availability Zones.

You have 0 {EC2} instance(s) running.

You have 13 Amazon SimpleDB domain(s) containing a total of 62 items.

You have 23 {S3} bucket(s), containing 44 objects with a total size of 154767691 bytes.
```

## Membangun dan Menjalankan Sampel Menggunakan IDE Eclipse
<a name="building-and-running-the-samples-using-the-eclipse-ide"></a>

Jika Anda menggunakan AWS Toolkit for Eclipse, Anda juga dapat memulai proyek baru di Eclipse berdasarkan AWS SDK untuk Java atau menambahkan SDK ke proyek Java yang ada.

### Prasyarat
<a name="id1samples"></a>

Setelah menginstal AWS Toolkit for Eclipse, kami sarankan untuk mengonfigurasi Toolkit dengan kredensil keamanan Anda. Anda dapat melakukan ini kapan saja dengan memilih **Preferensi** dari menu **Window** di Eclipse, dan kemudian memilih bagian ** AWS Toolkit**.

### Menjalankan Sampel
<a name="id2"></a>

1. Buka Eclipse.

1. Buat proyek AWS Java baru. **Di Eclipse, pada menu **File**, pilih **New**, dan kemudian klik Project.** Wizard **Proyek Baru** terbuka.

1. Perluas ** AWS **kategori, lalu pilih ** AWS Java Project**.

1. Pilih **Berikutnya**. Halaman pengaturan proyek ditampilkan.

1. Masukkan nama di kotak **Nama Proyek**. Grup AWS SDK untuk Java Sampel menampilkan sampel yang tersedia di SDK, seperti yang dijelaskan sebelumnya.

1. Pilih sampel yang ingin Anda sertakan dalam proyek Anda dengan memilih setiap kotak centang.

1. Masukkan AWS kredensil Anda. Jika Anda sudah mengonfigurasi AWS Toolkit for Eclipse dengan kredensi Anda, ini akan diisi secara otomatis.

1. Pilih **Selesai**. Proyek ini dibuat dan ditambahkan ke **Project Explorer**.

1. Pilih `.java` file sampel yang ingin Anda jalankan. Misalnya, untuk Amazon S3 sampel, pilih`S3Sample.java`.

1. Pilih **Jalankan** dari menu **Jalankan**.

1. Klik kanan proyek di **Project Explorer**, arahkan ke **Build Path**, lalu pilih **Add Libraries**.

1. Pilih ** AWS Java SDK**, pilih **Berikutnya**, dan kemudian ikuti petunjuk di layar yang tersisa.