

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

# Contoh terpandu untuk memanggil Layanan AWS menggunakan AWS SDK for C\$1\$1
<a name="programming-services"></a>

Jika Anda baru AWS atau contoh AWS kode, kami sarankan Anda mulai dengan[Memulai contoh kode](getting-started-code-examples.md).

Kode sumber yang menunjukkan cara bekerja dengan AWS layanan menggunakan AWS SDK untuk C\$1\$1 tersedia di bagian [Contoh kode](cpp_code_examples.md) panduan ini atau langsung di [Repositori Contoh AWS Kode](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code) di. GitHub 

Bagian ini memilih beberapa AWS layanan dan memandu Anda melalui contoh yang menggunakannya. Contoh terpandu berikut adalah bagian dari apa yang tersedia di Github.


**Contoh layanan dengan penjelasan tambahan (lihat [Repositori Contoh AWS Kode untuk daftar](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code) lengkap)**  

| Layanan | Ringkasan tentang apa yang disediakan layanan untuk program Anda | 
| --- | --- | 
| [Amazon CloudWatch](examples-cloudwatch.md) | Mengumpulkan dan memantau metrik untuk AWS sumber daya yang Anda gunakan | 
| [Amazon DynamoDB](examples-dynamodb.md) | Layanan basis data NoSQL | 
| [Amazon Elastic Compute Cloud](examples-ec2.md) (Amazon EC2) | Kapasitas komputasi yang aman dan dapat diubah ukurannya | 
| [Amazon Simple Storage Service](examples-s3.md) (Amazon S3) | Penyimpanan dan pengambilan data (objek ke dalam ember) | 
| [Amazon Simple Queue Service](examples-sqs.md) (Amazon SQS) | Layanan antrian pesan untuk mengirim, menyimpan, dan menerima pesan antar komponen perangkat lunak | 

Ada juga contoh yang menunjukkan cara menggunakan metode [Asynchronous](async-methods.md).

Untuk mengusulkan contoh kode baru ke tim AWS dokumentasi, lihat [Pedoman kontribusi](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/CONTRIBUTING.md) GitHub untuk membuat permintaan baru. Tim lebih suka membuat contoh kode yang menunjukkan skenario luas daripada panggilan API individual.

**Menggunakan Contoh Kode di Windows**

Jika Anda membuat contoh di Windows dengan SDK versi 1.9, lihat. [Memecahkan masalah AWS SDK for C\$1\$1 build](troubleshooting-cmake.md)

# CloudWatch Contoh Amazon menggunakan AWS SDK untuk C\$1\$1
<a name="examples-cloudwatch"></a>

Amazon CloudWatch (CloudWatch) adalah layanan pemantauan untuk sumber daya AWS cloud dan aplikasi yang Anda jalankan AWS. Anda dapat menggunakan contoh-contoh berikut untuk memprogram [CloudWatch](https://aws.amazon.com/cloudwatch)menggunakan AWS SDK untuk C\$1\$1.

Amazon CloudWatch memantau AWS sumber daya 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. CloudWatchalarm mengirim pemberitahuan atau secara otomatis membuat perubahan pada sumber daya yang Anda pantau berdasarkan aturan yang Anda tetapkan.

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

**catatan**  
Hanya kode yang diperlukan untuk menunjukkan teknik tertentu yang disediakan dalam Panduan ini, tetapi [kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp). Pada GitHub Anda dapat mengunduh satu file sumber atau Anda dapat mengkloning repositori secara lokal untuk mendapatkan, membangun, dan menjalankan semua contoh.

**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>

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

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

Untuk membuat daftar CloudWatch metrik, buat [ListMetricsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_list_metrics_request.html)dan panggil `ListMetrics` fungsi. CloudWatchClient 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 [Referensi CloudWatch Metrik dan Dimensi](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html) Amazon di CloudWatch Panduan Pengguna Amazon.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/monitoring/CloudWatchClient.h>
#include <aws/monitoring/model/ListMetricsRequest.h>
#include <aws/monitoring/model/ListMetricsResult.h>
#include <iomanip>
#include <iostream>
```

 **Kode** 

```
        Aws::CloudWatch::CloudWatchClient cw;
        Aws::CloudWatch::Model::ListMetricsRequest request;

        if (argc > 1)
        {
            request.SetMetricName(argv[1]);
        }

        if (argc > 2)
        {
            request.SetNamespace(argv[2]);
        }

        bool done = false;
        bool header = false;
        while (!done)
        {
            auto outcome = cw.ListMetrics(request);
            if (!outcome.IsSuccess())
            {
                std::cout << "Failed to list CloudWatch metrics:" <<
                    outcome.GetError().GetMessage() << std::endl;
                break;
            }

            if (!header)
            {
                std::cout << std::left << std::setw(48) << "MetricName" <<
                    std::setw(32) << "Namespace" << "DimensionNameValuePairs" <<
                    std::endl;
                header = true;
            }

            const auto &metrics = outcome.GetResult().GetMetrics();
            for (const auto &metric : metrics)
            {
                std::cout << std::left << std::setw(48) <<
                    metric.GetMetricName() << std::setw(32) <<
                    metric.GetNamespace();
                const auto &dimensions = metric.GetDimensions();
                for (auto iter = dimensions.cbegin();
                    iter != dimensions.cend(); ++iter)
                {
                    const auto &dimkv = *iter;
                    std::cout << dimkv.GetName() << " = " << dimkv.GetValue();
                    if (iter + 1 != dimensions.cend())
                    {
                        std::cout << ", ";
                    }
                }
                std::cout << std::endl;
            }

            const auto &next_token = outcome.GetResult().GetNextToken();
            request.SetNextToken(next_token);
            done = next_token.empty();
        }
```

Metrik dikembalikan dalam a [ListMetricsResult](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_list_metrics_result.html)dengan memanggil `GetMetrics` fungsinya. Hasilnya mungkin *paged.* Untuk mengambil batch hasil berikutnya, panggil `SetNextToken` objek permintaan asli dengan nilai kembali `GetNextToken` fungsi objek, dan meneruskan `ListMetricsResult` objek permintaan yang dimodifikasi kembali ke `ListMetrics` panggilan lain.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/cloudwatch/list_metrics.cpp).

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

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

Sejumlah AWS layanan mempublikasikan [metriknya 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 kustom menggunakan namespace Anda sendiri (asalkan tidak dimulai dengan). `AWS/`

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

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

Untuk mempublikasikan data metrik Anda sendiri, panggil `PutMetricData` fungsi dengan file [PutMetricDataRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_put_metric_data_request.html). CloudWatchClient `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-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_metric_datum.html)objek.

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

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/monitoring/CloudWatchClient.h>
#include <aws/monitoring/model/PutMetricDataRequest.h>
#include <iostream>
```

 **Kode** 

```
        Aws::CloudWatch::CloudWatchClient cw;

        Aws::CloudWatch::Model::Dimension dimension;
        dimension.SetName("UNIQUE_PAGES");
        dimension.SetValue("URLS");

        Aws::CloudWatch::Model::MetricDatum datum;
        datum.SetMetricName("PAGES_VISITED");
        datum.SetUnit(Aws::CloudWatch::Model::StandardUnit::None);
        datum.SetValue(data_point);
        datum.AddDimensions(dimension);

        Aws::CloudWatch::Model::PutMetricDataRequest request;
        request.SetNamespace("SITE/TRAFFIC");
        request.AddMetricData(datum);

        auto outcome = cw.PutMetricData(request);
        if (!outcome.IsSuccess())
        {
            std::cout << "Failed to put sample metric data:" <<
                outcome.GetError().GetMessage() << std::endl;
        }
        else
        {
            std::cout << "Successfully put sample metric data" << std::endl;
        }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/cloudwatch/put_metric_data.cpp).

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

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

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

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

Untuk membuat alarm berdasarkan CloudWatch metrik, panggil `PutMetricAlarm` fungsi dengan [PutMetricAlarmRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_put_metric_alarm_request.html)diisi dengan kondisi alarm. CloudWatchClient

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/monitoring/CloudWatchClient.h>
#include <aws/monitoring/model/PutMetricAlarmRequest.h>
#include <iostream>
```

 **Kode** 

```
        Aws::CloudWatch::CloudWatchClient cw;
        Aws::CloudWatch::Model::PutMetricAlarmRequest request;
        request.SetAlarmName(alarm_name);
        request.SetComparisonOperator(
            Aws::CloudWatch::Model::ComparisonOperator::GreaterThanThreshold);
        request.SetEvaluationPeriods(1);
        request.SetMetricName("CPUUtilization");
        request.SetNamespace("AWS/EC2");
        request.SetPeriod(60);
        request.SetStatistic(Aws::CloudWatch::Model::Statistic::Average);
        request.SetThreshold(70.0);
        request.SetActionsEnabled(false);
        request.SetAlarmDescription("Alarm when server CPU exceeds 70%");
        request.SetUnit(Aws::CloudWatch::Model::StandardUnit::Seconds);

        Aws::CloudWatch::Model::Dimension dimension;
        dimension.SetName("InstanceId");
        dimension.SetValue(instanceId);

        request.AddDimensions(dimension);

        auto outcome = cw.PutMetricAlarm(request);
        if (!outcome.IsSuccess())
        {
            std::cout << "Failed to create CloudWatch alarm:" <<
                outcome.GetError().GetMessage() << std::endl;
        }
        else
        {
            std::cout << "Successfully created CloudWatch alarm " << alarm_name
                << std::endl;
        }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/cloudwatch/put_metric_alarm.cpp).

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

Untuk membuat daftar CloudWatch alarm yang telah Anda buat, panggil `DescribeAlarms` fungsi dengan [DescribeAlarmsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_describe_alarms_request.html)yang dapat Anda gunakan untuk mengatur opsi untuk hasilnya. CloudWatchClient

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/monitoring/CloudWatchClient.h>
#include <aws/monitoring/model/DescribeAlarmsRequest.h>
#include <aws/monitoring/model/DescribeAlarmsResult.h>
#include <iomanip>
#include <iostream>
```

 **Kode** 

```
        Aws::CloudWatch::CloudWatchClient cw;
        Aws::CloudWatch::Model::DescribeAlarmsRequest request;
        request.SetMaxRecords(1);

        bool done = false;
        bool header = false;
        while (!done)
        {
            auto outcome = cw.DescribeAlarms(request);
            if (!outcome.IsSuccess())
            {
                std::cout << "Failed to describe CloudWatch alarms:" <<
                    outcome.GetError().GetMessage() << std::endl;
                break;
            }

            if (!header)
            {
                std::cout << std::left <<
                    std::setw(32) << "Name" <<
                    std::setw(64) << "Arn" <<
                    std::setw(64) << "Description" <<
                    std::setw(20) << "LastUpdated" <<
                    std::endl;
                header = true;
            }

            const auto &alarms = outcome.GetResult().GetMetricAlarms();
            for (const auto &alarm : alarms)
            {
                std::cout << std::left <<
                    std::setw(32) << alarm.GetAlarmName() <<
                    std::setw(64) << alarm.GetAlarmArn() <<
                    std::setw(64) << alarm.GetAlarmDescription() <<
                    std::setw(20) <<
                    alarm.GetAlarmConfigurationUpdatedTimestamp().ToGmtString(
                        SIMPLE_DATE_FORMAT_STR) <<
                    std::endl;
            }

            const auto &next_token = outcome.GetResult().GetNextToken();
            request.SetNextToken(next_token);
            done = next_token.empty();
        }
```

Daftar alarm dapat diperoleh dengan memanggil `getMetricAlarms` [DescribeAlarmsResult](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_describe_alarms_result.html)yang dikembalikan oleh`DescribeAlarms`.

Hasilnya mungkin *paged.* Untuk mengambil batch hasil berikutnya, panggil `SetNextToken` objek permintaan asli dengan nilai kembali `GetNextToken` fungsi objek, dan meneruskan `DescribeAlarmsResult` objek permintaan yang dimodifikasi kembali ke `DescribeAlarms` panggilan lain.

**catatan**  
Anda juga dapat mengambil alarm untuk metrik tertentu dengan menggunakan fungsi CloudWatchClient's. `DescribeAlarmsForMetric` Penggunaannya mirip dengan`DescribeAlarms`.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/cloudwatch/describe_alarms.cpp).

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

Untuk menghapus CloudWatch alarm, panggil `DeleteAlarms` fungsi dengan [DeleteAlarmsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_delete_alarms_request.html)berisi satu atau beberapa nama alarm yang ingin Anda hapus. CloudWatchClient

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/monitoring/CloudWatchClient.h>
#include <aws/monitoring/model/DeleteAlarmsRequest.h>
#include <iostream>
```

 **Kode** 

```
        Aws::CloudWatch::CloudWatchClient cw;
        Aws::CloudWatch::Model::DeleteAlarmsRequest request;
        request.AddAlarmNames(alarm_name);

        auto outcome = cw.DeleteAlarms(request);
        if (!outcome.IsSuccess())
        {
            std::cout << "Failed to delete CloudWatch alarm:" <<
                outcome.GetError().GetMessage() << std::endl;
        }
        else
        {
            std::cout << "Successfully deleted CloudWatch alarm " << alarm_name
                << std::endl;
        }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/cloudwatch/delete_alarm.cpp).

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

# 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 Amazon EC2 secara otomatis.

Tindakan alarm dapat ditambahkan ke alarm dengan menggunakan `SetAlarmActions` fungsi saat [membuat alarm](examples-cloudwatch-create-alarms.md). [PutMetricAlarmRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_put_metric_alarm_request.html)

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

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

Untuk mengaktifkan tindakan alarm untuk CloudWatch alarm, panggil CloudWatchClient's `EnableAlarmActions` dengan [EnableAlarmActionsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_enable_alarm_actions_request.html)berisi satu atau beberapa nama alarm yang tindakannya ingin Anda aktifkan.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/monitoring/CloudWatchClient.h>
#include <aws/monitoring/model/EnableAlarmActionsRequest.h>
#include <aws/monitoring/model/PutMetricAlarmRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::CloudWatch::CloudWatchClient cw;
    Aws::CloudWatch::Model::PutMetricAlarmRequest request;
    request.SetAlarmName(alarm_name);
    request.SetComparisonOperator(
        Aws::CloudWatch::Model::ComparisonOperator::GreaterThanThreshold);
    request.SetEvaluationPeriods(1);
    request.SetMetricName("CPUUtilization");
    request.SetNamespace("AWS/EC2");
    request.SetPeriod(60);
    request.SetStatistic(Aws::CloudWatch::Model::Statistic::Average);
    request.SetThreshold(70.0);
    request.SetActionsEnabled(false);
    request.SetAlarmDescription("Alarm when server CPU exceeds 70%");
    request.SetUnit(Aws::CloudWatch::Model::StandardUnit::Seconds);
    request.AddAlarmActions(actionArn);

    Aws::CloudWatch::Model::Dimension dimension;
    dimension.SetName("InstanceId");
    dimension.SetValue(instanceId);
    request.AddDimensions(dimension);

    auto outcome = cw.PutMetricAlarm(request);
    if (!outcome.IsSuccess())
    {
        std::cout << "Failed to create CloudWatch alarm:" <<
            outcome.GetError().GetMessage() << std::endl;
        return;
    }

    Aws::CloudWatch::Model::EnableAlarmActionsRequest enable_request;
    enable_request.AddAlarmNames(alarm_name);

    auto enable_outcome = cw.EnableAlarmActions(enable_request);
    if (!enable_outcome.IsSuccess())
    {
        std::cout << "Failed to enable alarm actions:" <<
            enable_outcome.GetError().GetMessage() << std::endl;
        return;
    }

    std::cout << "Successfully created alarm " << alarm_name <<
        " and enabled actions on it." << std::endl;
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/cloudwatch/enable_alarm_actions.cpp).

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

Untuk menonaktifkan tindakan alarm untuk CloudWatch alarm, hubungi CloudWatchClient's `DisableAlarmActions` dengan [DisableAlarmActionsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-monitoring/html/class_aws_1_1_cloud_watch_1_1_model_1_1_disable_alarm_actions_request.html)berisi satu atau beberapa nama alarm yang tindakannya ingin Anda nonaktifkan.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/monitoring/CloudWatchClient.h>
#include <aws/monitoring/model/DisableAlarmActionsRequest.h>
#include <iostream>
```

 **Kode** 

```
        Aws::CloudWatch::CloudWatchClient cw;

        Aws::CloudWatch::Model::DisableAlarmActionsRequest disableAlarmActionsRequest;
        disableAlarmActionsRequest.AddAlarmNames(alarm_name);

        auto disableAlarmActionsOutcome = cw.DisableAlarmActions(disableAlarmActionsRequest);
        if (!disableAlarmActionsOutcome.IsSuccess())
        {
            std::cout << "Failed to disable actions for alarm " << alarm_name <<
                ": " << disableAlarmActionsOutcome.GetError().GetMessage() <<
                std::endl;
        }
        else
        {
            std::cout << "Successfully disabled actions for alarm " <<
                alarm_name << std::endl;
        }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/cloudwatch/disable_alarm_actions.cpp).

## Informasi Selengkapnya
<a name="more-information"></a>
+  [Membuat 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/PutMetricAlarm.html)di Referensi CloudWatch API Amazon
+  [EnableAlarmActions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/EnableAlarmActions.html)di Referensi CloudWatch API Amazon
+  [DisableAlarmActions](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/DisableAlarmActions.html)di Referensi CloudWatch API Amazon

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

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

**catatan**  
[Cuplikan kode ini mengasumsikan bahwa Anda memahami materi dalam [Memulai Menggunakan AWS SDK untuk C\$1\$1](getting-started.md) dan telah mengonfigurasi AWS kredensi default menggunakan informasi dalam Menyediakan Kredensil. AWS](credentials.md)

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

Untuk menambahkan CloudWatch peristiwa khusus, panggil `PutEvents` fungsi dengan [PutEventsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-eventbridge/html/class_aws_1_1_event_bridge_1_1_model_1_1_put_events_request.html)objek yang berisi satu atau beberapa [PutEventsRequestEntry](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-eventbridge/html/class_aws_1_1_event_bridge_1_1_model_1_1_put_events_request_entry.html)objek yang memberikan detail tentang setiap peristiwa. CloudWatchEventsClient 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`.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/events/EventBridgeClient.h>
#include <aws/events/model/PutEventsRequest.h>
#include <aws/events/model/PutEventsResult.h>
#include <aws/core/utils/Outcome.h>
#include <iostream>
```

 **Kode** 

```
        Aws::CloudWatchEvents::EventBridgeClient cwe;

        Aws::CloudWatchEvents::Model::PutEventsRequestEntry event_entry;
        event_entry.SetDetail(MakeDetails(event_key, event_value));
        event_entry.SetDetailType("sampleSubmitted");
        event_entry.AddResources(resource_arn);
        event_entry.SetSource("aws-sdk-cpp-cloudwatch-example");

        Aws::CloudWatchEvents::Model::PutEventsRequest request;
        request.AddEntries(event_entry);

        auto outcome = cwe.PutEvents(request);
        if (!outcome.IsSuccess())
        {
            std::cout << "Failed to post CloudWatch event: " <<
                outcome.GetError().GetMessage() << std::endl;
        }
        else
        {
            std::cout << "Successfully posted CloudWatch event" << std::endl;
        }
