

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

# Status pengiriman pesan Amazon SNS
<a name="sns-topic-attributes"></a>

Amazon SNS menyediakan dukungan untuk mencatat status pengiriman pesan notifikasi yang dikirim ke topik dengan titik akhir Amazon SNS berikut: 
+ Amazon Data Firehose
+ Amazon Simple Queue Service
+ AWS Lambda
+ HTTPS
+ Endpoint aplikasi platform

Log status pengiriman dikirim ke Amazon CloudWatch Logs, memberikan wawasan tentang operasi pengiriman pesan. Log ini membantu Anda:
+ Tentukan apakah pesan berhasil dikirim ke titik akhir.
+ Identifikasi respons dari titik akhir ke Amazon SNS.
+ Ukur waktu tinggal pesan (waktu antara stempel waktu publikasi dan serah terima ke titik akhir).

Anda dapat mengonfigurasi pencatatan status pengiriman menggunakan Konsol Manajemen AWS, AWS SDKs, Query API, atau AWS CloudFormation.

# Prasyarat untuk pencatatan status pengiriman
<a name="topics-attrib-prereq"></a>

Topik ini menguraikan izin IAM yang diperlukan untuk mengaktifkan Amazon SNS menulis log pengiriman dan menjelaskan konvensi penamaan CloudWatch grup log default. Ini memastikan Anda memiliki pengaturan dan akses yang benar untuk memantau dan menganalisis log pengiriman pesan di CloudWatch log.

**Izin IAM yang diperlukan**

Peran IAM yang dilampirkan untuk pencatatan status pengiriman harus menyertakan izin berikut untuk mengaktifkan Amazon SNS menulis ke Log. CloudWatch Anda dapat menggunakan peran yang ada dengan izin ini atau membuat peran baru selama penyiapan.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}
```

------

**Konvensi penamaan grup log**

Secara default, Amazon SNS membuat grup CloudWatch log untuk log status pengiriman menggunakan konvensi penamaan berikut. Aliran log dalam grup ini sesuai dengan protokol titik akhir (misalnya, Lambda, Amazon SQS). Pastikan Anda memiliki izin untuk melihat log ini di konsol CloudWatch Log.

```
sns/<region>/<account-id>/<topic-name>
```

# Mengkonfigurasi pencatatan status pengiriman menggunakan Konsol Manajemen AWS
<a name="topics-attrib"></a>

Topik ini menjelaskan cara mengaktifkan pencatatan status pengiriman pesan untuk topik Amazon SNS, termasuk mengonfigurasi setelan logging, menetapkan peran IAM, dan memverifikasi bahwa CloudWatch Log menangkap log pengiriman untuk pemantauan dan pemecahan masalah.

1. Masuk ke [Konsol Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Di panel navigasi, pilih **Topik**.

1. Pilih **topik** yang diinginkan dan kemudian pilih **Edit**.

1. Perluas bagian **Pencatatan status pengiriman**.

1. Pilih **protokol** yang ingin Anda aktifkan logging (misalnya, HTTP, Lambda, Amazon SQS).

1. Masukkan **sample rate Sukses**, yang merupakan persentase pesan sukses yang ingin Anda terima CloudWatch Log.

1. Di bagian **peran IAM**, Anda harus mengonfigurasi peran untuk pencatatan **keberhasilan** dan **kegagalan**:
   + **Gunakan peran layanan yang ada — Pilih peran** IAM yang ada yang memiliki izin yang diperlukan untuk Amazon SNS untuk menulis log. CloudWatch
   + **Buat peran layanan baru** — Pilih **Buat peran baru** untuk menentukan peran IAM agar pengiriman berhasil dan gagal di konsol IAM. Untuk detail izin, lihat[Prasyarat untuk pencatatan status pengiriman](topics-attrib-prereq.md).

1. Pilih **Simpan perubahan**.

   Setelah mengaktifkan logging, Anda dapat melihat dan mengurai CloudWatch Log yang berisi status pengiriman pesan. Untuk informasi selengkapnya tentang penggunaan CloudWatch, lihat [CloudWatchdokumentasi](https://aws.amazon.com/documentation/cloudwatch).

**Memverifikasi pengaturan log**

1. Masuk ke konsol CloudWatch Log.

1. Temukan grup log bernama`sns/<region>/<account-id>/<topic-name>`.

1. Pastikan aliran log ada untuk protokol titik akhir yang dikonfigurasi.

1. Kirim pesan pengujian ke topik Anda dan konfirmasikan bahwa entri log muncul, yang menunjukkan pengiriman berhasil atau gagal.

# Mengkonfigurasi pencatatan status pengiriman menggunakan AWS SDKs
<a name="msg-status-sdk"></a>

 AWS SDKs Menyediakan APIs dalam beberapa bahasa untuk mengatur atribut topik untuk pencatatan status pengiriman pesan. Misalnya, gunakan [SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)API untuk mengonfigurasi:
+ `LambdaSuccessFeedbackRoleArn`— Peran IAM untuk pengiriman pesan yang berhasil ke titik akhir Lambda.
+ `LambdaSuccessFeedbackSampleRate`— Tingkat pengambilan sampel untuk pesan yang berhasil ke titik akhir Lambda.
+ `LambdaFailureFeedbackRoleArn`— Peran IAM untuk pengiriman pesan yang gagal ke titik akhir Lambda.

**Contoh AWS CLI perintah**

```
aws sns set-topic-attributes \
    --topic-arn arn:aws:sns:us-west-2:123456789012:MyTopic \
    --attribute-name LambdaSuccessFeedbackRoleArn \
    --attribute-value arn:aws:iam::123456789012:role/MyFeedbackRole