```

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

Untuk membuat atau memperbarui aturan, panggil `PutRule` fungsi dengan nama aturan dan parameter opsional seperti [pola peristiwa](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html), peran IAM untuk dikaitkan dengan aturan, dan [ekspresi penjadwalan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html) yang menjelaskan seberapa sering aturan dijalankan. CloudWatchEventsClient [PutRuleRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-eventbridge/html/class_aws_1_1_event_bridge_1_1_model_1_1_put_rule_request.html)

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/events/EventBridgeClient.h>
#include <aws/events/model/PutRuleRequest.h>
#include <aws/events/model/PutRuleResult.h>
#include <aws/core/utils/Outcome.h>
#include <iostream>
```

 **Kode** 

```
        Aws::CloudWatchEvents::EventBridgeClient cwe;
        Aws::CloudWatchEvents::Model::PutRuleRequest request;
        request.SetName(rule_name);
        request.SetRoleArn(role_arn);
        request.SetScheduleExpression("rate(5 minutes)");
        request.SetState(Aws::CloudWatchEvents::Model::RuleState::ENABLED);

        auto outcome = cwe.PutRule(request);
        if (!outcome.IsSuccess())
        {
            std::cout << "Failed to create CloudWatch events rule " <<
                rule_name << ": " << outcome.GetError().GetMessage() <<
                std::endl;
        }
        else
        {
            std::cout << "Successfully created CloudWatch events rule " <<
                rule_name << " with resulting Arn " <<
                outcome.GetResult().GetRuleArn() << std::endl;
        }
```

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

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

Untuk menambahkan target ke aturan, panggil `PutTargets` fungsi dengan [PutTargetsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-eventbridge/html/class_aws_1_1_event_bridge_1_1_model_1_1_put_targets_request.html)berisi aturan untuk diperbarui dan daftar target untuk ditambahkan ke aturan. CloudWatchEventsClient

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/events/EventBridgeClient.h>
#include <aws/events/model/PutTargetsRequest.h>
#include <aws/events/model/PutTargetsResult.h>
#include <aws/core/utils/Outcome.h>
#include <iostream>
```

 **Kode** 

```
        Aws::CloudWatchEvents::EventBridgeClient cwe;

        Aws::CloudWatchEvents::Model::Target target;
        target.SetArn(lambda_arn);
        target.SetId(target_id);

        Aws::CloudWatchEvents::Model::PutTargetsRequest request;
        request.SetRule(rule_name);
        request.AddTargets(target);

        auto putTargetsOutcome = cwe.PutTargets(request);
        if (!putTargetsOutcome.IsSuccess())
        {
            std::cout << "Failed to create CloudWatch events target for rule "
                << rule_name << ": " <<
                putTargetsOutcome.GetError().GetMessage() << std::endl;
        }
        else
        {
            std::cout <<
                "Successfully created CloudWatch events target for rule "
                << rule_name << std::endl;
        }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/eventbridge/put_targets.cpp).

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

# Contoh Amazon DynamoDB menggunakan AWS SDK untuk C\$1\$1
<a name="examples-dynamodb"></a>

Amazon DynamoDB adalah layanan basis data NoSQL terkelola sepenuhnya yang menyediakan performa cepat dan dapat diprediksi dengan skalabilitas tanpa hambatan. Contoh berikut menunjukkan bagaimana Anda dapat memprogram [Amazon DynamoDB menggunakan](https://aws.amazon.com/dynamodb) file. AWS SDK untuk C\$1\$1

**catatan**  
Hanya kode yang diperlukan untuk menunjukkan teknik tertentu yang disediakan dalam Panduan ini, tetapi [kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp). Pada GitHub Anda dapat mengunduh satu file sumber atau Anda dapat mengkloning repositori secara lokal untuk mendapatkan, membangun, dan menjalankan semua contoh.

**Topics**
+ [Bekerja dengan Tabel di DynamoDB](examples-dynamodb-tables.md)
+ [Bekerja dengan Item di DynamoDB](examples-dynamodb-items.md)

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

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

Untuk setiap tabel, Anda harus mendefinisikan:
+ *Nama* tabel yang unik untuk Anda Akun AWS dan Wilayah AWS.
+ *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-cpp/latest/api/aws-cpp-sdk-dynamodb/html/namespace_aws_1_1_dynamo_d_b_1_1_model.html#a4b39ae66214e022d3737079d071e4bcb.html) Nilai kuncinya bisa 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 Pengembang Amazon DynamoDB.
+  Nilai *throughput yang disediakan* yang menentukan jumlah unit read/write kapasitas cadangan untuk tabel.
**catatan**  
 Harga [Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/) didasarkan pada nilai throughput yang disediakan yang Anda tetapkan pada tabel, 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 metode `CreateTable` klien [DynamoDB untuk membuat tabel DynamoDB](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_dynamo_d_b_client.html) 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. `CreateTable`adalah operasi asinkron. `GetTableStatus`akan mengembalikan CREATING sampai tabel AKTIF dan siap digunakan.

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

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

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/AttributeDefinition.h>
#include <aws/dynamodb/model/CreateTableRequest.h>
#include <aws/dynamodb/model/KeySchemaElement.h>
#include <aws/dynamodb/model/ProvisionedThroughput.h>
#include <aws/dynamodb/model/ScalarAttributeType.h>
#include <iostream>
```

 **Kode** 

```
//! Create an Amazon DynamoDB table.
/*!
  \sa createTable()
  \param tableName: Name for the DynamoDB table.
  \param primaryKey: Primary key for the DynamoDB table.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::DynamoDB::createTable(const Aws::String &tableName,
                                   const Aws::String &primaryKey,
                                   const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration);

    std::cout << "Creating table " << tableName <<
              " with a simple primary key: \"" << primaryKey << "\"." << std::endl;

    Aws::DynamoDB::Model::CreateTableRequest request;

    Aws::DynamoDB::Model::AttributeDefinition hashKey;
    hashKey.SetAttributeName(primaryKey);
    hashKey.SetAttributeType(Aws::DynamoDB::Model::ScalarAttributeType::S);
    request.AddAttributeDefinitions(hashKey);

    Aws::DynamoDB::Model::KeySchemaElement keySchemaElement;
    keySchemaElement.WithAttributeName(primaryKey).WithKeyType(
            Aws::DynamoDB::Model::KeyType::HASH);
    request.AddKeySchema(keySchemaElement);

    Aws::DynamoDB::Model::ProvisionedThroughput throughput;
    throughput.WithReadCapacityUnits(5).WithWriteCapacityUnits(5);
    request.SetProvisionedThroughput(throughput);
    request.SetTableName(tableName);

    const Aws::DynamoDB::Model::CreateTableOutcome &outcome = dynamoClient.CreateTable(
            request);
    if (outcome.IsSuccess()) {
        std::cout << "Table \""
                  << outcome.GetResult().GetTableDescription().GetTableName() <<
                  " created!" << std::endl;
    }
    else {
        std::cerr << "Failed to create table: " << outcome.GetError().GetMessage()
                  << std::endl;
        return false;
    }

    return waitTableActive(tableName, dynamoClient);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/dynamodb/create_table.cpp).

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

Tambahkan yang lain [AttributeDefinition](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_model_1_1_attribute_definition.html)dan [KeySchemaElement](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_model_1_1_key_schema_element.html)ke [CreateTableRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_model_1_1_create_table_request.html).

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/AttributeDefinition.h>
#include <aws/dynamodb/model/CreateTableRequest.h>
#include <aws/dynamodb/model/KeySchemaElement.h>
#include <aws/dynamodb/model/ProvisionedThroughput.h>
#include <aws/dynamodb/model/ScalarAttributeType.h>
#include <iostream>
```

 **Kode** 

```
//! Create an Amazon DynamoDB table with a composite key.
/*!
  \sa createTableWithCompositeKey()
  \param tableName: Name for the DynamoDB table.
  \param partitionKey: Name for the partition (hash) key.
  \param sortKey: Name for the sort (range) key.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::DynamoDB::createTableWithCompositeKey(const Aws::String &tableName,
                                                   const Aws::String &partitionKey,
                                                   const Aws::String &sortKey,
                                                   const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration);

    std::cout << "Creating table " << tableName <<
              " with a composite primary key:\n" \
            "* " << partitionKey << " - partition key\n" \
            "* " << sortKey << " - sort key\n";

    Aws::DynamoDB::Model::CreateTableRequest request;

    Aws::DynamoDB::Model::AttributeDefinition hashKey1, hashKey2;
    hashKey1.WithAttributeName(partitionKey).WithAttributeType(
            Aws::DynamoDB::Model::ScalarAttributeType::S);
    request.AddAttributeDefinitions(hashKey1);
    hashKey2.WithAttributeName(sortKey).WithAttributeType(
            Aws::DynamoDB::Model::ScalarAttributeType::S);
    request.AddAttributeDefinitions(hashKey2);

    Aws::DynamoDB::Model::KeySchemaElement keySchemaElement1, keySchemaElement2;
    keySchemaElement1.WithAttributeName(partitionKey).WithKeyType(
            Aws::DynamoDB::Model::KeyType::HASH);
    request.AddKeySchema(keySchemaElement1);
    keySchemaElement2.WithAttributeName(sortKey).WithKeyType(
            Aws::DynamoDB::Model::KeyType::RANGE);
    request.AddKeySchema(keySchemaElement2);

    Aws::DynamoDB::Model::ProvisionedThroughput throughput;
    throughput.WithReadCapacityUnits(5).WithWriteCapacityUnits(5);
    request.SetProvisionedThroughput(throughput);

    request.SetTableName(tableName);

    const Aws::DynamoDB::Model::CreateTableOutcome &outcome = dynamoClient.CreateTable(
            request);
    if (outcome.IsSuccess()) {
        std::cout << "Table \""
                  << outcome.GetResult().GetTableDescription().GetTableName() <<
                  "\" was created!" << std::endl;
    }
    else {
        std::cerr << "Failed to create table:" << outcome.GetError().GetMessage()
                  << std::endl;
        return false;
    }

    return waitTableActive(tableName, dynamoClient);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/dynamodb/create_table_composite_key.cpp) di GitHub.

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

Anda dapat membuat daftar tabel di wilayah tertentu dengan memanggil metode klien [`ListTables`DynamoDB](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_dynamo_d_b_client.html).

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/core/utils/Outcome.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/ListTablesRequest.h>
#include <aws/dynamodb/model/ListTablesResult.h>
#include <iostream>
```

 **Kode** 

```
//! List the Amazon DynamoDB tables for the current AWS account.
/*!
  \sa listTables()
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */

bool AwsDoc::DynamoDB::listTables(
        const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration);

    Aws::DynamoDB::Model::ListTablesRequest listTablesRequest;
    listTablesRequest.SetLimit(50);
    do {
        const Aws::DynamoDB::Model::ListTablesOutcome &outcome = dynamoClient.ListTables(
                listTablesRequest);
        if (!outcome.IsSuccess()) {
            std::cout << "Error: " << outcome.GetError().GetMessage() << std::endl;
            return false;
        }

        for (const auto &tableName: outcome.GetResult().GetTableNames())
            std::cout << tableName << std::endl;
        listTablesRequest.SetExclusiveStartTableName(
                outcome.GetResult().GetLastEvaluatedTableName());

    } while (!listTablesRequest.GetExclusiveStartTableName().empty());

    return true;
}
```

Secara default, hingga 100 tabel dikembalikan per panggilan. Gunakan `GetExclusiveStartTableName` pada [ListTablesOutcome](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_dynamo_d_b_client.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/tree/main/cpp/example_code/dynamodb/list_tables.cpp).

## Mengambil Informasi tentang Tabel
<a name="dynamodb-describe-table"></a>

Anda dapat mengetahui lebih lanjut tentang tabel dengan memanggil metode klien [`DescribeTable`DynamoDB](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_dynamo_d_b_client.html).

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/DescribeTableRequest.h>
#include <iostream>
```

 **Kode** 

```
//! Describe an Amazon DynamoDB table.
/*!
  \sa describeTable()
  \param tableName: The DynamoDB table name.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
*/
bool AwsDoc::DynamoDB::describeTable(const Aws::String &tableName,
                                     const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration);

    Aws::DynamoDB::Model::DescribeTableRequest request;
    request.SetTableName(tableName);

    const Aws::DynamoDB::Model::DescribeTableOutcome &outcome = dynamoClient.DescribeTable(
            request);

    if (outcome.IsSuccess()) {
        const Aws::DynamoDB::Model::TableDescription &td = outcome.GetResult().GetTable();
        std::cout << "Table name  : " << td.GetTableName() << std::endl;
        std::cout << "Table ARN   : " << td.GetTableArn() << std::endl;
        std::cout << "Status      : "
                  << Aws::DynamoDB::Model::TableStatusMapper::GetNameForTableStatus(
                          td.GetTableStatus()) << std::endl;
        std::cout << "Item count  : " << td.GetItemCount() << std::endl;
        std::cout << "Size (bytes): " << td.GetTableSizeBytes() << std::endl;

        const Aws::DynamoDB::Model::ProvisionedThroughputDescription &ptd = td.GetProvisionedThroughput();
        std::cout << "Throughput" << std::endl;
        std::cout << "  Read Capacity : " << ptd.GetReadCapacityUnits() << std::endl;
        std::cout << "  Write Capacity: " << ptd.GetWriteCapacityUnits() << std::endl;

        const Aws::Vector<Aws::DynamoDB::Model::AttributeDefinition> &ad = td.GetAttributeDefinitions();
        std::cout << "Attributes" << std::endl;
        for (const auto &a: ad)
            std::cout << "  " << a.GetAttributeName() << " (" <<
                      Aws::DynamoDB::Model::ScalarAttributeTypeMapper::GetNameForScalarAttributeType(
                              a.GetAttributeType()) <<
                      ")" << std::endl;
    }
    else {
        std::cerr << "Failed to describe table: " << outcome.GetError().GetMessage();
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/dynamodb/describe_table.cpp) di GitHub.

## Memodifikasi Tabel
<a name="dynamodb-update-table"></a>

[Anda dapat memodifikasi nilai throughput yang disediakan tabel kapan saja dengan memanggil metode klien DynamoDB.](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_dynamo_d_b_client.html) `UpdateTable`

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/core/utils/Outcome.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/ProvisionedThroughput.h>
#include <aws/dynamodb/model/UpdateTableRequest.h>
#include <iostream>
```

 **Kode** 

```
//! Update a DynamoDB table.
/*!
  \sa updateTable()
  \param tableName: Name for the DynamoDB table.
  \param readCapacity: Provisioned read capacity.
  \param writeCapacity: Provisioned write capacity.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::DynamoDB::updateTable(const Aws::String &tableName,
                                   long long readCapacity, long long writeCapacity,
                                   const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration);

    std::cout << "Updating " << tableName << " with new provisioned throughput values"
              << std::endl;
    std::cout << "Read capacity : " << readCapacity << std::endl;
    std::cout << "Write capacity: " << writeCapacity << std::endl;

    Aws::DynamoDB::Model::UpdateTableRequest request;
    Aws::DynamoDB::Model::ProvisionedThroughput provisionedThroughput;
    provisionedThroughput.WithReadCapacityUnits(readCapacity).WithWriteCapacityUnits(
            writeCapacity);
    request.WithProvisionedThroughput(provisionedThroughput).WithTableName(tableName);

    const Aws::DynamoDB::Model::UpdateTableOutcome &outcome = dynamoClient.UpdateTable(
            request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully updated the table." << std::endl;
    } else {
        const Aws::DynamoDB::DynamoDBError &error = outcome.GetError();
        if (error.GetErrorType() == Aws::DynamoDB::DynamoDBErrors::VALIDATION &&
            error.GetMessage().find("The provisioned throughput for the table will not change") != std::string::npos) {
            std::cout << "The provisioned throughput for the table will not change." << std::endl;
        } else {
            std::cerr << outcome.GetError().GetMessage() << std::endl;
            return false;
        }
    }

    return waitTableActive(tableName, dynamoClient);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/dynamodb/update_table.cpp).

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

Panggil metode `DeleteTable` klien [DynamoDB](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_dynamo_d_b_client.html) dan berikan nama tabel.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/DeleteTableRequest.h>
#include <iostream>
```

 **Kode** 

```
//! Delete an Amazon DynamoDB table.
/*!
  \sa deleteTable()
  \param tableName: The DynamoDB table name.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
*/
bool AwsDoc::DynamoDB::deleteTable(const Aws::String &tableName,
                                   const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration);

    Aws::DynamoDB::Model::DeleteTableRequest request;
    request.SetTableName(tableName);

    const Aws::DynamoDB::Model::DeleteTableOutcome &result = dynamoClient.DeleteTable(
            request);
    if (result.IsSuccess()) {
        std::cout << "Your table \""
                  << result.GetResult().GetTableDescription().GetTableName()
                  << " was deleted.\n";
    }
    else {
        std::cerr << "Failed to delete table: " << result.GetError().GetMessage()
                  << std::endl;
    }

    return result.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/dynamodb/delete_table.cpp) 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 Pengembang Amazon DynamoDB
+  [Bekerja dengan Tabel di DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html) di Panduan Pengembang Amazon DynamoDB

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

**Di 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 Pengembang Amazon DynamoDB.

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

Panggil metode klien [`GetItem`DynamoDB](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_dynamo_d_b_client.html). Berikan [GetItemRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_model_1_1_get_item_request.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-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_model_1_1_get_item_result.html)objek.

Anda dapat menggunakan `GetItem()` metode `GetItemResult` objek yang dikembalikan untuk mengambil [AttributeValue](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_model_1_1_attribute_value.html)pasangan kunci `Aws::String` dan nilai yang `Aws::Map` terkait dengan item tersebut.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/AttributeDefinition.h>
#include <aws/dynamodb/model/GetItemRequest.h>
#include <iostream>
```

 **Kode** 