```

## Atribut topik
<a name="topic-attributes"></a>

Gunakan nilai nama atribut topik berikut untuk status pengiriman pesan:

**HTTP**
+ `HTTPSuccessFeedbackRoleArn`— Status pengiriman pesan yang berhasil untuk topik Amazon SNS yang berlangganan titik akhir HTTP. 
+ `HTTPSuccessFeedbackSampleRate`— Persentase pesan yang berhasil untuk sampel untuk topik Amazon SNS yang berlangganan titik akhir HTTP.
+ `HTTPFailureFeedbackRoleArn`— Status pengiriman pesan gagal untuk topik Amazon SNS yang berlangganan titik akhir HTTP.

**Amazon Data Firehose**
+ `FirehoseSuccessFeedbackRoleArn`— Status pengiriman pesan yang berhasil untuk topik Amazon SNS yang berlangganan titik akhir Amazon Data Firehose.
+ `FirehoseSuccessFeedbackSampleRate`— Persentase pesan yang berhasil untuk sampel untuk topik Amazon SNS yang berlangganan titik akhir Amazon Data Firehose.
+ `FirehoseFailureFeedbackRoleArn`— Status pengiriman pesan gagal untuk topik Amazon SNS yang berlangganan titik akhir Amazon Data Firehose. 

**AWS Lambda**
+ `LambdaSuccessFeedbackRoleArn`— Status pengiriman pesan yang berhasil untuk topik Amazon SNS yang berlangganan titik akhir Lambda.
+ `LambdaSuccessFeedbackSampleRate`— Persentase pesan yang berhasil untuk sampel untuk topik Amazon SNS yang berlangganan titik akhir Lambda.
+ `LambdaFailureFeedbackRoleArn`— Status pengiriman pesan gagal untuk topik Amazon SNS yang berlangganan titik akhir Lambda. 

**Titik akhir aplikasi platform**
+ `ApplicationSuccessFeedbackRoleArn`— Status pengiriman pesan yang berhasil untuk topik Amazon SNS yang berlangganan titik akhir aplikasi AWS .
+ `ApplicationSuccessFeedbackSampleRate`— Persentase pesan yang berhasil untuk sampel untuk topik Amazon SNS yang berlangganan titik akhir aplikasi AWS .
+ `ApplicationFailureFeedbackRoleArn`— Status pengiriman pesan gagal untuk topik Amazon SNS yang berlangganan titik akhir aplikasi AWS .
**catatan**  
Selain itu, Anda dapat mengonfigurasi atribut aplikasi untuk mencatat status pengiriman langsung ke layanan pemberitahuan push. Untuk informasi selengkapnya, lihat [Menggunakan Atribut Aplikasi Amazon SNS untuk Status Pengiriman Pesan](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html). 

**Amazon SQS**
+ `SQSSuccessFeedbackRoleArn`— Status pengiriman pesan yang berhasil untuk topik Amazon SNS yang berlangganan titik akhir Amazon SQS. 
+ `SQSSuccessFeedbackSampleRate`— Persentase pesan yang berhasil untuk sampel untuk topik Amazon SNS yang berlangganan titik akhir Amazon SQS. 
+ `SQSFailureFeedbackRoleArn`— Status pengiriman pesan gagal untuk topik Amazon SNS yang berlangganan titik akhir Amazon SQS. 

Log untuk titik akhir aplikasi platform ditulis ke grup CloudWatch Log yang sama dengan titik akhir lainnya.

**catatan**  
 `<ENDPOINT>FailureFeedbackRoleArn`Atribut `<ENDPOINT>SuccessFeedbackRoleArn` dan digunakan untuk memberikan akses tulis Amazon SNS untuk menggunakan CloudWatch Log atas nama Anda. Atribut `<ENDPOINT>SuccessFeedbackSampleRate` adalah untuk menentukan persentase tingkat sampel (0-100) dari pesan yang berhasil terkirim. Setelah Anda mengonfigurasi `<ENDPOINT>FailureFeedbackRoleArn` atribut, maka semua pengiriman pesan yang gagal menghasilkan CloudWatch Log. 

# AWS Contoh SDK untuk mengonfigurasi atribut topik
<a name="topic-attributes-sdks"></a>

Contoh kode berikut menunjukkan cara menggunakan`SetTopicAttributes`.

------
#### [ CLI ]

**AWS CLI**  
**Untuk menetapkan atribut untuk topik**  
`set-topic-attributes`Contoh berikut menetapkan `DisplayName` atribut untuk topik yang ditentukan.  

```
aws sns set-topic-attributes \
    --topic-arn arn:aws:sns:us-west-2:123456789012:MyTopic \
    --attribute-name DisplayName \
    --attribute-value MyTopicDisplayName