```
//! Get an item from an Amazon DynamoDB table.
/*!
  \sa getItem()
  \param tableName: The table name.
  \param partitionKey: The partition key.
  \param partitionValue: The value for the partition key.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */

bool AwsDoc::DynamoDB::getItem(const Aws::String &tableName,
                               const Aws::String &partitionKey,
                               const Aws::String &partitionValue,
                               const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration);
    Aws::DynamoDB::Model::GetItemRequest request;

    // Set up the request.
    request.SetTableName(tableName);
    request.AddKey(partitionKey,
                   Aws::DynamoDB::Model::AttributeValue().SetS(partitionValue));

    // Retrieve the item's fields and values.
    const Aws::DynamoDB::Model::GetItemOutcome &outcome = dynamoClient.GetItem(request);
    if (outcome.IsSuccess()) {
        // Reference the retrieved fields/values.
        const Aws::Map<Aws::String, Aws::DynamoDB::Model::AttributeValue> &item = outcome.GetResult().GetItem();
        if (!item.empty()) {
            // Output each retrieved field and its value.
            for (const auto &i: item)
                std::cout << "Values: " << i.first << ": " << i.second.GetS()
                          << std::endl;
        }
        else {
            std::cout << "No item found with the key " << partitionKey << std::endl;
        }
    }
    else {
        std::cerr << "Failed to get item: " << outcome.GetError().GetMessage();
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/dynamodb/get_item.cpp) di GitHub.

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

Buat [AttributeValue](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_model_1_1_attribute_value.html)pasangan kunci `Aws::String` dan nilai yang mewakili setiap item. Ini harus menyertakan nilai untuk bidang kunci utama tabel. Jika item yang diidentifikasi oleh kunci utama sudah ada, bidangnya *diperbarui* oleh permintaan. Tambahkan mereka ke [PutItemRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-dynamodb/html/class_aws_1_1_dynamo_d_b_1_1_model_1_1_put_item_request.html)menggunakan `AddItem` metode ini.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/AttributeDefinition.h>
#include <aws/dynamodb/model/PutItemRequest.h>
#include <aws/dynamodb/model/PutItemResult.h>
#include <iostream>
```

 **Kode** 

```
//! Put an item in an Amazon DynamoDB table.
/*!
  \sa putItem()
  \param tableName: The table name.
  \param artistKey: The artist key. This is the partition key for the table.
  \param artistValue: The artist value.
  \param albumTitleKey: The album title key.
  \param albumTitleValue: The album title value.
  \param awardsKey: The awards key.
  \param awardsValue: The awards value.
  \param songTitleKey: The song title key.
  \param songTitleValue: The song title value.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
 */
bool AwsDoc::DynamoDB::putItem(const Aws::String &tableName,
                               const Aws::String &artistKey,
                               const Aws::String &artistValue,
                               const Aws::String &albumTitleKey,
                               const Aws::String &albumTitleValue,
                               const Aws::String &awardsKey,
                               const Aws::String &awardsValue,
                               const Aws::String &songTitleKey,
                               const Aws::String &songTitleValue,
                               const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration);

    Aws::DynamoDB::Model::PutItemRequest putItemRequest;
    putItemRequest.SetTableName(tableName);

    putItemRequest.AddItem(artistKey, Aws::DynamoDB::Model::AttributeValue().SetS(
            artistValue)); // This is the hash key.
    putItemRequest.AddItem(albumTitleKey, Aws::DynamoDB::Model::AttributeValue().SetS(
            albumTitleValue));
    putItemRequest.AddItem(awardsKey,
                           Aws::DynamoDB::Model::AttributeValue().SetS(awardsValue));
    putItemRequest.AddItem(songTitleKey,
                           Aws::DynamoDB::Model::AttributeValue().SetS(songTitleValue));

    const Aws::DynamoDB::Model::PutItemOutcome outcome = dynamoClient.PutItem(
            putItemRequest);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully added Item!" << std::endl;
    }
    else {
        std::cerr << outcome.GetError().GetMessage() << std::endl;
        return false;
    }

    return waitTableActive(tableName, dynamoClient);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/dynamodb/put_item.cpp) 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 DynamoDBClient, memberikan nama tabel, nilai kunci utama, dan bidang untuk memperbarui dan nilai yang sesuai.

 **Impor** 

```
#include <aws/core/Aws.h>
#include <aws/dynamodb/DynamoDBClient.h>
#include <aws/dynamodb/model/UpdateItemRequest.h>
#include <aws/dynamodb/model/UpdateItemResult.h>
#include <iostream>
```

 **Kode** 

```
//! Update an Amazon DynamoDB table item.
/*!
  \sa updateItem()
  \param tableName: The table name.
  \param partitionKey: The partition key.
  \param partitionValue: The value for the partition key.
  \param attributeKey: The key for the attribute to be updated.
  \param attributeValue: The value for the attribute to be updated.
  \param clientConfiguration: AWS client configuration.
  \return bool: Function succeeded.
  */

/*
 *  The example code only sets/updates an attribute value. It processes
 *  the attribute value as a string, even if the value could be interpreted
 *  as a number. Also, the example code does not remove an existing attribute
 *  from the key value.
 */

bool AwsDoc::DynamoDB::updateItem(const Aws::String &tableName,
                                  const Aws::String &partitionKey,
                                  const Aws::String &partitionValue,
                                  const Aws::String &attributeKey,
                                  const Aws::String &attributeValue,
                                  const Aws::Client::ClientConfiguration &clientConfiguration) {
    Aws::DynamoDB::DynamoDBClient dynamoClient(clientConfiguration);

    // *** Define UpdateItem request arguments.
    // Define TableName argument.
    Aws::DynamoDB::Model::UpdateItemRequest request;
    request.SetTableName(tableName);

    // Define KeyName argument.
    Aws::DynamoDB::Model::AttributeValue attribValue;
    attribValue.SetS(partitionValue);
    request.AddKey(partitionKey, attribValue);

    // Construct the SET update expression argument.
    Aws::String update_expression("SET #a = :valueA");
    request.SetUpdateExpression(update_expression);

    // Construct attribute name argument.
    Aws::Map<Aws::String, Aws::String> expressionAttributeNames;
    expressionAttributeNames["#a"] = attributeKey;
    request.SetExpressionAttributeNames(expressionAttributeNames);

    // Construct attribute value argument.
    Aws::DynamoDB::Model::AttributeValue attributeUpdatedValue;
    attributeUpdatedValue.SetS(attributeValue);
    Aws::Map<Aws::String, Aws::DynamoDB::Model::AttributeValue> expressionAttributeValues;
    expressionAttributeValues[":valueA"] = attributeUpdatedValue;
    request.SetExpressionAttributeValues(expressionAttributeValues);

    // Update the item.
    const Aws::DynamoDB::Model::UpdateItemOutcome &outcome = dynamoClient.UpdateItem(
            request);
    if (outcome.IsSuccess()) {
        std::cout << "Item was updated" << std::endl;
    } else {
        std::cerr << outcome.GetError().GetMessage() << std::endl;
        return false;
    }

    return waitTableActive(tableName, dynamoClient);
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/dynamodb/update_item.cpp).

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

# Contoh Amazon EC2 menggunakan AWS SDK untuk C\$1\$1
<a name="examples-ec2"></a>

Amazon Elastic Compute Cloud (Amazon EC2) adalah layanan web yang menyediakan kapasitas komputasi yang dapat diubah ukurannya — secara harfiah server di pusat data Amazon — yang Anda gunakan untuk membangun dan meng-host sistem perangkat lunak Anda. Anda dapat menggunakan contoh berikut untuk memprogram [Amazon EC2](https://aws.amazon.com/ec2) menggunakan. AWS SDK untuk C\$1\$1

**catatan**  
Hanya kode yang diperlukan untuk menunjukkan teknik tertentu yang disediakan dalam Panduan ini, tetapi [kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp). Pada GitHub Anda dapat mengunduh satu file sumber atau Anda dapat mengkloning repositori secara lokal untuk mendapatkan, membangun, dan menjalankan semua contoh.

**Topics**
+ [Mengelola Instans Amazon EC2](examples-ec2-instances.md)
+ [Menggunakan Alamat IP Elastis di Amazon EC2](examples-ec2-elastic-ip.md)
+ [Menggunakan Wilayah dan Availability Zone untuk Amazon EC2](examples-ec2-regions-zones.md)
+ [Bekerja dengan Pasangan Kunci Amazon EC2](examples-ec2-key-pairs.md)
+ [Bekerja dengan Grup Keamanan di Amazon EC2](examples-ec2-security-groups.md)

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

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

## Buat sebuah Instance
<a name="create-an-instance"></a>

Buat instans Amazon EC2 baru dengan memanggil `RunInstances` fungsi EC2 Klien, menyediakannya [RunInstancesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_run_instances_request.html)berisi [Amazon Machine Image (AMI)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) untuk digunakan dan jenis [instans](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html).

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/RunInstancesRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);

    Aws::EC2::Model::RunInstancesRequest runRequest;
    runRequest.SetImageId(amiId);
    runRequest.SetInstanceType(Aws::EC2::Model::InstanceType::t1_micro);
    runRequest.SetMinCount(1);
    runRequest.SetMaxCount(1);

    Aws::EC2::Model::RunInstancesOutcome runOutcome = ec2Client.RunInstances(
            runRequest);
    if (!runOutcome.IsSuccess()) {
        std::cerr << "Failed to launch EC2 instance " << instanceName <<
                  " based on ami " << amiId << ":" <<
                  runOutcome.GetError().GetMessage() << std::endl;
        return false;
    }

    const Aws::Vector<Aws::EC2::Model::Instance> &instances = runOutcome.GetResult().GetInstances();
    if (instances.empty()) {
        std::cerr << "Failed to launch EC2 instance " << instanceName <<
                  " based on ami " << amiId << ":" <<
                  runOutcome.GetError().GetMessage() << std::endl;
        return false;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/run_instances.cpp).

## Mulai Sebuah Instance
<a name="start-an-instance"></a>

Untuk memulai instans Amazon EC2, panggil `StartInstances` fungsi EC2 Klien, berikan ID yang [StartInstancesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_start_instances_request.html)berisi instance untuk memulai.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/StartInstancesRequest.h>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);

    Aws::EC2::Model::StartInstancesRequest startRequest;
    startRequest.AddInstanceIds(instanceId);
    startRequest.SetDryRun(true);

    Aws::EC2::Model::StartInstancesOutcome dryRunOutcome = ec2Client.StartInstances(startRequest);
    if (dryRunOutcome.IsSuccess()) {
        std::cerr
                << "Failed dry run to start instance. A dry run should trigger an error."
                << std::endl;
        return false;
    } else if (dryRunOutcome.GetError().GetErrorType() !=
               Aws::EC2::EC2Errors::DRY_RUN_OPERATION) {
        std::cout << "Failed dry run to start instance " << instanceId << ": "
                  << dryRunOutcome.GetError().GetMessage() << std::endl;
        return false;
    }

    startRequest.SetDryRun(false);
    Aws::EC2::Model::StartInstancesOutcome startInstancesOutcome = ec2Client.StartInstances(startRequest);

    if (!startInstancesOutcome.IsSuccess()) {
        std::cout << "Failed to start instance " << instanceId << ": " <<
                  startInstancesOutcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Successfully started instance " << instanceId <<
                  std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/start_stop_instance.cpp).

## Hentikan sebuah Instance
<a name="stop-an-instance"></a>

Untuk menghentikan instans Amazon EC2, panggil `StopInstances` fungsi EC2 Klien, berikan ID yang [StopInstancesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_stop_instances_request.html)berisi instance untuk berhenti.

 **Termasuk** 

```
#include <aws/ec2/model/StopInstancesRequest.h>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::StopInstancesRequest request;
    request.AddInstanceIds(instanceId);
    request.SetDryRun(true);

    Aws::EC2::Model::StopInstancesOutcome dryRunOutcome = ec2Client.StopInstances(request);
    if (dryRunOutcome.IsSuccess()) {
        std::cerr
                << "Failed dry run to stop instance. A dry run should trigger an error."
                << std::endl;
        return false;
    } else if (dryRunOutcome.GetError().GetErrorType() !=
               Aws::EC2::EC2Errors::DRY_RUN_OPERATION) {
        std::cout << "Failed dry run to stop instance " << instanceId << ": "
                  << dryRunOutcome.GetError().GetMessage() << std::endl;
        return false;
    }

    request.SetDryRun(false);
    Aws::EC2::Model::StopInstancesOutcome outcome = ec2Client.StopInstances(request);
    if (!outcome.IsSuccess()) {
        std::cout << "Failed to stop instance " << instanceId << ": " <<
                  outcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Successfully stopped instance " << instanceId <<
                  std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/start_stop_instance.cpp).

## Reboot sebuah Instance
<a name="reboot-an-instance"></a>

Untuk me-reboot instans Amazon EC2, panggil `RebootInstances` fungsi EC2 Klien, berikan ID yang [RebootInstancesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_reboot_instances_request.html)berisi instance untuk reboot.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/RebootInstancesRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);

    Aws::EC2::Model::RebootInstancesRequest request;
    request.AddInstanceIds(instanceId);
    request.SetDryRun(true);

    Aws::EC2::Model::RebootInstancesOutcome dry_run_outcome = ec2Client.RebootInstances(request);
    if (dry_run_outcome.IsSuccess()) {
        std::cerr
                << "Failed dry run to reboot on instance. A dry run should trigger an error."
                <<
                std::endl;
        return false;
    } else if (dry_run_outcome.GetError().GetErrorType()
               != Aws::EC2::EC2Errors::DRY_RUN_OPERATION) {
        std::cout << "Failed dry run to reboot instance " << instanceId << ": "
                  << dry_run_outcome.GetError().GetMessage() << std::endl;
        return false;
    }

    request.SetDryRun(false);
    Aws::EC2::Model::RebootInstancesOutcome outcome = ec2Client.RebootInstances(request);
    if (!outcome.IsSuccess()) {
        std::cout << "Failed to reboot instance " << instanceId << ": " <<
                  outcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Successfully rebooted instance " << instanceId <<
                  std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/reboot_instance.cpp).

## Jelaskan Contoh
<a name="describe-instances"></a>

Untuk membuat daftar instance Anda, buat [DescribeInstancesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_instances_request.html)dan panggil `DescribeInstances` fungsi EC2 Klien. Ini akan mengembalikan [DescribeInstancesResponse](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_instances_response.html)objek yang dapat Anda gunakan untuk membuat daftar instans Amazon EC2 untuk Anda dan. Akun AWS Wilayah AWS

*Instans dikelompokkan berdasarkan reservasi.* Setiap reservasi sesuai dengan panggilan `StartInstances` yang meluncurkan instance. Untuk membuat daftar instance Anda, Anda harus terlebih dahulu memanggil `GetReservations` fungsi `DescribeInstancesResponse` kelas, dan kemudian memanggil `getInstances` setiap objek Reservasi yang dikembalikan.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/DescribeInstancesRequest.h>
#include <aws/ec2/model/DescribeInstancesResponse.h>
#include <iomanip>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::DescribeInstancesRequest request;
    bool header = false;
    bool done = false;
    while (!done) {
        Aws::EC2::Model::DescribeInstancesOutcome outcome = ec2Client.DescribeInstances(request);
        if (outcome.IsSuccess()) {
            if (!header) {
                std::cout << std::left <<
                          std::setw(48) << "Name" <<
                          std::setw(20) << "ID" <<
                          std::setw(25) << "Ami" <<
                          std::setw(15) << "Type" <<
                          std::setw(15) << "State" <<
                          std::setw(15) << "Monitoring" << std::endl;
                header = true;
            }

            const std::vector<Aws::EC2::Model::Reservation> &reservations =
                    outcome.GetResult().GetReservations();

            for (const auto &reservation: reservations) {
                const std::vector<Aws::EC2::Model::Instance> &instances =
                        reservation.GetInstances();
                for (const auto &instance: instances) {
                    Aws::String instanceStateString =
                            Aws::EC2::Model::InstanceStateNameMapper::GetNameForInstanceStateName(
                                    instance.GetState().GetName());

                    Aws::String typeString =
                            Aws::EC2::Model::InstanceTypeMapper::GetNameForInstanceType(
                                    instance.GetInstanceType());

                    Aws::String monitorString =
                            Aws::EC2::Model::MonitoringStateMapper::GetNameForMonitoringState(
                                    instance.GetMonitoring().GetState());
                    Aws::String name = "Unknown";

                    const std::vector<Aws::EC2::Model::Tag> &tags = instance.GetTags();
                    auto nameIter = std::find_if(tags.cbegin(), tags.cend(),
                                                 [](const Aws::EC2::Model::Tag &tag) {
                                                     return tag.GetKey() == "Name";
                                                 });
                    if (nameIter != tags.cend()) {
                        name = nameIter->GetValue();
                    }
                    std::cout <<
                              std::setw(48) << name <<
                              std::setw(20) << instance.GetInstanceId() <<
                              std::setw(25) << instance.GetImageId() <<
                              std::setw(15) << typeString <<
                              std::setw(15) << instanceStateString <<
                              std::setw(15) << monitorString << std::endl;
                }
            }

            if (!outcome.GetResult().GetNextToken().empty()) {
                request.SetNextToken(outcome.GetResult().GetNextToken());
            } else {
                done = true;
            }
        } else {
            std::cerr << "Failed to describe EC2 instances:" <<
                      outcome.GetError().GetMessage() << std::endl;
            return false;
        }
    }
```

Hasil paged; Anda bisa mendapatkan hasil lebih lanjut dengan meneruskan nilai yang dikembalikan dari `GetNextToken` fungsi objek hasil ke fungsi 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/tree/main/cpp/example_code/ec2/describe_instances.cpp).

## Aktifkan Pemantauan Instance
<a name="enable-instance-monitoring"></a>

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

Untuk mulai memantau instance, Anda harus membuat [MonitorInstancesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_monitor_instances_request.html)dengan ID instance untuk dipantau, dan meneruskannya ke `MonitorInstances` fungsi EC2 Klien.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/MonitorInstancesRequest.h>
#include <aws/ec2/model/UnmonitorInstancesRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::MonitorInstancesRequest request;
    request.AddInstanceIds(instanceId);
    request.SetDryRun(true);

    Aws::EC2::Model::MonitorInstancesOutcome dryRunOutcome = ec2Client.MonitorInstances(request);
    if (dryRunOutcome.IsSuccess()) {
        std::cerr
                << "Failed dry run to enable monitoring on instance. A dry run should trigger an error."
                <<
                std::endl;
        return false;
    } else if (dryRunOutcome.GetError().GetErrorType()
               != Aws::EC2::EC2Errors::DRY_RUN_OPERATION) {
        std::cerr << "Failed dry run to enable monitoring on instance " <<
                  instanceId << ": " << dryRunOutcome.GetError().GetMessage() <<
                  std::endl;
        return false;
    }

    request.SetDryRun(false);
    Aws::EC2::Model::MonitorInstancesOutcome monitorInstancesOutcome = ec2Client.MonitorInstances(request);
    if (!monitorInstancesOutcome.IsSuccess()) {
        std::cerr << "Failed to enable monitoring on instance " <<
                  instanceId << ": " <<
                  monitorInstancesOutcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Successfully enabled monitoring on instance " <<
                  instanceId << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/monitor_instance.cpp).

## Nonaktifkan Pemantauan Instance
<a name="disable-instance-monitoring"></a>

Untuk menghentikan pemantauan instance, buat [UnmonitorInstancesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_unmonitor_instances_request.html)dengan ID instance untuk menghentikan pemantauan, dan meneruskannya ke `UnmonitorInstances` fungsi EC2 Klien.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/MonitorInstancesRequest.h>
#include <aws/ec2/model/UnmonitorInstancesRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::UnmonitorInstancesRequest unrequest;
    unrequest.AddInstanceIds(instanceId);
    unrequest.SetDryRun(true);

    Aws::EC2::Model::UnmonitorInstancesOutcome dryRunOutcome = ec2Client.UnmonitorInstances(unrequest);
    if (dryRunOutcome.IsSuccess()) {
        std::cerr
                << "Failed dry run to disable monitoring on instance. A dry run should trigger an error."
                <<
                std::endl;
        return false;
    } else if (dryRunOutcome.GetError().GetErrorType() !=
               Aws::EC2::EC2Errors::DRY_RUN_OPERATION) {
        std::cout << "Failed dry run to disable monitoring on instance " <<
                  instanceId << ": " << dryRunOutcome.GetError().GetMessage() <<
                  std::endl;
        return false;
    }

    unrequest.SetDryRun(false);
    Aws::EC2::Model::UnmonitorInstancesOutcome unmonitorInstancesOutcome = ec2Client.UnmonitorInstances(unrequest);
    if (!unmonitorInstancesOutcome.IsSuccess()) {
        std::cout << "Failed to disable monitoring on instance " << instanceId
                  << ": " << unmonitorInstancesOutcome.GetError().GetMessage() <<
                  std::endl;
    } else {
        std::cout << "Successfully disable monitoring on instance " <<
                  instanceId << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/monitor_instance.cpp).

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

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

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensil](credentials.md).

## Alokasikan Alamat IP Elastis
<a name="allocate-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` fungsi EC2 Klien dengan [AllocateAddressRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_allocate_address_request.html)objek yang berisi tipe jaringan (EC2 klasik atau VPC). 

**Awas**  
Kami pensiun EC2-Classic pada 15 Agustus 2022. Kami menyarankan Anda bermigrasi dari EC2-Classic ke VPC. [Untuk informasi selengkapnya, lihat **Memigrasi dari EC2-Classic ke VPC** di Panduan Pengguna Amazon EC2 untuk Instans [Linux atau Panduan Pengguna Amazon EC2 untuk Instans](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html) Windows.](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/vpc-migrate.html) Lihat juga posting blog [EC2-Classic Networking is Retiring - Inilah Cara Mempersiapkan](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/).

[AllocateAddressResponse](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_allocate_address_response.html)Kelas dalam objek respon berisi ID alokasi yang dapat Anda gunakan untuk mengaitkan alamat dengan instance, dengan meneruskan ID alokasi dan ID instance dalam a [AssociateAddressRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_associate_address_request.html)ke fungsi EC2 Klien`AssociateAddress`.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/AllocateAddressRequest.h>
#include <aws/ec2/model/AssociateAddressRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);

    Aws::EC2::Model::AllocateAddressRequest request;
    request.SetDomain(Aws::EC2::Model::DomainType::vpc);

    const Aws::EC2::Model::AllocateAddressOutcome outcome =
            ec2Client.AllocateAddress(request);
    if (!outcome.IsSuccess()) {
        std::cerr << "Failed to allocate Elastic IP address:" <<
                  outcome.GetError().GetMessage() << std::endl;
        return false;
    }
    const Aws::EC2::Model::AllocateAddressResponse &response = outcome.GetResult();
    allocationID = response.GetAllocationId();
    publicIPAddress = response.GetPublicIp();


    Aws::EC2::Model::AssociateAddressRequest associate_request;
    associate_request.SetInstanceId(instanceId);
    associate_request.SetAllocationId(allocationID);

    const Aws::EC2::Model::AssociateAddressOutcome associate_outcome =
            ec2Client.AssociateAddress(associate_request);
    if (!associate_outcome.IsSuccess()) {
        std::cerr << "Failed to associate Elastic IP address " << allocationID
                  << " with instance " << instanceId << ":" <<
                  associate_outcome.GetError().GetMessage() << std::endl;
        return false;
    }

    std::cout << "Successfully associated Elastic IP address " << allocationID
              << " with instance " << instanceId << std::endl;
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/allocate_address.cpp).

## Jelaskan Alamat IP Elastis
<a name="describe-elastic-ip-addresses"></a>

Untuk mencantumkan alamat IP Elastis yang ditetapkan ke akun Anda, hubungi `DescribeAddresses` fungsi EC2 Klien. Ini mengembalikan objek hasil yang berisi [DescribeAddressesResponse](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_addresses_response.html)yang dapat Anda gunakan untuk mendapatkan daftar objek [Alamat](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_address.html) yang mewakili alamat IP Elastis pada akun Anda.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/DescribeAddressesRequest.h>
#include <aws/ec2/model/DescribeAddressesResponse.h>
#include <iomanip>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::DescribeAddressesRequest request;
    Aws::EC2::Model::DescribeAddressesOutcome outcome = ec2Client.DescribeAddresses(request);
    if (outcome.IsSuccess()) {
        std::cout << std::left << std::setw(20) << "InstanceId" <<
                  std::setw(15) << "Public IP" << std::setw(10) << "Domain" <<
                  std::setw(30) << "Allocation ID" << std::setw(25) <<
                  "NIC ID" << std::endl;

        const Aws::Vector<Aws::EC2::Model::Address> &addresses = outcome.GetResult().GetAddresses();
        for (const auto &address: addresses) {
            Aws::String domainString =
                    Aws::EC2::Model::DomainTypeMapper::GetNameForDomainType(
                            address.GetDomain());

            std::cout << std::left << std::setw(20) <<
                      address.GetInstanceId() << std::setw(15) <<
                      address.GetPublicIp() << std::setw(10) << domainString <<
                      std::setw(30) << address.GetAllocationId() << std::setw(25)
                      << address.GetNetworkInterfaceId() << std::endl;
        }
    } else {
        std::cerr << "Failed to describe Elastic IP addresses:" <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/describe_addresses.cpp).

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

Untuk melepaskan alamat IP Elastis, panggil `ReleaseAddress` fungsi EC2 Klien, berikan ID alokasi yang [ReleaseAddressRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_release_address_request.html)berisi ID alokasi alamat IP Elastis yang ingin Anda lepaskan.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/ReleaseAddressRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2(clientConfiguration);

    Aws::EC2::Model::ReleaseAddressRequest request;
    request.SetAllocationId(allocationID);

    Aws::EC2::Model::ReleaseAddressOutcome outcome = ec2.ReleaseAddress(request);
    if (!outcome.IsSuccess()) {
        std::cerr << "Failed to release Elastic IP address " <<
                  allocationID << ":" << outcome.GetError().GetMessage() <<
                  std::endl;
    } else {
        std::cout << "Successfully released Elastic IP address " <<
                  allocationID << std::endl;
    }
```

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 AWS akun lain.

Jika Anda menggunakan *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 fungsi EC2 Klien. `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 valid. IPAddress InUse*).

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/release_address.cpp).

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

# Menggunakan Wilayah dan Availability Zone untuk Amazon EC2
<a name="examples-ec2-regions-zones"></a>

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

## Menjelaskan Wilayah
<a name="describe-regions"></a>

Untuk membuat daftar yang Wilayah AWS tersedia untuk Anda Akun AWS, hubungi `DescribeRegions` fungsi EC2 Klien dengan a [DescribeRegionsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_regions_request.html).

Anda akan menerima objek [DescribeRegionsResponse](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_regions_response.html)dalam hasil. Panggil `GetRegions` fungsinya untuk mendapatkan daftar objek [Wilayah](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_region.html) yang mewakili setiap Wilayah.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/DescribeRegionsRequest.h>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);

    Aws::EC2::Model::DescribeRegionsRequest request;
    Aws::EC2::Model::DescribeRegionsOutcome outcome = ec2Client.DescribeRegions(request);
    if (outcome.IsSuccess()) {
        std::cout << std::left <<
                  std::setw(32) << "RegionName" <<
                  std::setw(64) << "Endpoint" << std::endl;

        const auto &regions = outcome.GetResult().GetRegions();
        for (const auto &region: regions) {
            std::cout << std::left <<
                      std::setw(32) << region.GetRegionName() <<
                      std::setw(64) << region.GetEndpoint() << std::endl;
        }
    } else {
        std::cerr << "Failed to describe regions:" <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/describe_regions_and_zones.cpp).

## Menjelaskan Zona Ketersediaan (AZ)
<a name="describe-availability-zones"></a>

Untuk mencantumkan setiap zona ketersediaan yang tersedia untuk akun Anda, hubungi `DescribeAvailabilityZones` fungsi EC2 Klien dengan file [DescribeAvailabilityZonesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_availability_zones_request.html).

Anda akan menerima objek [DescribeAvailabilityZonesResponse](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_availability_zones_response.html)dalam hasil. Panggil `GetAvailabilityZones` fungsinya untuk mendapatkan daftar [AvailabilityZone](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_availability_zone.html)objek yang mewakili setiap zona ketersediaan.

 **Termasuk** 

```
#include <aws/ec2/model/DescribeAvailabilityZonesRequest.h>
```

 **Kode** 

```
    Aws::EC2::Model::DescribeAvailabilityZonesRequest request;
    Aws::EC2::Model::DescribeAvailabilityZonesOutcome outcome = ec2Client.DescribeAvailabilityZones(request);

    if (outcome.IsSuccess()) {
        std::cout << std::left <<
                  std::setw(32) << "ZoneName" <<
                  std::setw(20) << "State" <<
                  std::setw(32) << "Region" << std::endl;

        const auto &zones =
                outcome.GetResult().GetAvailabilityZones();

        for (const auto &zone: zones) {
            Aws::String stateString =
                    Aws::EC2::Model::AvailabilityZoneStateMapper::GetNameForAvailabilityZoneState(
                            zone.GetState());
            std::cout << std::left <<
                      std::setw(32) << zone.GetZoneName() <<
                      std::setw(20) << stateString <<
                      std::setw(32) << zone.GetRegionName() << std::endl;
        }
    } else {
        std::cerr << "Failed to describe availability zones:" <<
                  outcome.GetError().GetMessage() << std::endl;

    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/describe_regions_and_zones.cpp).

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

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

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

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

Untuk membuat key pair, panggil `CreateKeyPair` fungsi EC2 Klien dengan [CreateKeyPairRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_create_key_pair_request.html)yang berisi nama kunci.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/CreateKeyPairRequest.h>
#include <iostream>
#include <fstream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::CreateKeyPairRequest request;
    request.SetKeyName(keyPairName);

    Aws::EC2::Model::CreateKeyPairOutcome outcome = ec2Client.CreateKeyPair(request);
    if (!outcome.IsSuccess()) {
        std::cerr << "Failed to create key pair - "  << keyPairName << ". " <<
                  outcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Successfully created key pair named " <<
                  keyPairName << std::endl;
        if (!keyFilePath.empty()) {
            std::ofstream keyFile(keyFilePath.c_str());
            keyFile << outcome.GetResult().GetKeyMaterial();
            keyFile.close();
            std::cout << "Keys written to the file " <<
                      keyFilePath << std::endl;
        }

    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/create_key_pair.cpp).

## Jelaskan Pasangan Kunci
<a name="describe-key-pairs"></a>

Untuk membuat daftar pasangan kunci Anda atau untuk mendapatkan informasi tentang mereka, hubungi `DescribeKeyPairs` fungsi EC2 Klien dengan a [DescribeKeyPairsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_key_pairs_request.html).

Anda akan menerima [DescribeKeyPairsResponse](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_key_pairs_response.html)yang dapat Anda gunakan untuk mengakses daftar pasangan kunci dengan memanggil `GetKeyPairs` fungsinya, yang mengembalikan daftar [KeyPairInfo](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_key_pair_info.html)objek.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/DescribeKeyPairsRequest.h>
#include <aws/ec2/model/DescribeKeyPairsResponse.h>
#include <iomanip>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::DescribeKeyPairsRequest request;

    Aws::EC2::Model::DescribeKeyPairsOutcome outcome = ec2Client.DescribeKeyPairs(request);
    if (outcome.IsSuccess()) {
        std::cout << std::left <<
                  std::setw(32) << "Name" <<
                  std::setw(64) << "Fingerprint" << std::endl;

        const std::vector<Aws::EC2::Model::KeyPairInfo> &key_pairs =
                outcome.GetResult().GetKeyPairs();
        for (const auto &key_pair: key_pairs) {
            std::cout << std::left <<
                      std::setw(32) << key_pair.GetKeyName() <<
                      std::setw(64) << key_pair.GetKeyFingerprint() << std::endl;
        }
    } else {
        std::cerr << "Failed to describe key pairs:" <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/describe_key_pairs.cpp).

## Hapus Pasangan Kunci
<a name="delete-a-key-pair"></a>

Untuk menghapus key pair, panggil `DeleteKeyPair` fungsi EC2 Klien, berikan [DeleteKeyPairRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_delete_key_pair_request.html)yang berisi nama key pair yang akan dihapus.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/DeleteKeyPairRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::DeleteKeyPairRequest request;

    request.SetKeyName(keyPairName);
    const Aws::EC2::Model::DeleteKeyPairOutcome outcome = ec2Client.DeleteKeyPair(
            request);

    if (!outcome.IsSuccess()) {
        std::cerr << "Failed to delete key pair " << keyPairName <<
                  ":" << outcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Successfully deleted key pair named " << keyPairName <<
                  std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/delete_key_pair.cpp).

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

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

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

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

Untuk membuat grup keamanan, panggil `CreateSecurityGroup` fungsi EC2 Klien dengan [CreateSecurityGroupRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_create_security_group_request.html)yang berisi nama kunci.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/CreateSecurityGroupRequest.h>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);

    Aws::EC2::Model::CreateSecurityGroupRequest request;

    request.SetGroupName(groupName);
    request.SetDescription(description);
    request.SetVpcId(vpcID);

    const Aws::EC2::Model::CreateSecurityGroupOutcome outcome =
            ec2Client.CreateSecurityGroup(request);

    if (!outcome.IsSuccess()) {
        std::cerr << "Failed to create security group:" <<
                  outcome.GetError().GetMessage() << std::endl;
        return false;
    }

    std::cout << "Successfully created security group named " << groupName <<
              std::endl;
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/create_security_group.cpp).

## Konfigurasikan Grup Keamanan
<a name="configure-a-security-group"></a>

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

Untuk menambahkan aturan ingress ke grup keamanan Anda, gunakan `AuthorizeSecurityGroupIngress` fungsi EC2 Klien, dengan memberikan nama grup keamanan dan aturan akses ([IpPermission](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_ip_permission.html)) yang ingin Anda tetapkan di dalam objek [AuthorizeSecurityGroupIngressRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_authorize_security_group_ingress_request.html). Contoh berikut menunjukkan cara menambahkan izin IP ke grup keamanan.

 **Termasuk** 

```
#include <aws/ec2/model/AuthorizeSecurityGroupIngressRequest.h>
```

 **Kode** 

```
    Aws::EC2::Model::AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest;
    authorizeSecurityGroupIngressRequest.SetGroupId(groupID);
```

```
    Aws::String ingressIPRange = "203.0.113.0/24";  // Configure this for your allowed IP range.
    Aws::EC2::Model::IpRange ip_range;
    ip_range.SetCidrIp(ingressIPRange);

    Aws::EC2::Model::IpPermission permission1;
    permission1.SetIpProtocol("tcp");
    permission1.SetToPort(80);
    permission1.SetFromPort(80);
    permission1.AddIpRanges(ip_range);

    authorize_request.AddIpPermissions(permission1);

    Aws::EC2::Model::IpPermission permission2;
    permission2.SetIpProtocol("tcp");
    permission2.SetToPort(22);
    permission2.SetFromPort(22);
    permission2.AddIpRanges(ip_range);

    authorize_request.AddIpPermissions(permission2);
```

```
    Aws::EC2::Model::AuthorizeSecurityGroupIngressOutcome authorizeSecurityGroupIngressOutcome =
            ec2Client.AuthorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);

    if (authorizeSecurityGroupIngressOutcome.IsSuccess()) {
        std::cout << "Successfully authorized security group ingress." << std::endl;
    } else {
        std::cerr << "Error authorizing security group ingress: "
                  << authorizeSecurityGroupIngressOutcome.GetError().GetMessage() << std::endl;
    }
```

Untuk menambahkan aturan keluar ke grup keamanan, berikan data serupa [AuthorizeSecurityGroupEgressRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_authorize_security_group_egress_request.html)ke fungsi EC2 Klien`AuthorizeSecurityGroupEgress`.

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/create_security_group.cpp).

## Jelaskan Grup Keamanan
<a name="describe-security-groups"></a>

Untuk mendeskripsikan grup keamanan Anda atau mendapatkan informasi tentang mereka, hubungi `DescribeSecurityGroups` fungsi EC2 Klien dengan file [DescribeSecurityGroupsRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_security_groups_request.html).

Anda akan menerima objek hasil yang dapat Anda gunakan untuk mengakses daftar grup keamanan dengan memanggil `GetSecurityGroups` fungsinya, yang mengembalikan daftar [SecurityGroup](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_security_group.html)objek. [DescribeSecurityGroupsResponse](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_describe_security_groups_response.html)

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/DescribeSecurityGroupsRequest.h>
#include <aws/ec2/model/DescribeSecurityGroupsResponse.h>
#include <iomanip>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::DescribeSecurityGroupsRequest request;

    if (!groupID.empty()) {
        request.AddGroupIds(groupID);
    }

    Aws::String nextToken;
    do {
        if (!nextToken.empty()) {
            request.SetNextToken(nextToken);
        }

        Aws::EC2::Model::DescribeSecurityGroupsOutcome outcome = ec2Client.DescribeSecurityGroups(request);
        if (outcome.IsSuccess()) {
            std::cout << std::left <<
                      std::setw(32) << "Name" <<
                      std::setw(30) << "GroupId" <<
                      std::setw(30) << "VpcId" <<
                      std::setw(64) << "Description" << std::endl;

            const std::vector<Aws::EC2::Model::SecurityGroup> &securityGroups =
                    outcome.GetResult().GetSecurityGroups();

            for (const auto &securityGroup: securityGroups) {
                std::cout << std::left <<
                          std::setw(32) << securityGroup.GetGroupName() <<
                          std::setw(30) << securityGroup.GetGroupId() <<
                          std::setw(30) << securityGroup.GetVpcId() <<
                          std::setw(64) << securityGroup.GetDescription() <<
                          std::endl;
            }
        } else {
            std::cerr << "Failed to describe security groups:" <<
                      outcome.GetError().GetMessage() << std::endl;
            return false;
        }

        nextToken = outcome.GetResult().GetNextToken();
    } while (!nextToken.empty());
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/describe_security_groups.cpp).

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

Untuk menghapus grup keamanan, panggil `DeleteSecurityGroup` fungsi EC2 Klien, berikan [DeleteSecurityGroupRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-ec2/html/class_aws_1_1_e_c2_1_1_model_1_1_delete_security_group_request.html)yang berisi ID grup keamanan untuk dihapus.

 **Termasuk** 

```
#include <aws/ec2/EC2Client.h>
#include <aws/ec2/model/DeleteSecurityGroupRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::EC2::EC2Client ec2Client(clientConfiguration);
    Aws::EC2::Model::DeleteSecurityGroupRequest request;

    request.SetGroupId(securityGroupID);
    Aws::EC2::Model::DeleteSecurityGroupOutcome outcome = ec2Client.DeleteSecurityGroup(request);

    if (!outcome.IsSuccess()) {
        std::cerr << "Failed to delete security group " << securityGroupID <<
                  ":" << outcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Successfully deleted security group " << securityGroupID <<
                  std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/ec2/delete_security_group.cpp).

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