```
Perintah ini tidak menghasilkan output.  
+  Untuk detail API, lihat [SetTopicAttributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/set-topic-attributes.html)di *Referensi AWS CLI Perintah*. 

------
#### [ Java ]

**SDK untuk Java 2.x**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetTopicAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetTopicAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SetTopicAttributes {

    public static void main(String[] args) {
        final String usage = """

                Usage:    <attribute> <topicArn> <value>

                Where:
                   attribute - The attribute action to use. Valid parameters are: Policy | DisplayName | DeliveryPolicy .
                   topicArn - The ARN of the topic.\s
                   value - The value for the attribute.
                """;

        if (args.length < 3) {
            System.out.println(usage);
            System.exit(1);
        }

        String attribute = args[0];
        String topicArn = args[1];
        String value = args[2];

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        setTopAttr(snsClient, attribute, topicArn, value);
        snsClient.close();
    }

    public static void setTopAttr(SnsClient snsClient, String attribute, String topicArn, String value) {
        try {
            SetTopicAttributesRequest request = SetTopicAttributesRequest.builder()
                    .attributeName(attribute)
                    .attributeValue(value)
                    .topicArn(topicArn)
                    .build();

            SetTopicAttributesResponse result = snsClient.setTopicAttributes(request);
            System.out.println(
                    "\n\nStatus was " + result.sdkHttpResponse().statusCode() + "\n\nTopic " + request.topicArn()
                            + " updated " + request.attributeName() + " to " + request.attributeValue());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Untuk detail API, lihat [SetTopicAttributes](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/SetTopicAttributes)di *Referensi AWS SDK for Java 2.x API*. 

------
#### [ JavaScript ]

**SDK untuk JavaScript (v3)**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Buat klien dalam modul terpisah dan ekspor klien tersebut.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Mengimpor modul SDK dan klien dan memanggil API.  

```
import { SetTopicAttributesCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

export const setTopicAttributes = async (
  topicArn = "TOPIC_ARN",
  attributeName = "DisplayName",
  attributeValue = "Test Topic",
) => {
  const response = await snsClient.send(
    new SetTopicAttributesCommand({
      AttributeName: attributeName,
      AttributeValue: attributeValue,
      TopicArn: topicArn,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'd1b08d0e-e9a4-54c3-b8b1-d03238d2b935',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-managing-topicsstttopicattributes). 
+  Untuk detail API, lihat [SetTopicAttributes](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SetTopicAttributesCommand)di *Referensi AWS SDK untuk JavaScript API*. 

------
#### [ Kotlin ]

**SDK untuk Kotlin**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 

```
suspend fun setTopAttr(
    attribute: String?,
    topicArnVal: String?,
    value: String?,
) {
    val request =
        SetTopicAttributesRequest {
            attributeName = attribute
            attributeValue = value
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.setTopicAttributes(request)
        println("Topic ${request.topicArn} was updated.")
    }
}
```
+  Untuk detail API, lihat [SetTopicAttributes](https://sdk.amazonaws.com/kotlin/api/latest/index.html)di *AWS SDK untuk referensi API Kotlin*. 

------
#### [ PHP ]

**SDK untuk PHP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Configure the message delivery status attributes for an Amazon SNS Topic.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);
$attribute = 'Policy | DisplayName | DeliveryPolicy';
$value = 'First Topic';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->setTopicAttributes([
        'AttributeName' => $attribute,
        'AttributeValue' => $value,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Untuk detail API, lihat [SetTopicAttributes](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/SetTopicAttributes)di *Referensi AWS SDK untuk PHP API*. 

------
#### [ Ruby ]

**SDK untuk Ruby**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby/example_code/sns#code-examples). 

```
# Service class to enable an SNS resource with a specified policy
class SnsResourceEnabler
  # Initializes the SnsResourceEnabler with an SNS resource client
  #
  # @param sns_resource [Aws::SNS::Resource] The SNS resource client
  def initialize(sns_resource)
    @sns_resource = sns_resource
    @logger = Logger.new($stdout)
  end

  # Sets a policy on a specified SNS topic
  #
  # @param topic_arn [String] The ARN of the SNS topic
  # @param resource_arn [String] The ARN of the resource to include in the policy
  # @param policy_name [String] The name of the policy attribute to set
  def enable_resource(topic_arn, resource_arn, policy_name)
    policy = generate_policy(topic_arn, resource_arn)
    topic = @sns_resource.topic(topic_arn)

    topic.set_attributes({
                           attribute_name: policy_name,
                           attribute_value: policy
                         })
    @logger.info("Policy #{policy_name} set successfully for topic #{topic_arn}.")
  rescue Aws::SNS::Errors::ServiceError => e
    @logger.error("Failed to set policy: #{e.message}")
  end

  private

  # Generates a policy string with dynamic resource ARNs
  #
  # @param topic_arn [String] The ARN of the SNS topic
  # @param resource_arn [String] The ARN of the resource
  # @return [String] The policy as a JSON string
  def generate_policy(topic_arn, resource_arn)
    {
      Version: '2008-10-17',
      Id: '__default_policy_ID',
      Statement: [{
        Sid: '__default_statement_ID',
        Effect: 'Allow',
        Principal: { "AWS": '*' },
        Action: ['SNS:Publish'],
        Resource: topic_arn,
        Condition: {
          ArnEquals: {
            "AWS:SourceArn": resource_arn
          }
        }
      }]
    }.to_json
  end
end

# Example usage:
if $PROGRAM_NAME == __FILE__
  topic_arn = 'MY_TOPIC_ARN' # Should be replaced with a real topic ARN
  resource_arn = 'MY_RESOURCE_ARN' # Should be replaced with a real resource ARN
  policy_name = 'POLICY_NAME' # Typically, this is "Policy"

  sns_resource = Aws::SNS::Resource.new
  enabler = SnsResourceEnabler.new(sns_resource)

  enabler.enable_resource(topic_arn, resource_arn, policy_name)
end
```
+  Untuk informasi selengkapnya, silakan lihat [Panduan Developer AWS SDK untuk Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/sns-example-enable-resource.html). 
+  Untuk detail API, lihat [SetTopicAttributes](https://docs.aws.amazon.com/goto/SdkForRubyV3/sns-2010-03-31/SetTopicAttributes)di *Referensi AWS SDK untuk Ruby API*. 

------
#### [ SAP ABAP ]

**SDK for SAP ABAP**  
 Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara mengatur dan menjalankannya di [Repositori Contoh Kode AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 

```
    TRY.
        lo_sns->settopicattributes(
            iv_topicarn = iv_topic_arn
            iv_attributename  = iv_attribute_name
            iv_attributevalue = iv_attribute_value ).
        MESSAGE 'Set/updated SNS topic attributes.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
    ENDTRY.
```
+  Untuk detail API, lihat [SetTopicAttributes](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)di *AWS SDK untuk referensi SAP ABAP* API. 

------

# Mengkonfigurasi pencatatan status pengiriman menggunakan CloudFormation
<a name="msg-status-cloudformation"></a>

Untuk mengonfigurasi `DeliveryStatusLogging` penggunaan CloudFormation, gunakan template JSON atau YAMAL untuk membuat tumpukan. CloudFormation Untuk informasi selengkapnya, lihat `DeliveryStatusLogging` properti `AWS::SNS::Topic` sumber daya di Panduan CloudFormation Pengguna. Di bawah ini adalah contoh CloudFormation template di JSON dan YAMAL untuk membuat topik baru atau memperbarui topik yang ada dengan semua `DeliveryStatusLogging` atribut untuk protokol Amazon SQS.

Pastikan peran IAM direferensikan `SuccessFeedbackRoleArn` dan `FailureFeedbackRoleArn` memiliki izin CloudWatch Log yang diperlukan.

------
#### [ JSON ]

```
"Resources": {
    "MySNSTopic" : {
        "Type" : "AWS::SNS::Topic",
        "Properties" : {
            "TopicName" : "TestTopic",
            "DisplayName" : "TEST",
            "SignatureVersion" : "2",
            "DeliveryStatusLogging" : [{
                "Protocol": "sqs",
                "SuccessFeedbackSampleRate": "45",
                "SuccessFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSSuccessFeedback_test1",
                "FailureFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSFailureFeedback_test2"
            }]
        }
    }
}
```

------
#### [ YAML ]

```
Resources:
  MySNSTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName:TestTopic
      DisplayName:TEST
      SignatureVersion:2
      DeliveryStatusLogging:
       - Protocol: sqs
         SuccessFeedbackSampleRate: 45
         SuccessFeedbackRoleArn: arn:aws:iam::123456789012:role/SNSSuccessFeedback_test1
         FailureFeedbackRoleArn: arn:aws:iam::123456789012:role/SNSFailureFeedback_test2
```

------