# Contoh kode Amazon S3 menggunakan AWS SDK untuk C\$1\$1
<a name="examples-s3"></a>

[Amazon S3](https://aws.amazon.com/s3) adalah penyimpanan objek yang dibangun untuk menyimpan dan mengambil sejumlah data dari mana saja. Ada beberapa kelas yang disediakan oleh antarmuka AWS SDK untuk C\$1\$1 to dengan Amazon S3. 

**catatan**  
Hanya kode yang diperlukan untuk menunjukkan teknik tertentu yang disediakan dalam Panduan ini, tetapi [kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp). Pada GitHub Anda dapat mengunduh satu file sumber atau Anda dapat mengkloning repositori secara lokal untuk mendapatkan, membangun, dan menjalankan semua contoh.
+ [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_s3_client.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_s3_client.html) kelas 

  `S3Client`Perpustakaan adalah antarmuka Amazon S3 berfitur lengkap.

  `list_buckets_disabling_dns_cache.cpp`Contoh dalam set ini ditujukan khusus untuk bekerja dengan CURL aktif Linux/Mac (meskipun dapat dimodifikasi untuk bekerja pada Windows). Jika Anda menggunakan Windows, hapus file `list_buckets_disabling_dns_cache.cpp` sebelum membangun proyek karena bergantung pada curl Linux HttpClient .

  Contoh kode yang menggunakan `S3Client` ada di [`s3`folder](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3) di Github. Lihat [Readme](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/README.md) di Github untuk daftar lengkap fungsi yang ditunjukkan oleh kumpulan contoh ini.

  Bagian dari rangkaian `s3` contoh dibahas dalam detail tambahan dalam panduan ini:
  + [Membuat, mencantumkan, dan menghapus bucket](examples-s3-buckets.md)
  + [Operasi pada objek](examples-s3-objects.md)— Mengunggah dan mengunduh objek data
  + [Mengelola Izin Akses Amazon S3](examples-s3-access-permissions.md)
  + [Mengelola Akses ke Bucket Amazon S3 Menggunakan Kebijakan Bucket](examples-s3-bucket-policies.md)
  + [Mengonfigurasi Bucket Amazon S3 sebagai Situs Web](examples-s3-website-configuration.md)
+ [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3-crt/html/class_aws_1_1_s3_crt_1_1_s3_crt_client.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3-crt/html/class_aws_1_1_s3_crt_1_1_s3_crt_client.html) kelas 

  `S3CrtClient`Ditambahkan di SDK versi 1.9. `S3CrtClient`menyediakan throughput tinggi untuk Amazon S3 GET (download) dan PUT (upload) operasi. `S3CrtClient`Ini diimplementasikan di bagian atas pustaka AWS Common Runtime (CRT). 

  Contoh kode yang menggunakan `S3CrtClient` ada di [`s3-crt`folder](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3-crt) di Github. Lihat [Readme](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3-crt/README.md) di Github untuk daftar lengkap fungsi yang ditunjukkan oleh kumpulan contoh ini.
  + [Menggunakan `S3CrtClient` untuk operasi Amazon S3](examples-s3-crt.md)
+ [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/class_aws_1_1_transfer_1_1_transfer_manager.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/class_aws_1_1_transfer_1_1_transfer_manager.html) kelas 

  `TransferManager`adalah layanan yang dikelola sepenuhnya yang memungkinkan transfer file melalui File Transfer Protocol (FTP), File Transfer Protocol melalui SSL (FTPS), atau Secure Shell (SSH) File Transfer Protocol (SFTP) langsung masuk dan keluar dari Amazon S3.

  Contoh kode yang menggunakan `TransferManager` ada di [`transfer-manager`folder](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/transfer-manager) di Github. Lihat [Readme](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/transfer-manager/README.md) di Github untuk daftar lengkap fungsi yang ditunjukkan oleh kumpulan contoh ini.
  + [Menggunakan TransferManager untuk operasi Amazon S3](examples-s3-transfermanager.md)

# Membuat, mencantumkan, dan menghapus bucket
<a name="examples-s3-buckets"></a>

*Setiap *objek* atau file di Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) terdapat dalam bucket, yang mewakili folder objek.* Setiap bucket memiliki nama yang unik secara global di dalamnya AWS. Untuk informasi selengkapnya, lihat [Bekerja dengan Bucket Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html) di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensil](credentials.md).

## Buat daftar bucket
<a name="list-buckets"></a>

Untuk menjalankan `list_buckets` contoh, pada prompt perintah, navigasikan ke folder tempat sistem build Anda membuat executable build Anda. Jalankan seperti yang dapat dieksekusi `run_list_buckets` (nama file yang dapat dieksekusi penuh Anda akan berbeda berdasarkan sistem operasi Anda). Output mencantumkan bucket akun Anda jika Anda memilikinya, atau menampilkan daftar kosong jika Anda tidak memiliki ember.

Dalam`list_buckets.cpp`, ada dua metode.
+ `main()`panggilan`ListBuckets()`. 
+ `ListBuckets()`menggunakan SDK untuk menanyakan bucket Anda.

`S3Client`Objek memanggil `ListBuckets()` metode SDK. Jika berhasil, metode mengembalikan `ListBucketOutcome` objek, yang berisi `ListBucketResult` objek. `ListBucketResult`Objek memanggil `GetBuckets()` metode untuk mendapatkan daftar `Bucket` objek yang berisi informasi tentang setiap bucket Amazon S3 di akun Anda.

 **Kode** 

```
bool AwsDoc::S3::listBuckets(const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);

    auto outcome = client.ListBuckets();

    bool result = true;
    if (!outcome.IsSuccess()) {
        std::cerr << "Failed with error: " << outcome.GetError() << std::endl;
        result = false;
    } else {
        std::cout << "Found " << outcome.GetResult().GetBuckets().size() << " buckets\n";
        for (auto &&b: outcome.GetResult().GetBuckets()) {
            std::cout << b.GetName() << std::endl;
        }
    }

    return result;
}
```

Lihat [contoh list\$1buckets](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/list_buckets.cpp) lengkap di Github.

## Buat bucket
<a name="create-bucket"></a>



Untuk menjalankan `create_bucket` contoh, pada prompt perintah, navigasikan ke folder tempat sistem build Anda membuat executable build Anda. Jalankan seperti yang dapat dieksekusi `run_create_bucket` (nama file yang dapat dieksekusi penuh Anda akan berbeda berdasarkan sistem operasi Anda). Kode membuat bucket kosong di bawah akun Anda dan kemudian menampilkan keberhasilan atau kegagalan permintaan.

Dalam`create_bucket.cpp`, ada dua metode. 
+ `main()`panggilan`CreateBucket()`. Di`main()`, Anda perlu mengubah Wilayah AWS ke Wilayah akun Anda dengan menggunakan`enum`. Anda dapat melihat Wilayah akun Anda dengan masuk ke [Konsol Manajemen AWS](https://console.aws.amazon.com/), dan menemukan Wilayah di sudut kanan atas. 
+ `CreateBucket()`menggunakan SDK untuk membuat bucket. 



`S3Client`Objek memanggil `CreateBucket()` metode SDK, meneruskan a `CreateBucketRequest` dengan nama bucket. Secara default, bucket dibuat di Wilayah *us-east-1 (Virginia N*.). Jika Wilayah Anda bukan *us-east-1* maka kode akan menyiapkan batasan bucket untuk memastikan bucket dibuat di Wilayah Anda.

 **Kode** 

```
bool AwsDoc::S3::createBucket(const Aws::String &bucketName,
                              const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);
    Aws::S3::Model::CreateBucketRequest request;
    request.SetBucket(bucketName);

    if (clientConfig.region != "us-east-1") {
        Aws::S3::Model::CreateBucketConfiguration createBucketConfig;
        createBucketConfig.SetLocationConstraint(
                Aws::S3::Model::BucketLocationConstraintMapper::GetBucketLocationConstraintForName(
                        clientConfig.region));
        request.SetCreateBucketConfiguration(createBucketConfig);
    }

    Aws::S3::Model::CreateBucketOutcome outcome = client.CreateBucket(request);
    if (!outcome.IsSuccess()) {
        auto err = outcome.GetError();
        std::cerr << "Error: createBucket: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "Created bucket " << bucketName <<
                  " in the specified AWS Region." << std::endl;
    }

    return outcome.IsSuccess();
}
```

Lihat contoh [create\$1buckets](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/create_bucket.cpp) lengkap di Github.

## Hapus bucket
<a name="delete-bucket"></a>



Untuk menjalankan `delete_bucket` contoh, pada prompt perintah, navigasikan ke folder tempat sistem build Anda membuat executable build Anda. Jalankan seperti yang dapat dieksekusi `run_delete_bucket` (nama file yang dapat dieksekusi penuh Anda akan berbeda berdasarkan sistem operasi Anda). Kode menghapus bucket yang ditentukan di akun Anda dan kemudian menampilkan keberhasilan atau kegagalan permintaan.

Di dalamnya `delete_bucket.cpp` ada dua metode. 
+ `main()`panggilan`DeleteBucket()`. Di`main()`, Anda perlu mengubah Wilayah AWS ke Wilayah akun Anda dengan menggunakan`enum`. Anda juga perlu mengubah `bucket_name` ke nama ember untuk dihapus. 
+ `DeleteBucket()`menggunakan SDK untuk menghapus bucket. 



`S3Client`Objek menggunakan `DeleteBucket()` metode SDK, meneruskan `DeleteBucketRequest` objek dengan nama bucket untuk dihapus. Ember harus kosong agar berhasil.

 **Kode**

```
bool AwsDoc::S3::deleteBucket(const Aws::String &bucketName,
                              const Aws::S3::S3ClientConfiguration &clientConfig) {

    Aws::S3::S3Client client(clientConfig);

    Aws::S3::Model::DeleteBucketRequest request;
    request.SetBucket(bucketName);

    Aws::S3::Model::DeleteBucketOutcome outcome =
            client.DeleteBucket(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &err = outcome.GetError();
        std::cerr << "Error: deleteBucket: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "The bucket was deleted" << std::endl;
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh delete\$1bucket](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/delete_bucket.cpp) lengkap di Github.

# Operasi pada objek
<a name="examples-s3-objects"></a>

Objek Amazon S3 mewakili *file*, yang merupakan kumpulan data. Setiap benda harus berada di dalam [ember](examples-s3-buckets.md).

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

## Unggah file ke ember
<a name="upload-object"></a>

Gunakan `PutObject` fungsi `S3Client` objek, berikan nama bucket, nama kunci, dan file untuk diunggah. `Aws::FStream`digunakan untuk mengunggah konten file lokal ke ember. Bucket harus ada atau kesalahan akan terjadi.

Untuk contoh mengunggah objek secara asinkron, lihat [Pemrograman asinkron menggunakan AWS SDK untuk C\$1\$1](async-methods.md)

 **Kode** 

```
bool AwsDoc::S3::putObject(const Aws::String &bucketName,
                           const Aws::String &fileName,
                           const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    Aws::S3::Model::PutObjectRequest request;
    request.SetBucket(bucketName);
    //We are using the name of the file as the key for the object in the bucket.
    //However, this is just a string and can be set according to your retrieval needs.
    request.SetKey(fileName);

    std::shared_ptr<Aws::IOStream> inputData =
            Aws::MakeShared<Aws::FStream>("SampleAllocationTag",
                                          fileName.c_str(),
                                          std::ios_base::in | std::ios_base::binary);

    if (!*inputData) {
        std::cerr << "Error unable to read file " << fileName << std::endl;
        return false;
    }

    request.SetBody(inputData);

    Aws::S3::Model::PutObjectOutcome outcome =
            s3Client.PutObject(request);

    if (!outcome.IsSuccess()) {
        std::cerr << "Error: putObject: " <<
                  outcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Added object '" << fileName << "' to bucket '"
                  << bucketName << "'.";
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/put_object.cpp) di Github.

## Unggah string ke ember
<a name="upload-object-string"></a>

Gunakan `PutObject` fungsi `S3Client` objek, berikan nama bucket, nama kunci, dan file untuk diunggah. Bucket harus ada atau kesalahan akan terjadi. Contoh ini berbeda dari yang sebelumnya dengan menggunakan `Aws::StringStream` untuk mengunggah objek data string dalam memori langsung ke bucket.

Untuk contoh mengunggah objek secara asinkron, lihat [Pemrograman asinkron menggunakan AWS SDK untuk C\$1\$1](async-methods.md)

 **Kode** 

```
bool AwsDoc::S3::putObjectBuffer(const Aws::String &bucketName,
                                 const Aws::String &objectName,
                                 const std::string &objectContent,
                                 const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    Aws::S3::Model::PutObjectRequest request;
    request.SetBucket(bucketName);
    request.SetKey(objectName);

    const std::shared_ptr<Aws::IOStream> inputData =
            Aws::MakeShared<Aws::StringStream>("");
    *inputData << objectContent.c_str();

    request.SetBody(inputData);

    Aws::S3::Model::PutObjectOutcome outcome = s3Client.PutObject(request);

    if (!outcome.IsSuccess()) {
        std::cerr << "Error: putObjectBuffer: " <<
                  outcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Success: Object '" << objectName << "' with content '"
                  << objectContent << "' uploaded to bucket '" << bucketName << "'.";
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/put_object_buffer.cpp) di Github.

## Mencantumkan Objek
<a name="list-objects"></a>

Untuk mendapatkan daftar objek dalam ember, gunakan `ListObjects` fungsi `S3Client` objek. Sediakan dengan `ListObjectsRequest` yang Anda atur dengan nama ember untuk mencantumkan isinya.

`ListObjects`Fungsi mengembalikan `ListObjectsOutcome` objek yang dapat Anda gunakan untuk mendapatkan daftar objek dalam bentuk `Object` contoh.

 **Kode** 

```
bool AwsDoc::S3::listObjects(const Aws::String &bucketName,
                             Aws::Vector<Aws::String> &keysResult,
                             const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    Aws::S3::Model::ListObjectsV2Request request;
    request.WithBucket(bucketName);

    Aws::String continuationToken; // Used for pagination.
    Aws::Vector<Aws::S3::Model::Object> allObjects;

    do {
        if (!continuationToken.empty()) {
            request.SetContinuationToken(continuationToken);
        }

        auto outcome = s3Client.ListObjectsV2(request);

        if (!outcome.IsSuccess()) {
            std::cerr << "Error: listObjects: " <<
                      outcome.GetError().GetMessage() << std::endl;
            return false;
        } else {
            Aws::Vector<Aws::S3::Model::Object> objects =
                    outcome.GetResult().GetContents();

            allObjects.insert(allObjects.end(), objects.begin(), objects.end());
            continuationToken = outcome.GetResult().GetNextContinuationToken();
        }
    } while (!continuationToken.empty());

    std::cout << allObjects.size() << " object(s) found:" << std::endl;

    for (const auto &object: allObjects) {
        std::cout << "  " << object.GetKey() << std::endl;
        keysResult.push_back(object.GetKey());
    }

    return true;
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/list_objects.cpp) di Github.

## Unduh objek
<a name="download-object"></a>

Gunakan `GetObject` fungsi `S3Client` objek, berikan `GetObjectRequest` yang Anda atur dengan nama ember dan kunci objek untuk diunduh. `GetObject`mengembalikan [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/namespace_aws_1_1_s3_1_1_model.html#a6e16a7b25e8c7547934968a538a15272](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/namespace_aws_1_1_s3_1_1_model.html#a6e16a7b25e8c7547934968a538a15272)objek yang terdiri dari a [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_get_object_result.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_get_object_result.html)dan a [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_s3_error.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_s3_error.html). `GetObjectResult`dapat digunakan untuk mengakses data objek S3.

Contoh berikut mengunduh objek dari Amazon S3. Isi objek disimpan dalam variabel lokal dan baris pertama konten adalah output ke konsol.

 **Kode** 

```
bool AwsDoc::S3::getObject(const Aws::String &objectKey,
                           const Aws::String &fromBucket,
                           const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);

    Aws::S3::Model::GetObjectRequest request;
    request.SetBucket(fromBucket);
    request.SetKey(objectKey);

    Aws::S3::Model::GetObjectOutcome outcome =
            client.GetObject(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &err = outcome.GetError();
        std::cerr << "Error: getObject: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "Successfully retrieved '" << objectKey << "' from '"
                  << fromBucket << "'." << std::endl;
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/get_object.cpp) di Github.

## Hapus objek
<a name="delete-object"></a>

Gunakan `DeleteObject` fungsi `S3Client` objek, meneruskannya `DeleteObjectRequest` yang Anda atur dengan nama ember dan objek untuk diunduh. *Bucket dan kunci objek yang ditentukan harus ada atau kesalahan akan terjadi*.

 **Kode** 

```
bool AwsDoc::S3::deleteObject(const Aws::String &objectKey,
                              const Aws::String &fromBucket,
                              const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);
    Aws::S3::Model::DeleteObjectRequest request;

    request.WithKey(objectKey)
            .WithBucket(fromBucket);

    Aws::S3::Model::DeleteObjectOutcome outcome =
            client.DeleteObject(request);

    if (!outcome.IsSuccess()) {
        auto err = outcome.GetError();
        std::cerr << "Error: deleteObject: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "Successfully deleted the object." << std::endl;
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/delete_object.cpp) di Github.

# Mengelola Izin Akses Amazon S3
<a name="examples-s3-access-permissions"></a>

Izin akses untuk bucket atau objek Amazon S3 ditentukan dalam daftar kontrol akses (ACL). ACL menentukan pemilik bucket/object dan daftar hibah. Setiap hibah menentukan pengguna (atau penerima hibah) dan izin pengguna untuk mengakses ember/objek, seperti akses BACA atau TULIS.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensil](credentials.md).

## Mengelola Daftar Kontrol Akses Objek
<a name="manage-an-object-s-access-control-list"></a>

Daftar kontrol akses untuk objek dapat diambil dengan memanggil `S3Client` metode`GetObjectAcl`. Metode ini menerima nama-nama objek dan embernya. Nilai pengembalian termasuk ACL `Owner` dan daftar. `Grants`

```
bool AwsDoc::S3::getObjectAcl(const Aws::String &bucketName,
                              const Aws::String &objectKey,
                              const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    Aws::S3::Model::GetObjectAclRequest request;
    request.SetBucket(bucketName);
    request.SetKey(objectKey);

    Aws::S3::Model::GetObjectAclOutcome outcome =
            s3Client.GetObjectAcl(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &err = outcome.GetError();
        std::cerr << "Error: getObjectAcl: "
                  << err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        Aws::Vector<Aws::S3::Model::Grant> grants =
                outcome.GetResult().GetGrants();

        for (auto it = grants.begin(); it != grants.end(); it++) {
            std::cout << "For object " << objectKey << ": "
                      << std::endl << std::endl;

            Aws::S3::Model::Grant grant = *it;
            Aws::S3::Model::Grantee grantee = grant.GetGrantee();

            if (grantee.TypeHasBeenSet()) {
                std::cout << "Type:          "
                          << getGranteeTypeString(grantee.GetType()) << std::endl;
            }

            if (grantee.DisplayNameHasBeenSet()) {
                std::cout << "Display name:  "
                          << grantee.GetDisplayName() << std::endl;
            }

            if (grantee.EmailAddressHasBeenSet()) {
                std::cout << "Email address: "
                          << grantee.GetEmailAddress() << std::endl;
            }

            if (grantee.IDHasBeenSet()) {
                std::cout << "ID:            "
                          << grantee.GetID() << std::endl;
            }

            if (grantee.URIHasBeenSet()) {
                std::cout << "URI:           "
                          << grantee.GetURI() << std::endl;
            }

            std::cout << "Permission:    " <<
                      getPermissionString(grant.GetPermission()) <<
                      std::endl << std::endl;
        }
    }

    return outcome.IsSuccess();
}

//! Routine which converts a built-in type enumeration to a human-readable string.
/*!
 \param type: Type enumeration.
 \return String: Human-readable string
*/
Aws::String getGranteeTypeString(const Aws::S3::Model::Type &type) {
    switch (type) {
        case Aws::S3::Model::Type::AmazonCustomerByEmail:
            return "Email address of an AWS account";
        case Aws::S3::Model::Type::CanonicalUser:
            return "Canonical user ID of an AWS account";
        case Aws::S3::Model::Type::Group:
            return "Predefined Amazon S3 group";
        case Aws::S3::Model::Type::NOT_SET:
            return "Not set";
        default:
            return "Type unknown";
    }
}

//! Routine which converts a built-in type enumeration to a human-readable string.
/*!
 \param permission: Permission enumeration.
 \return String: Human-readable string
*/
Aws::String getPermissionString(const Aws::S3::Model::Permission &permission) {
    switch (permission) {
        case Aws::S3::Model::Permission::FULL_CONTROL:
            return "Can read this object's data and its metadata, "
                   "and read/write this object's permissions";
        case Aws::S3::Model::Permission::NOT_SET:
            return "Permission not set";
        case Aws::S3::Model::Permission::READ:
            return "Can read this object's data and its metadata";
        case Aws::S3::Model::Permission::READ_ACP:
            return "Can read this object's permissions";
            // case Aws::S3::Model::Permission::WRITE // Not applicable.
        case Aws::S3::Model::Permission::WRITE_ACP:
            return "Can write this object's permissions";
        default:
            return "Permission unknown";
    }
}
```

ACL dapat dimodifikasi dengan membuat ACL baru atau mengubah hibah yang ditentukan dalam ACL saat ini. ACL yang diperbarui menjadi ACL baru saat ini dengan meneruskannya ke metode. `PutObjectAcl`

Kode berikut menggunakan ACL diambil oleh `GetObjectAcl` dan menambahkan hibah baru untuk itu. Pengguna atau penerima diberikan izin BACA untuk objek tersebut. ACL yang dimodifikasi diteruskan ke`PutObjectAcl`, menjadikannya ACL baru saat ini. 

```
bool AwsDoc::S3::putObjectAcl(const Aws::String &bucketName, const Aws::String &objectKey, const Aws::String &ownerID,
                              const Aws::String &granteePermission, const Aws::String &granteeType,
                              const Aws::String &granteeID, const Aws::String &granteeEmailAddress,
                              const Aws::String &granteeURI, const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    Aws::S3::Model::Owner owner;
    owner.SetID(ownerID);

    Aws::S3::Model::Grantee grantee;
    grantee.SetType(setGranteeType(granteeType));

    if (!granteeEmailAddress.empty()) {
        grantee.SetEmailAddress(granteeEmailAddress);
    }

    if (!granteeID.empty()) {
        grantee.SetID(granteeID);
    }

    if (!granteeURI.empty()) {
        grantee.SetURI(granteeURI);
    }

    Aws::S3::Model::Grant grant;
    grant.SetGrantee(grantee);
    grant.SetPermission(setGranteePermission(granteePermission));

    Aws::Vector<Aws::S3::Model::Grant> grants;
    grants.push_back(grant);

    Aws::S3::Model::AccessControlPolicy acp;
    acp.SetOwner(owner);
    acp.SetGrants(grants);

    Aws::S3::Model::PutObjectAclRequest request;
    request.SetAccessControlPolicy(acp);
    request.SetBucket(bucketName);
    request.SetKey(objectKey);

    Aws::S3::Model::PutObjectAclOutcome outcome =
            s3Client.PutObjectAcl(request);

    if (!outcome.IsSuccess()) {
        auto error = outcome.GetError();
        std::cerr << "Error: putObjectAcl: " << error.GetExceptionName()
                  << " - " << error.GetMessage() << std::endl;
    } else {
        std::cout << "Successfully added an ACL to the object '" << objectKey
                  << "' in the bucket '" << bucketName << "'." << std::endl;
    }

    return outcome.IsSuccess();
}

//! Routine which converts a human-readable string to a built-in type enumeration.
/*!
 \param access: Human readable string.
 \return Permission: Permission enumeration.
*/
Aws::S3::Model::Permission setGranteePermission(const Aws::String &access) {
    if (access == "FULL_CONTROL")
        return Aws::S3::Model::Permission::FULL_CONTROL;
    if (access == "WRITE")
        return Aws::S3::Model::Permission::WRITE;
    if (access == "READ")
        return Aws::S3::Model::Permission::READ;
    if (access == "WRITE_ACP")
        return Aws::S3::Model::Permission::WRITE_ACP;
    if (access == "READ_ACP")
        return Aws::S3::Model::Permission::READ_ACP;
    return Aws::S3::Model::Permission::NOT_SET;
}

//! Routine which converts a human-readable string to a built-in type enumeration.
/*!
 \param type: Human readable string.
 \return Type: Type enumeration.
*/
Aws::S3::Model::Type setGranteeType(const Aws::String &type) {
    if (type == "Amazon customer by email")
        return Aws::S3::Model::Type::AmazonCustomerByEmail;
    if (type == "Canonical user")
        return Aws::S3::Model::Type::CanonicalUser;
    if (type == "Group")
        return Aws::S3::Model::Type::Group;
    return Aws::S3::Model::Type::NOT_SET;
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/get_put_object_acl.cpp) di Github.

## Mengelola Daftar Kontrol Akses Bucket
<a name="manage-a-bucket-s-access-control-list"></a>

Dalam kebanyakan kasus, metode yang lebih disukai untuk menyetel izin akses bucket adalah dengan menentukan kebijakan bucket. Namun, bucket juga mendukung daftar kontrol akses bagi pengguna yang ingin menggunakannya.

Pengelolaan daftar kontrol akses untuk bucket identik dengan yang digunakan untuk objek. `GetBucketAcl`Metode ini mengambil ACL bucket saat ini dan `PutBucketAcl` menerapkan ACL baru ke bucket.

Kode berikut menunjukkan mendapatkan dan menyetel ACL bucket.

```
//! Routine which demonstrates setting the ACL for an S3 bucket.
/*!
  \param bucketName: Name of a bucket.
  \param ownerID: The canonical ID of the bucket owner.
   See https://docs.aws.amazon.com/AmazonS3/latest/userguide/finding-canonical-user-id.html for more information.
  \param granteePermission: The access level to enable for the grantee.
  \param granteeType: The type of grantee.
  \param granteeID: The canonical ID of the grantee.
  \param granteeEmailAddress: The email address associated with the grantee's AWS account.
  \param granteeURI: The URI of a built-in access group.
  \param clientConfig: Aws client configuration.
  \return bool: Function succeeded.
*/

bool AwsDoc::S3::getPutBucketAcl(const Aws::String &bucketName,
                                 const Aws::String &ownerID,
                                 const Aws::String &granteePermission,
                                 const Aws::String &granteeType,
                                 const Aws::String &granteeID,
                                 const Aws::String &granteeEmailAddress,
                                 const Aws::String &granteeURI,
                                 const Aws::S3::S3ClientConfiguration &clientConfig) {
    bool result = ::putBucketAcl(bucketName, ownerID, granteePermission, granteeType,
                                 granteeID,
                                 granteeEmailAddress,
                                 granteeURI,
                                 clientConfig);
    if (result) {
        result = ::getBucketAcl(bucketName, clientConfig);
    }

    return result;
}

//! Routine which demonstrates setting the ACL for an S3 bucket.
/*!
  \param bucketName: Name of from bucket.
  \param ownerID: The canonical ID of the bucket owner.
   See https://docs.aws.amazon.com/AmazonS3/latest/userguide/finding-canonical-user-id.html for more information.
  \param granteePermission: The access level to enable for the grantee.
  \param granteeType: The type of grantee.
  \param granteeID: The canonical ID of the grantee.
  \param granteeEmailAddress: The email address associated with the grantee's AWS account.
  \param granteeURI: The URI of a built-in access group.
  \param clientConfig: Aws client configuration.
  \return bool: Function succeeded.
*/

bool putBucketAcl(const Aws::String &bucketName,
                  const Aws::String &ownerID,
                  const Aws::String &granteePermission,
                  const Aws::String &granteeType,
                  const Aws::String &granteeID,
                  const Aws::String &granteeEmailAddress,
                  const Aws::String &granteeURI,
                  const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    Aws::S3::Model::Owner owner;
    owner.SetID(ownerID);

    Aws::S3::Model::Grantee grantee;
    grantee.SetType(setGranteeType(granteeType));

    if (!granteeEmailAddress.empty()) {
        grantee.SetEmailAddress(granteeEmailAddress);
    }

    if (!granteeID.empty()) {
        grantee.SetID(granteeID);
    }

    if (!granteeURI.empty()) {
        grantee.SetURI(granteeURI);
    }

    Aws::S3::Model::Grant grant;
    grant.SetGrantee(grantee);
    grant.SetPermission(setGranteePermission(granteePermission));

    Aws::Vector<Aws::S3::Model::Grant> grants;
    grants.push_back(grant);

    Aws::S3::Model::AccessControlPolicy acp;
    acp.SetOwner(owner);
    acp.SetGrants(grants);

    Aws::S3::Model::PutBucketAclRequest request;
    request.SetAccessControlPolicy(acp);
    request.SetBucket(bucketName);

    Aws::S3::Model::PutBucketAclOutcome outcome =
            s3Client.PutBucketAcl(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &error = outcome.GetError();

        std::cerr << "Error: putBucketAcl: " << error.GetExceptionName()
                  << " - " << error.GetMessage() << std::endl;
    } else {
        std::cout << "Successfully added an ACL to the bucket '" << bucketName
                  << "'." << std::endl;
    }

    return outcome.IsSuccess();
}

//! Routine which demonstrates getting the ACL for an S3 bucket.
/*!
  \param bucketName: Name of the s3 bucket.
  \param clientConfig: Aws client configuration.
  \return bool: Function succeeded.
*/
bool getBucketAcl(const Aws::String &bucketName,
                  const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    Aws::S3::Model::GetBucketAclRequest request;
    request.SetBucket(bucketName);

    Aws::S3::Model::GetBucketAclOutcome outcome =
            s3Client.GetBucketAcl(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &err = outcome.GetError();
        std::cerr << "Error: getBucketAcl: "
                  << err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        const Aws::Vector<Aws::S3::Model::Grant> &grants =
                outcome.GetResult().GetGrants();

        for (const Aws::S3::Model::Grant &grant: grants) {
            const Aws::S3::Model::Grantee &grantee = grant.GetGrantee();

            std::cout << "For bucket " << bucketName << ": "
                      << std::endl << std::endl;

            if (grantee.TypeHasBeenSet()) {
                std::cout << "Type:          "
                          << getGranteeTypeString(grantee.GetType()) << std::endl;
            }

            if (grantee.DisplayNameHasBeenSet()) {
                std::cout << "Display name:  "
                          << grantee.GetDisplayName() << std::endl;
            }

            if (grantee.EmailAddressHasBeenSet()) {
                std::cout << "Email address: "
                          << grantee.GetEmailAddress() << std::endl;
            }

            if (grantee.IDHasBeenSet()) {
                std::cout << "ID:            "
                          << grantee.GetID() << std::endl;
            }

            if (grantee.URIHasBeenSet()) {
                std::cout << "URI:           "
                          << grantee.GetURI() << std::endl;
            }

            std::cout << "Permission:    " <<
                      getPermissionString(grant.GetPermission()) <<
                      std::endl << std::endl;
        }
    }

    return outcome.IsSuccess();
}

//! Routine which converts a built-in type enumeration to a human-readable string.
/*!
 \param permission: Permission enumeration.
 \return String: Human-readable string.
*/

Aws::String getPermissionString(const Aws::S3::Model::Permission &permission) {
    switch (permission) {
        case Aws::S3::Model::Permission::FULL_CONTROL:
            return "Can list objects in this bucket, create/overwrite/delete "
                   "objects in this bucket, and read/write this "
                   "bucket's permissions";
        case Aws::S3::Model::Permission::NOT_SET:
            return "Permission not set";
        case Aws::S3::Model::Permission::READ:
            return "Can list objects in this bucket";
        case Aws::S3::Model::Permission::READ_ACP:
            return "Can read this bucket's permissions";
        case Aws::S3::Model::Permission::WRITE:
            return "Can create, overwrite, and delete objects in this bucket";
        case Aws::S3::Model::Permission::WRITE_ACP:
            return "Can write this bucket's permissions";
        default:
            return "Permission unknown";
    }
}

//! Routine which converts a human-readable string to a built-in type enumeration
/*!
 \param access: Human readable string.
 \return Permission: Permission enumeration.
*/
Aws::S3::Model::Permission setGranteePermission(const Aws::String &access) {
    if (access == "FULL_CONTROL")
        return Aws::S3::Model::Permission::FULL_CONTROL;
    if (access == "WRITE")
        return Aws::S3::Model::Permission::WRITE;
    if (access == "READ")
        return Aws::S3::Model::Permission::READ;
    if (access == "WRITE_ACP")
        return Aws::S3::Model::Permission::WRITE_ACP;
    if (access == "READ_ACP")
        return Aws::S3::Model::Permission::READ_ACP;
    return Aws::S3::Model::Permission::NOT_SET;
}

//! Routine which converts a built-in type enumeration to a human-readable string.
/*!
 \param type: Type enumeration.
 \return bool: Human-readable string.
*/
Aws::String getGranteeTypeString(const Aws::S3::Model::Type &type) {
    switch (type) {
        case Aws::S3::Model::Type::AmazonCustomerByEmail:
            return "Email address of an AWS account";
        case Aws::S3::Model::Type::CanonicalUser:
            return "Canonical user ID of an AWS account";
        case Aws::S3::Model::Type::Group:
            return "Predefined Amazon S3 group";
        case Aws::S3::Model::Type::NOT_SET:
            return "Not set";
        default:
            return "Type unknown";
    }
}

Aws::S3::Model::Type setGranteeType(const Aws::String &type) {
    if (type == "Amazon customer by email")
        return Aws::S3::Model::Type::AmazonCustomerByEmail;
    if (type == "Canonical user")
        return Aws::S3::Model::Type::CanonicalUser;
    if (type == "Group")
        return Aws::S3::Model::Type::Group;
    return Aws::S3::Model::Type::NOT_SET;
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/get_put_bucket_acl.cpp) di Github.

# Mengelola Akses ke Bucket Amazon S3 Menggunakan Kebijakan Bucket
<a name="examples-s3-bucket-policies"></a>

Anda dapat menyetel, mendapatkan, atau menghapus *kebijakan bucket* untuk mengelola akses ke bucket Amazon S3 Anda.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensyal](credentials.md).

## Menetapkan Kebijakan Bucket
<a name="set-s3-bucket-policy"></a>

Anda dapat menyetel kebijakan bucket untuk bucket S3 tertentu dengan memanggil `PutBucketPolicy` fungsi dan menyediakannya dengan nama bucket dan representasi JSON kebijakan di file. `S3Client` [PutBucketPolicyRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_put_bucket_policy_request.html)

 **Kode** 

```
//! Build a policy JSON string.
/*!
  \param userArn: Aws user Amazon Resource Name (ARN).
      For more information, see https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns.
  \param bucketName: Name of a bucket.
  \return String: Policy as JSON string.
*/

Aws::String getPolicyString(const Aws::String &userArn,
                            const Aws::String &bucketName) {
    return
            "{\n"
            "   \"Version\":\"2012-10-17\",\n"
            "   \"Statement\":[\n"
            "       {\n"
            "           \"Sid\": \"1\",\n"
            "           \"Effect\": \"Allow\",\n"
            "           \"Principal\": {\n"
            "               \"AWS\": \""
            + userArn +
            "\"\n""           },\n"
            "           \"Action\": [ \"s3:getObject\" ],\n"
            "           \"Resource\": [ \"arn:aws:s3:::"
            + bucketName +
            "/*\" ]\n"
            "       }\n"
            "   ]\n"
            "}";
}
```

```
bool AwsDoc::S3::putBucketPolicy(const Aws::String &bucketName,
                                 const Aws::String &policyBody,
                                 const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    std::shared_ptr<Aws::StringStream> request_body =
            Aws::MakeShared<Aws::StringStream>("");
    *request_body << policyBody;

    Aws::S3::Model::PutBucketPolicyRequest request;
    request.SetBucket(bucketName);
    request.SetBody(request_body);

    Aws::S3::Model::PutBucketPolicyOutcome outcome =
            s3Client.PutBucketPolicy(request);

    if (!outcome.IsSuccess()) {
        std::cerr << "Error: putBucketPolicy: "
                  << outcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Set the following policy body for the bucket '" <<
                  bucketName << "':" << std::endl << std::endl;
        std::cout << policyBody << std::endl;
    }

    return outcome.IsSuccess();
}
```

**catatan**  
Kelas [JsonValueutilitas Aws: :Utils: :Json::](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-core/html/class_aws_1_1_utils_1_1_json_1_1_json_value.html) dapat digunakan untuk membantu Anda membangun objek JSON yang valid untuk diteruskan. `PutBucketPolicy`

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/put_bucket_policy.cpp) di Github.

## Dapatkan Kebijakan Bucket
<a name="get-s3-bucket-policy"></a>

Untuk mengambil kebijakan bucket Amazon S3, panggil fungsi `S3Client` `GetBucketPolicy` tersebut, berikan nama bucket di file. [GetBucketPolicyRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_get_bucket_policy_request.html)

 **Kode** 

```
bool AwsDoc::S3::getBucketPolicy(const Aws::String &bucketName,
                                 const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    Aws::S3::Model::GetBucketPolicyRequest request;
    request.SetBucket(bucketName);

    Aws::S3::Model::GetBucketPolicyOutcome outcome =
            s3Client.GetBucketPolicy(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &err = outcome.GetError();
        std::cerr << "Error: getBucketPolicy: "
                  << err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        Aws::StringStream policy_stream;
        Aws::String line;

        outcome.GetResult().GetPolicy() >> line;
        policy_stream << line;

        std::cout << "Retrieve the policy for bucket '" << bucketName << "':\n\n" <<
                  policy_stream.str() << std::endl;
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/get_bucket_policy.cpp) di Github.

## Menghapus Kebijakan Bucket
<a name="delete-s3-bucket-policy"></a>

Untuk menghapus kebijakan bucket, panggil `DeleteBucketPolicy` fungsi tersebut`S3Client`, berikan nama bucket di file [DeleteBucketPolicyRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_delete_bucket_policy_request.html).

 **Kode** 

```
bool AwsDoc::S3::deleteBucketPolicy(const Aws::String &bucketName,
                                    const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);

    Aws::S3::Model::DeleteBucketPolicyRequest request;
    request.SetBucket(bucketName);

    Aws::S3::Model::DeleteBucketPolicyOutcome outcome = client.DeleteBucketPolicy(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &err = outcome.GetError();
        std::cerr << "Error: deleteBucketPolicy: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "Policy was deleted from the bucket." << std::endl;
    }

    return outcome.IsSuccess();
}
```

Fungsi ini berhasil meskipun 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/tree/main/cpp/example_code/s3/delete_bucket_policy.cpp) di Github.

## Info Selengkapnya
<a name="more-info"></a>
+  [PutBucketPolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/PutBucketPolicy.html)di Referensi API Layanan Penyimpanan Sederhana Amazon
+  [GetBucketPolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/GetBucketPolicy.html)di Referensi API Layanan Penyimpanan Sederhana Amazon
+  [DeleteBucketPolicy](https://docs.aws.amazon.com/AmazonS3/latest/API/DeleteBucketPolicy.html)di Referensi API Layanan Penyimpanan Sederhana Amazon
+  [Ikhtisar Bahasa Kebijakan Akses](https://docs.aws.amazon.com/AmazonS3/latest/dev/access-policy-language-overview.html) di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon
+  [Contoh Kebijakan Bucket](https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html) di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon

# Mengonfigurasi Bucket Amazon S3 sebagai Situs Web
<a name="examples-s3-website-configuration"></a>

Anda dapat mengonfigurasi bucket Amazon S3 agar berperilaku sebagai situs web. Untuk melakukan ini, Anda perlu mengatur konfigurasi situs webnya.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensil](credentials.md).

## Mengatur Konfigurasi Situs Web Bucket
<a name="set-a-bucket-s-website-configuration"></a>

Untuk menyetel konfigurasi situs web bucket Amazon S3, panggil `PutBucketWebsite` fungsi dengan [PutBucketWebsiteRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_put_bucket_website_request.html)objek yang berisi nama bucket dan konfigurasi situs webnya, yang [WebsiteConfiguration](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_website_configuration.html)disediakan dalam objek. `S3Client`

*Diperlukan* pengaturan dokumen indeks; semua parameter lainnya bersifat opsional.

 **Kode** 

```
bool AwsDoc::S3::putWebsiteConfig(const Aws::String &bucketName,
                                  const Aws::String &indexPage, const Aws::String &errorPage,
                                  const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);

    Aws::S3::Model::IndexDocument indexDocument;
    indexDocument.SetSuffix(indexPage);

    Aws::S3::Model::ErrorDocument errorDocument;
    errorDocument.SetKey(errorPage);

    Aws::S3::Model::WebsiteConfiguration websiteConfiguration;
    websiteConfiguration.SetIndexDocument(indexDocument);
    websiteConfiguration.SetErrorDocument(errorDocument);

    Aws::S3::Model::PutBucketWebsiteRequest request;
    request.SetBucket(bucketName);
    request.SetWebsiteConfiguration(websiteConfiguration);

    Aws::S3::Model::PutBucketWebsiteOutcome outcome =
            client.PutBucketWebsite(request);

    if (!outcome.IsSuccess()) {
        std::cerr << "Error: PutBucketWebsite: "
                  << outcome.GetError().GetMessage() << std::endl;
    } else {
        std::cout << "Success: Set website configuration for bucket '"
                  << bucketName << "'." << std::endl;
    }

    return outcome.IsSuccess();
}
```

**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 Bucket Amazon S3 Menggunakan Kebijakan Bucket](examples-s3-bucket-policies.md).

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/put_website_config.cpp) di Github.

## Dapatkan Konfigurasi Situs Web Bucket
<a name="get-a-bucket-s-website-configuration"></a>

Untuk mendapatkan konfigurasi situs web bucket Amazon S3, panggil `GetBucketWebsite` fungsi dengan nama bucket [GetBucketWebsiteRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_get_bucket_website_request.html)yang berisi untuk mengambil konfigurasi. `S3Client`

Konfigurasi akan dikembalikan sebagai [GetBucketWebsiteResult](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_get_bucket_website_result.html)objek dalam objek hasil. Jika tidak ada konfigurasi situs web untuk bucket, maka `null` akan dikembalikan.

 **Kode** 

```
bool AwsDoc::S3::getWebsiteConfig(const Aws::String &bucketName,
                                  const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client s3Client(clientConfig);

    Aws::S3::Model::GetBucketWebsiteRequest request;
    request.SetBucket(bucketName);

    Aws::S3::Model::GetBucketWebsiteOutcome outcome =
            s3Client.GetBucketWebsite(request);

    if (!outcome.IsSuccess()) {
        const Aws::S3::S3Error &err = outcome.GetError();

        std::cerr << "Error: GetBucketWebsite: "
                  << err.GetMessage() << std::endl;
    } else {
        Aws::S3::Model::GetBucketWebsiteResult websiteResult = outcome.GetResult();

        std::cout << "Success: GetBucketWebsite: "
                  << std::endl << std::endl
                  << "For bucket '" << bucketName << "':"
                  << std::endl
                  << "Index page : "
                  << websiteResult.GetIndexDocument().GetSuffix()
                  << std::endl
                  << "Error page: "
                  << websiteResult.GetErrorDocument().GetKey()
                  << std::endl;
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/get_website_config.cpp) di Github.

## Menghapus Konfigurasi Situs Web Bucket
<a name="delete-a-bucket-s-website-configuration"></a>

Untuk menghapus konfigurasi situs web bucket Amazon S3, panggil `DeleteBucketWebsite` fungsi dengan [DeleteBucketWebsiteRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3/html/class_aws_1_1_s3_1_1_model_1_1_delete_bucket_website_request.html): yang berisi nama bucket untuk menghapus konfigurasi. `S3Client`

 **Kode** 

```
bool AwsDoc::S3::deleteBucketWebsite(const Aws::String &bucketName,
                                     const Aws::S3::S3ClientConfiguration &clientConfig) {
    Aws::S3::S3Client client(clientConfig);
    Aws::S3::Model::DeleteBucketWebsiteRequest request;
    request.SetBucket(bucketName);

    Aws::S3::Model::DeleteBucketWebsiteOutcome outcome =
            client.DeleteBucketWebsite(request);

    if (!outcome.IsSuccess()) {
        auto err = outcome.GetError();
        std::cerr << "Error: deleteBucketWebsite: " <<
                  err.GetExceptionName() << ": " << err.GetMessage() << std::endl;
    } else {
        std::cout << "Website configuration was removed." << std::endl;
    }

    return outcome.IsSuccess();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3/delete_website_config.cpp) 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 API Layanan Penyimpanan Sederhana Amazon
+  [DAPATKAN situs web Bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETwebsite.html) di Referensi API Layanan Penyimpanan Sederhana Amazon
+  [HAPUS situs web Bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETEwebsite.html) di Referensi API Layanan Penyimpanan Sederhana Amazon

# Menggunakan TransferManager untuk operasi Amazon S3
<a name="examples-s3-transfermanager"></a>

Anda dapat menggunakan AWS SDK untuk C\$1\$1 `TransferManager` kelas untuk mentransfer file dengan andal dari lingkungan lokal ke Amazon S3 dan menyalin objek dari satu lokasi Amazon S3 ke lokasi lain. `TransferManager`bisa mendapatkan kemajuan transfer dan jeda atau melanjutkan unggahan dan unduhan.

**catatan**  
Agar tidak dikenakan biaya untuk unggahan yang tidak lengkap atau sebagian, sebaiknya aktifkan aturan [AbortIncompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html)siklus hidup di bucket Amazon S3.  
Aturan ini mengarahkan Amazon S3 untuk membatalkan unggahan multibagian yang tidak selesai dalam jumlah hari tertentu setelah dimulai. Ketika batas waktu yang ditetapkan terlampaui, Amazon S3 membatalkan unggahan dan kemudian menghapus data unggahan yang tidak lengkap.   
Untuk informasi selengkapnya, lihat [Menyetel konfigurasi siklus hidup pada bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html) di Panduan Pengguna Amazon S3.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensil](credentials.md).

## Unggah dan unduh objek menggunakan `TransferManager`
<a name="stream"></a>

Contoh ini menunjukkan bagaimana [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/class_aws_1_1_transfer_1_1_transfer_manager.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/class_aws_1_1_transfer_1_1_transfer_manager.html)mentransfer objek besar dalam memori. `UploadFile`dan `DownloadFile` metode keduanya disebut secara asinkron dan mengembalikan a `TransferHandle` untuk mengelola status permintaan Anda. Jika objek yang diunggah lebih besar dari `bufferSize` maka unggahan multipart akan dilakukan. `bufferSize`Default ke 5MB, tetapi ini dapat dikonfigurasi melalui. [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/struct_aws_1_1_transfer_1_1_transfer_manager_configuration.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-transfer/html/struct_aws_1_1_transfer_1_1_transfer_manager_configuration.html) 

```
        auto s3_client = Aws::MakeShared<Aws::S3::S3Client>("S3Client");
        auto executor = Aws::MakeShared<Aws::Utils::Threading::PooledThreadExecutor>("executor", 25);
        Aws::Transfer::TransferManagerConfiguration transfer_config(executor.get());
        transfer_config.s3Client = s3_client;

        // Create buffer to hold data received by the data stream.
        Aws::Utils::Array<unsigned char> buffer(BUFFER_SIZE);

        // The local variable 'streamBuffer' is captured by reference in a lambda.
        // It must persist until all downloading by the 'transfer_manager' is complete.
        Stream::PreallocatedStreamBuf streamBuffer(buffer.GetUnderlyingData(), buffer.GetLength());

        auto transfer_manager = Aws::Transfer::TransferManager::Create(transfer_config);

        auto uploadHandle = transfer_manager->UploadFile(LOCAL_FILE, BUCKET, KEY, "text/plain", Aws::Map<Aws::String, Aws::String>());
        uploadHandle->WaitUntilFinished();
        bool success = uploadHandle->GetStatus() == Transfer::TransferStatus::COMPLETED; 
      
        if (!success)
        {
            auto err = uploadHandle->GetLastError();           
            std::cout << "File upload failed:  "<< err.GetMessage() << std::endl;
        }
        else
        {
            std::cout << "File upload finished." << std::endl;

            auto downloadHandle = transfer_manager->DownloadFile(BUCKET,
                KEY,
                [&]() { //Define a lambda expression for the callback method parameter to stream back the data.
                    return Aws::New<MyUnderlyingStream>("TestTag", &streamBuffer);
                });
            downloadHandle->WaitUntilFinished();// Block calling thread until download is complete.
            auto downStat = downloadHandle->GetStatus();
            if (downStat != Transfer::TransferStatus::COMPLETED)
            {
                auto err = downloadHandle->GetLastError();
                std::cout << "File download failed:  " << err.GetMessage() << std::endl;
            }
            std::cout << "File download to memory finished."  << std::endl;
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/transfer-manager/transferOnStream.cpp) di Github.

# Menggunakan `S3CrtClient` untuk operasi Amazon S3
<a name="examples-s3-crt"></a>

`S3CrtClient`Kelas ini tersedia dalam versi 1.9 AWS SDK untuk C\$1\$1 dan meningkatkan throughput mengunggah dan mengunduh file data besar ke dan dari Amazon S3. Untuk informasi selengkapnya tentang peningkatan rilis ini, lihat [Meningkatkan Throughput Amazon S3](https://github.com/aws/aws-sdk-cpp/wiki/Improving-S3-Throughput-with-AWS-SDK-for-CPP-v1.9) dengan v1.9 AWS SDK untuk C\$1\$1 

`S3CrtClient`Ini diimplementasikan di bagian atas pustaka [AWS Common Runtime (CRT)](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html).

**catatan**  
Agar tidak dikenakan biaya untuk unggahan yang tidak lengkap atau sebagian, sebaiknya aktifkan aturan [AbortIncompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html)siklus hidup di bucket Amazon S3.  
Aturan ini mengarahkan Amazon S3 untuk membatalkan unggahan multibagian yang tidak selesai dalam jumlah hari tertentu setelah dimulai. Ketika batas waktu yang ditetapkan terlampaui, Amazon S3 membatalkan unggahan dan kemudian menghapus data unggahan yang tidak lengkap.   
Untuk informasi selengkapnya, lihat [Menyetel konfigurasi siklus hidup pada bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html) di Panduan Pengguna Amazon S3.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensil](credentials.md).

## Unggah dan unduh objek menggunakan `S3CrtClient`
<a name="stream"></a>

Contoh ini menunjukkan bagaimana menggunakan. [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3-crt/html/class_aws_1_1_s3_crt_1_1_s3_crt_client.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3-crt/html/class_aws_1_1_s3_crt_1_1_s3_crt_client.html) Contoh membuat bucket, mengunggah objek, mengunduh objek, lalu menghapus file dan bucket. Operasi PUT berubah menjadi unggahan multibagian. Operasi GET berubah menjadi beberapa permintaan GET “berkisar”. Untuk informasi selengkapnya tentang unggahan multibagian, lihat [Mengunggah dan menyalin objek menggunakan unggahan multibagian di](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html) Panduan Pengguna Amazon S3. 

File data yang disediakan,`ny.json`, akan diunggah sebagai unggahan multibagian dalam contoh ini. Ini dapat dikonfirmasi dengan melihat log debug setelah program dijalankan dengan sukses.

Jika unggahan gagal, an `AbortMultipartUpload` dikeluarkan di pustaka CRT yang mendasarinya untuk membersihkan bagian yang sudah diunggah. Namun, tidak semua kegagalan dapat ditangani secara internal (seperti kabel jaringan yang dicabut). Disarankan untuk membuat aturan siklus hidup di bucket Amazon S3 Anda untuk memastikan data yang diunggah sebagian tidak berlama-lama di akun Anda (sebagian data yang diunggah masih dapat ditagih). Untuk mengetahui cara mengatur aturan siklus hidup, lihat [Menemukan dan Menghapus Unggahan Multibagian yang Tidak Lengkap untuk Menurunkan Biaya Amazon](https://aws.amazon.com/blogs/aws-cost-management/discovering-and-deleting-incomplete-multipart-uploads-to-lower-amazon-s3-costs/ ) S3. 

**Menggunakan log debug untuk menjelajahi detail unggahan multibagian**

1. Dalam`main()`, perhatikan bahwa ada "TODO" komentar dengan instruksi untuk memperbarui kode.

   1. Untuk`file_name`: Dari tautan yang disediakan dalam kode komentar unduh file data sampel`ny.json`, atau gunakan file data besar Anda sendiri.

   1. Untuk`region`: Perbarui `region` variabel, menggunakan enum, ke Wilayah AWS akun Anda. Untuk menemukan Wilayah akun Anda, masuk ke Konsol Manajemen AWS, dan temukan Wilayah di sudut kanan atas.

1. Bangun contoh.

1. Salin file yang ditentukan oleh variabel `file_name` ke folder executable Anda dan jalankan executable. `s3-crt-demo`

1. Di folder yang dapat dieksekusi, temukan file terbaru`.log`.

1. Buka file log, pilih **cari**, dan masukkan**partNumber**.

1. Log berisi entri yang mirip dengan berikut ini, di mana `partNumber` dan `uploadId` ditentukan untuk setiap bagian dari file yang diunggah:

    `PUT /my-object partNumber=1&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD`

    and 

    `PUT /my-object partNumber=2&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD `

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3-crt/s3-crt-demo.cpp) di Github.

# Contoh kode Amazon SQS menggunakan AWS SDK untuk C\$1\$1
<a name="examples-sqs"></a>

Amazon Simple Queue Service (Amazon SQS) adalah layanan antrian pesan yang dikelola sepenuhnya yang memudahkan untuk memisahkan dan menskalakan layanan mikro, sistem terdistribusi, dan aplikasi tanpa server. Anda dapat menggunakan contoh berikut untuk memprogram [Amazon SQS menggunakan file](https://aws.amazon.com/sqs). AWS SDK untuk C\$1\$1

**catatan**  
Hanya kode yang diperlukan untuk menunjukkan teknik tertentu yang disediakan dalam Panduan ini, tetapi [kode contoh lengkap tersedia di GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp). Pada GitHub Anda dapat mengunduh satu file sumber atau Anda dapat mengkloning repositori secara lokal untuk mendapatkan, membangun, dan menjalankan semua contoh.

**Topics**
+ [Bekerja dengan Antrian Pesan Amazon SQS](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)
+ [Menyetel 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 Antrian Pesan Amazon SQS
<a name="examples-sqs-message-queues"></a>

*Antrian pesan* adalah wadah logis yang Anda gunakan untuk mengirim pesan dengan andal di Amazon SQS. Ada dua jenis antrian: *standar* dan *first-in, first-out* (FIFO). Untuk mempelajari lebih lanjut tentang antrian dan perbedaan antara jenis ini, lihat Panduan Pengembang [Layanan Antrian Sederhana Amazon](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/).

Contoh C\$1\$1 ini menunjukkan cara menggunakan file AWS SDK untuk C\$1\$1 untuk membuat, membuat daftar, menghapus, dan mendapatkan URL antrian Amazon SQS.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

## Buat Antrian
<a name="sqs-create-queue"></a>

Gunakan fungsi `CreateQueue` anggota SQSClient kelas, dan berikan dengan [CreateQueueRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_create_queue_request.html)objek yang menggambarkan parameter antrian.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/CreateQueueRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::SQSClient sqsClient(clientConfiguration);

    Aws::SQS::Model::CreateQueueRequest request;
    request.SetQueueName(queueName);

    const Aws::SQS::Model::CreateQueueOutcome outcome = sqsClient.CreateQueue(request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully created queue " << queueName << " with a queue URL "
                  << outcome.GetResult().GetQueueUrl() << "." << std::endl;
    }
    else {
        std::cerr << "Error creating queue " << queueName << ": " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/create_queue.cpp).

## Daftar Antrian
<a name="sqs-list-queues"></a>

Untuk mencantumkan antrian Amazon SQS untuk akun Anda, panggil fungsi `ListQueues` anggota SQSClient kelas, dan berikan objek. [ListQueuesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_list_queues_request.html)

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/ListQueuesRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::SQSClient sqsClient(clientConfiguration);

    Aws::SQS::Model::ListQueuesRequest listQueuesRequest;

    Aws::String nextToken; // Used for pagination.
    Aws::Vector<Aws::String> allQueueUrls;

    do {
        if (!nextToken.empty()) {
            listQueuesRequest.SetNextToken(nextToken);
        }
        const Aws::SQS::Model::ListQueuesOutcome outcome = sqsClient.ListQueues(
                listQueuesRequest);
        if (outcome.IsSuccess()) {
            const Aws::Vector<Aws::String> &queueUrls = outcome.GetResult().GetQueueUrls();
            allQueueUrls.insert(allQueueUrls.end(),
                                queueUrls.begin(),
                                queueUrls.end());

            nextToken = outcome.GetResult().GetNextToken();
        }
        else {
            std::cerr << "Error listing queues: " <<
                      outcome.GetError().GetMessage() << std::endl;
            return false;
        }

    } while (!nextToken.empty());

    std::cout << allQueueUrls.size() << " Amazon SQS queue(s) found." << std::endl;
    for (const auto &iter: allQueueUrls) {
        std::cout << " " << iter << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/list_queues.cpp).

## Dapatkan URL Antrian
<a name="sqs-get-queue-url"></a>

Untuk mendapatkan URL antrian Amazon SQS yang ada, panggil fungsi anggota SQSClient kelas`GetQueueUrl`.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/GetQueueUrlRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::SQSClient sqsClient(clientConfiguration);

    Aws::SQS::Model::GetQueueUrlRequest request;
    request.SetQueueName(queueName);

    const Aws::SQS::Model::GetQueueUrlOutcome outcome = sqsClient.GetQueueUrl(request);
    if (outcome.IsSuccess()) {
        std::cout << "Queue " << queueName << " has url " <<
                  outcome.GetResult().GetQueueUrl() << std::endl;
    }
    else {
        std::cerr << "Error getting url for queue " << queueName << ": " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/get_queue_url.cpp).

## Hapus Antrian
<a name="sqs-delete-queue"></a>

Berikan [URL](#sqs-get-queue-url) ke fungsi `DeleteQueue` anggota SQSClient kelas.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/core/client/DefaultRetryStrategy.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/DeleteQueueRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::Model::DeleteQueueRequest request;
    request.SetQueueUrl(queueURL);

    const Aws::SQS::Model::DeleteQueueOutcome outcome = sqsClient.DeleteQueue(request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully deleted queue with url " << queueURL <<
                  std::endl;
    }
    else {
        std::cerr << "Error deleting queue " << queueURL << ": " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/delete_queue.cpp).

## Info Selengkapnya
<a name="more-info"></a>
+  [Cara Kerja Antrian Amazon SQS di Panduan Pengembang Layanan Antrian](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-how-it-works.html) Sederhana Amazon
+  [CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [GetQueueUrl](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [ListQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [DeleteQueues](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteQueues.html)di Referensi API Layanan Antrian Sederhana Amazon

# Mengirim, Menerima, dan Menghapus Pesan Amazon SQS
<a name="examples-sqs-messages"></a>

Pesan selalu dikirim menggunakan [antrean SQS](examples-sqs-message-queues.md). Contoh C\$1\$1 ini menunjukkan cara menggunakan pesan AWS SDK untuk C\$1\$1 untuk mengirim, menerima, dan menghapus pesan Amazon SQS dari antrian SQS.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

## Kirim Pesan
<a name="sqs-message-send"></a>

Anda dapat menambahkan satu pesan ke antrian Amazon SQS dengan memanggil fungsi anggota SQSClient kelas`SendMessage`. Anda menyediakan [SendMessageRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_send_message_request.html)objek yang `SendMessage` berisi [URL](examples-sqs-message-queues.md#sqs-get-queue-url) antrian, isi pesan, dan nilai penundaan opsional (dalam hitungan detik).

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/SendMessageRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::SQSClient sqsClient(clientConfiguration);

    Aws::SQS::Model::SendMessageRequest request;
    request.SetQueueUrl(queueUrl);
    request.SetMessageBody(messageBody);

    const Aws::SQS::Model::SendMessageOutcome outcome = sqsClient.SendMessage(request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully sent message to " << queueUrl <<
                  std::endl;
    }
    else {
        std::cerr << "Error sending message to " << queueUrl << ": " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/send_message.cpp).

## Menerima Pesan
<a name="sqs-messages-receive"></a>

Ambil pesan apa pun yang saat ini berada dalam antrian dengan memanggil fungsi `ReceiveMessage` anggota SQSClient kelas, meneruskannya URL antrian. Pesan dikembalikan sebagai daftar objek [Pesan](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_message.html).

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/ReceiveMessageRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::SQSClient sqsClient(clientConfiguration);

    Aws::SQS::Model::ReceiveMessageRequest request;
    request.SetQueueUrl(queueUrl);
    request.SetMaxNumberOfMessages(1);

    const Aws::SQS::Model::ReceiveMessageOutcome outcome = sqsClient.ReceiveMessage(
            request);
    if (outcome.IsSuccess()) {

        const Aws::Vector<Aws::SQS::Model::Message> &messages =
                outcome.GetResult().GetMessages();
        if (!messages.empty()) {
            const Aws::SQS::Model::Message &message = messages[0];
            std::cout << "Received message:" << std::endl;
            std::cout << "  MessageId: " << message.GetMessageId() << std::endl;
            std::cout << "  ReceiptHandle: " << message.GetReceiptHandle() << std::endl;
            std::cout << "  Body: " << message.GetBody() << std::endl << std::endl;
        }
        else {
            std::cout << "No messages received from queue " << queueUrl <<
                      std::endl;

        }
    }
    else {
        std::cerr << "Error receiving message from queue " << queueUrl << ": "
                  << outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/receive_message.cpp).

### Hapus Pesan setelah Diterima
<a name="sqs-messages-delete"></a>

Setelah menerima pesan dan memproses isinya, hapus pesan dari antrian dengan mengirimkan tanda terima pesan dan URL antrian ke fungsi `DeleteMessage` anggota SQSClient kelas.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/DeleteMessageRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::Model::DeleteMessageRequest request;
    request.SetQueueUrl(queueUrl);
    request.SetReceiptHandle(messageReceiptHandle);

    const Aws::SQS::Model::DeleteMessageOutcome outcome = sqsClient.DeleteMessage(
            request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully deleted message from queue " << queueUrl
                  << std::endl;
    }
    else {
        std::cerr << "Error deleting message from queue " << queueUrl << ": " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/receive_message.cpp).

## Info Selengkapnya
<a name="more-info"></a>
+  [Cara Kerja Antrian Amazon SQS di Panduan Pengembang Layanan Antrian](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-how-it-works.html) Sederhana Amazon
+  [SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [SendMessageBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)di Referensi API Layanan Antrian Sederhana Amazon

# Mengaktifkan Polling Panjang untuk Antrian Pesan Amazon SQS
<a name="examples-sqs-long-polling"></a>

Amazon SQS menggunakan *polling singkat* secara default, hanya menanyakan subset server—berdasarkan distribusi acak berbobot—untuk menentukan apakah ada pesan yang tersedia untuk dimasukkan dalam respons.

Polling panjang membantu mengurangi biaya penggunaan Amazon SQS dengan mengurangi jumlah respons kosong saat tidak ada pesan yang tersedia untuk dikembalikan sebagai balasan atas permintaan ReceiveMessage yang dikirim ke antrian Amazon SQS dan menghilangkan respons kosong palsu. Anda dapat mengatur frekuensi polling yang panjang dari *1-20 detik*.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

## Aktifkan Polling Panjang saat Membuat Antrian
<a name="sqs-long-polling-create-queue"></a>

Untuk mengaktifkan polling panjang saat membuat antrean Amazon SQS, setel atribut `ReceiveMessageWaitTimeSeconds` pada [CreateQueueRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_create_queue_request.html)objek sebelum memanggil SQSClient fungsi anggota kelas. `CreateQueue`

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/CreateQueueRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::SQSClient sqsClient(clientConfiguration);

    Aws::SQS::Model::CreateQueueRequest request;
    request.SetQueueName(queueName);
    request.AddAttributes(
            Aws::SQS::Model::QueueAttributeName::ReceiveMessageWaitTimeSeconds,
            pollTimeSeconds);

    const Aws::SQS::Model::CreateQueueOutcome outcome = sqsClient.CreateQueue(request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully created queue " << queueName <<
                  std::endl;
    }
    else {
        std::cout << "Error creating queue " << queueName << ": " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/long_polling_on_create_queue.cpp).

## Aktifkan 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 `ReceiveMessageWaitTimeSeconds` [SetQueueAttributesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_set_queue_attributes_request.html)sebelum memanggil fungsi anggota kelas. SQSClient `SetQueueAttributes`

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/SetQueueAttributesRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::SQSClient sqsClient(clientConfiguration);

    Aws::SQS::Model::SetQueueAttributesRequest request;
    request.SetQueueUrl(queueURL);
    request.AddAttributes(
            Aws::SQS::Model::QueueAttributeName::ReceiveMessageWaitTimeSeconds,
            pollTimeSeconds);

    const Aws::SQS::Model::SetQueueAttributesOutcome outcome = sqsClient.SetQueueAttributes(
            request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully updated long polling time for queue " <<
                  queueURL << " to " << pollTimeSeconds << std::endl;
    }
    else {
        std::cout << "Error updating long polling time for queue " <<
                  queueURL << ": " << outcome.GetError().GetMessage() <<
                  std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/long_polling_on_existing_queue.cpp).

## Aktifkan Polling Panjang pada Tanda Terima Pesan
<a name="sqs-long-polling-receive-message"></a>

Anda dapat mengaktifkan polling panjang saat menerima pesan dengan menyetel waktu tunggu dalam hitungan detik pada [ReceiveMessageRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_receive_message_request.html)yang Anda berikan ke fungsi SQSClient ReceiveMessage anggota kelas.

**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

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/ReceiveMessageRequest.h>
```

 **Kode** 

```
    Aws::SQS::SQSClient sqsClient(customConfiguration);

    Aws::SQS::Model::ReceiveMessageRequest request;
    request.SetQueueUrl(queueUrl);
    request.SetMaxNumberOfMessages(1);
    request.SetWaitTimeSeconds(waitTimeSeconds);

    auto outcome = sqsClient.ReceiveMessage(request);
    if (outcome.IsSuccess()) {
        const auto &messages = outcome.GetResult().GetMessages();
        if (messages.empty()) {
            std::cout << "No messages received from queue " << queueUrl <<
                      std::endl;
        }
        else {
            const auto &message = messages[0];
            std::cout << "Received message:" << std::endl;
            std::cout << "  MessageId: " << message.GetMessageId() << std::endl;
            std::cout << "  ReceiptHandle: " << message.GetReceiptHandle() << std::endl;
            std::cout << "  Body: " << message.GetBody() << std::endl << std::endl;
        }
    }
    else {
        std::cout << "Error receiving message from queue " << queueUrl << ": "
                  << outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/long_polling_on_message_receipt.cpp).

## Info Selengkapnya
<a name="more-info"></a>
+  [Polling Panjang Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html) dalam Panduan Pengembang Layanan Antrian Sederhana Amazon
+  [CreateQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)di Referensi API Layanan Antrian Sederhana Amazon

# Menyetel Batas Waktu Visibilitas di Amazon SQS
<a name="examples-sqs-visibility-timeout"></a>

Saat pesan diterima di Amazon SQS, pesan tetap berada di antrian hingga dihapus untuk memastikan tanda terima. 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.

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 dikirim lebih dari sekali.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensil](credentials.md).

## Mengatur Batas Waktu Visibilitas Pesan pada Tanda Terima Pesan
<a name="sqs-visibility-timeout-receipt"></a>

Ketika Anda telah menerima pesan, Anda dapat mengubah batas waktu visibilitasnya dengan meneruskan pegangan tanda terima di bagian [ChangeMessageVisibilityRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_change_message_visibility_request.html)yang Anda berikan ke fungsi SQSClient anggota kelas`ChangeMessageVisibility`.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/ChangeMessageVisibilityRequest.h>
#include <aws/sqs/model/ReceiveMessageRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::Model::ChangeMessageVisibilityRequest request;
    request.SetQueueUrl(queue_url);
    request.SetReceiptHandle(messageReceiptHandle);
    request.SetVisibilityTimeout(visibilityTimeoutSeconds);

    auto outcome = sqsClient.ChangeMessageVisibility(request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully changed visibility of message " <<
                  messageReceiptHandle << " from queue " << queue_url << std::endl;
    }
    else {
        std::cout << "Error changing visibility of message from queue "
                  << queue_url << ": " <<
                  outcome.GetError().GetMessage() << std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/change_message_visibility.cpp).

## Info Selengkapnya
<a name="more-info"></a>
+  Batas [Waktu Visibilitas](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html) dalam Panduan Pengembang Layanan Antrian Sederhana Amazon
+  [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [ChangeMessageVisibility](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html)di Referensi API Layanan Antrian Sederhana Amazon
+  [ChangeMessageVisibilityBatch](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibilityBatch.html)di Referensi API Layanan Antrian Sederhana Amazon

# Menggunakan Antrian Surat Mati di Amazon SQS
<a name="examples-sqs-dead-letter-queues"></a>

Amazon SQS menyediakan dukungan untuk antrian *surat mati*. Antrian surat mati adalah antrian yang dapat ditargetkan antrian 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.

Untuk membuat antrean huruf mati, Anda harus terlebih dahulu membuat *kebijakan redrive*, lalu menyetel kebijakan dalam atribut antrian.

**penting**  
Antrian huruf mati harus jenis antrian yang sama (FIFO atau standar) dengan antrian sumber. Itu juga harus dibuat menggunakan yang sama Akun AWS dan Wilayah AWS sebagai antrian sumber.

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

Sebelum Anda mulai, kami sarankan Anda membaca [Memulai menggunakan AWS SDK untuk C\$1\$1](getting-started.md). 

Unduh kode contoh dan buat solusinya seperti yang dijelaskan dalam[Memulai contoh kode](getting-started-code-examples.md). 

Untuk menjalankan contoh, profil pengguna yang digunakan kode Anda untuk membuat permintaan harus memiliki izin yang tepat AWS (untuk layanan dan tindakan). Untuk informasi selengkapnya, lihat [Menyediakan AWS kredensi](credentials.md).

## Buat Kebijakan Penggerak Ulang
<a name="sqs-dead-letter-queue-create-redrive-policy"></a>

Kebijakan redrive ditentukan dalam JSON. Untuk membuatnya, Anda dapat menggunakan kelas utilitas JSON yang disediakan dengan. AWS SDK untuk C\$1\$1

Berikut adalah contoh fungsi yang membuat kebijakan redrive dengan menyediakannya dengan ARN antrian surat mati Anda dan jumlah maksimum kali pesan dapat diterima dan tidak diproses sebelum dikirim ke antrian surat mati.

 **Termasuk** 

```
#include <aws/core/Aws.h>
#include <aws/core/utils/json/JsonSerializer.h>
```

 **Kode** 

```
Aws::String MakeRedrivePolicy(const Aws::String &queueArn, int maxReceiveCount) {
    Aws::Utils::Json::JsonValue redrive_arn_entry;
    redrive_arn_entry.AsString(queueArn);

    Aws::Utils::Json::JsonValue max_msg_entry;
    max_msg_entry.AsInteger(maxReceiveCount);

    Aws::Utils::Json::JsonValue policy_map;
    policy_map.WithObject("deadLetterTargetArn", redrive_arn_entry);
    policy_map.WithObject("maxReceiveCount", max_msg_entry);

    return policy_map.View().WriteReadable();
}
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/dead_letter_queue.cpp).

## Mengatur Kebijakan Remrive pada Antrian Sumber
<a name="sqs-dead-letter-queue-set-redrive-policy"></a>

Untuk menyelesaikan pengaturan antrian huruf mati Anda, panggil fungsi SQSClient `SetQueueAttributes` anggota kelas dengan [SetQueueAttributesRequest](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-sqs/html/class_aws_1_1_s_q_s_1_1_model_1_1_set_queue_attributes_request.html)objek yang telah Anda atur `RedrivePolicy` atributnya dengan kebijakan redrive JSON Anda.

 **Termasuk** 

```
#include <aws/sqs/SQSClient.h>
#include <aws/sqs/model/SetQueueAttributesRequest.h>
#include <iostream>
```

 **Kode** 

```
    Aws::SQS::Model::SetQueueAttributesRequest request;
    request.SetQueueUrl(srcQueueUrl);
    request.AddAttributes(
            Aws::SQS::Model::QueueAttributeName::RedrivePolicy,
            redrivePolicy);

    const Aws::SQS::Model::SetQueueAttributesOutcome outcome =
            sqsClient.SetQueueAttributes(request);
    if (outcome.IsSuccess()) {
        std::cout << "Successfully set dead letter queue for queue  " <<
                  srcQueueUrl << " to " << deadLetterQueueARN << std::endl;
    }
    else {
        std::cerr << "Error setting dead letter queue for queue " <<
                  srcQueueUrl << ": " << outcome.GetError().GetMessage() <<
                  std::endl;
    }
```

Lihat [contoh lengkapnya](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/sqs/dead_letter_queue.cpp).

## Info Selengkapnya
<a name="more-info"></a>
+  [Menggunakan Antrian Surat Mati Amazon SQS di Panduan Pengembang Layanan Antrian](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) Sederhana Amazon
+  [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)di Referensi API Layanan Antrian Sederhana Amazon