

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon SNS 메시지 전송 상태
<a name="sns-topic-attributes"></a>

Amazon SNS는 다음 Amazon SNS 엔드포인트가 있는 주제에 전송된 알림 메시지의 전송 상태를 로깅하기 위한 지원을 제공합니다.
+ Amazon Data Firehose
+ Amazon Simple Queue Service
+ AWS Lambda
+ HTTPS
+ 플랫폼 애플리케이션 엔드포인트

전송 상태 로그는 Amazon CloudWatch Logs로 전송되어 메시지 전송 작업에 대한 인사이트를 제공합니다. 이러한 로그는 다음을 수행하는 데 도움이 됩니다.
+ 메시지가 엔드포인트에 성공적으로 전달되었는지 확인합니다.
+ Amazon SNS 엔드포인트의 응답을 식별합니다.
+ 메시지 유지 시간(게시 타임스탬프와 엔드포인트로의 핸드오프 사이의 시간)을 측정합니다.

 AWS Management Console, AWS SDKs, 쿼리 API 또는를 사용하여 전송 상태 로깅을 구성할 수 있습니다 AWS CloudFormation.

# 전송 상태 로깅을 위한 전제 조건
<a name="topics-attrib-prereq"></a>

이 주제에서는 Amazon SNS가 CloudWatch에 전송 로그를 쓸 수 있도록 하는 데 필요한 IAM 권한을 간략하게 설명하고 기본 로그 그룹 명명 규칙에 대해 설명합니다. 이렇게 하면 CloudWatch 로그에서 메시지 전송 로그를 모니터링하고 분석할 수 있는 올바른 설정 및 액세스 권한을 확보할 수 있습니다.

**필수 IAM 권한**

전송 상태 로깅에 연결된 IAM 역할에는 Amazon SNS가 CloudWatch Logs에 쓸 수 있도록 하는 다음 권한이 포함되어야 합니다. 설정 중 새 역할을 만들거나 해당 권한이 있는 기존 역할을 사용할 수 있습니다.

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

****  

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

------

**로그 그룹 명명 규칙**

기본적으로 Amazon SNS는 다음 명명 규칙을 사용하여 전송 상태 로그에 대한 CloudWatch 로그 그룹을 생성합니다. 이 그룹 내의 로그 스트림은 엔드포인트 프로토콜(예: Lambda, Amazon SQS)에 해당합니다. CloudWatch Logs 콘솔에서 이러한 로그를 볼 수 있는 권한이 있는지 확인합니다.

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

# 를 사용하여 전송 상태 로깅 구성 AWS Management Console
<a name="topics-attrib"></a>

이 주제에서는 로깅 설정 구성, IAM 역할 할당, CloudWatch Logs가 모니터링 및 문제 해결을 위해 전송 로그를 캡처하는지 확인하는 등 Amazon SNS 주제에 대한 메시지 전송 상태 로깅을 활성화하는 방법을 설명합니다.

1. [Amazon SNS 콘솔](https://console.aws.amazon.com/sns/home)에 로그인합니다.

1. 탐색 창에서 **주제(Topics)**를 선택합니다.

1. 원하는 **주제**를 선택하고 **편집**을 선택합니다.

1. **전송 상태 로깅** 섹션을 확장합니다.

1. 로깅을 활성화할 **프로토콜**을 선택합니다(예: HTTP, Lambda, Amazon SQS).

1. **성공 샘플 비율**(CloudWatch Logs를 수신하려는 성공한 메시지의 비율)을 입력합니다.

1. **IAM 역할** 섹션에서 **성공** 및 **실패** 로깅 모두에 대한 역할을 구성해야 합니다.
   + **기존 서비스 역할 사용** - Amazon SNS가 CloudWatch에 로그를 작성하는 데 필요한 권한이 있는 기존 IAM 역할을 선택합니다.
   + **새 서비스 역할 생성** - **새 서비스 역할 생성**을 선택하여 IAM 콘솔에서 성공한 전송과 실패한 전송의 IAM 역할을 정의합니다. 권한 세부 정보는 [전송 상태 로깅을 위한 전제 조건](topics-attrib-prereq.md)섹션을 참조하세요.

1. **변경 사항 저장**을 선택합니다.

   로깅 활성화 후에는 메시지 전송 상태가 포함된 CloudWatch Logs를 보고 구문 분석할 수 있습니다. CloudWatch 사용에 대한 자세한 정보는 [CloudWatch 설명서](https://aws.amazon.com/documentation/cloudwatch)를 참조하세요.

**로그 설정 확인**

1. CloudWatch Logs 콘솔에 로그인합니다.

1. `sns/<region>/<account-id>/<topic-name>`이라는 로그 그룹을 찾습니다.

1. 구성된 엔드포인트 프로토콜에 대한 로그 스트림이 존재하는지 확인합니다.

1. 주제에 테스트 메시지를 보내고 로그 항목이 나타나 전송 성공 또는 실패를 나타내는지 확인합니다.

# AWS SDKs를 사용하여 전송 상태 로깅 구성
<a name="msg-status-sdk"></a>

 AWS SDKs는 메시지 전송 상태 로깅을 위한 주제 속성을 설정하기 위해 여러 언어로 APIs를 제공합니다. 예를 들어 [SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html) API를 사용하여 다음을 구성합니다.
+ `LambdaSuccessFeedbackRoleArn` - Lambda 엔드포인트로 메시지를 성공적으로 전송하기 위한 IAM 역할입니다.
+ `LambdaSuccessFeedbackSampleRate` - Lambda 엔드포인트에 대한 성공적인 메시지의 샘플링 비율입니다.
+ `LambdaFailureFeedbackRoleArn` - Lambda 엔드포인트로 실패한 메시지 전송을 위한 IAM 역할입니다.

**예제 AWS CLI 명령**

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

## 주제 속성
<a name="topic-attributes"></a>

메시지 전송 상태를 위해 다음 주제 속성 이름 값을 사용합니다.

**HTTP**
+ `HTTPSuccessFeedbackRoleArn` - HTTP 엔드포인트를 구독하는 Amazon SNS 주제에 대해 성공한 메시지 전송 상태입니다.
+ `HTTPSuccessFeedbackSampleRate` - HTTP 엔드포인트를 구독하는 Amazon SNS 주제에 대해 샘플링할 성공한 메시지의 비율입니다.
+ `HTTPFailureFeedbackRoleArn` - HTTP 엔드포인트를 구독하는 Amazon SNS 주제에 대해 실패한 메시지 전송 상태입니다.

**Amazon Data Firehose**
+ `FirehoseSuccessFeedbackRoleArn` - Amazon Data Firehose 엔드포인트를 구독하는 Amazon SNS 주제에 대해 성공한 메시지 전송 상태입니다.
+ `FirehoseSuccessFeedbackSampleRate` - Amazon Data Firehose 엔드포인트를 구독하는 Amazon SNS 주제에 대해 샘플링할 성공한 메시지의 비율입니다.
+ `FirehoseFailureFeedbackRoleArn` - Amazon Data Firehose 엔드포인트를 구독하는 Amazon SNS 주제에 대해 실패한 메시지 전송 상태입니다.

**AWS Lambda**
+ `LambdaSuccessFeedbackRoleArn` - Lambda 엔드포인트를 구독하는 Amazon SNS 주제에 대해 성공한 메시지 전송 상태입니다.
+ `LambdaSuccessFeedbackSampleRate` - Lambda 엔드포인트를 구독하는 Amazon SNS 주제에 대해 샘플링할 성공한 메시지의 비율입니다.
+ `LambdaFailureFeedbackRoleArn` - Lambda 엔드포인트를 구독하는 Amazon SNS 주제에 대해 실패한 메시지 전송 상태입니다.

**플랫폼 애플리케이션 엔드포인트**
+ `ApplicationSuccessFeedbackRoleArn` - AWS 애플리케이션 엔드포인트를 구독하는 Amazon SNS 주제에 대한 성공적인 메시지 전송 상태입니다.
+ `ApplicationSuccessFeedbackSampleRate` - AWS 애플리케이션 엔드포인트를 구독하는 Amazon SNS 주제에 대해 샘플링할 성공한 메시지의 비율입니다.
+ `ApplicationFailureFeedbackRoleArn` - AWS 애플리케이션 엔드포인트를 구독하는 Amazon SNS 주제에 대한 메시지 전송 실패 상태입니다.
**참고**  
또한 전송 상태를 푸시 알림 서비스에 직접 로깅하도록 애플리케이션 속성을 구성할 수 있습니다. 자세한 정보는 [메시지 전송 상태를 위한 Amazon SNS 애플리케이션 속성 사용](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html)을 참조하세요.

** Amazon SQS**
+ `SQSSuccessFeedbackRoleArn` – Amazon SQS 엔드포인트를 구독하는 Amazon SNS 주제에 대해 성공한 메시지 전송 상태입니다.
+ `SQSSuccessFeedbackSampleRate` – Amazon SQS 엔드포인트를 구독하는 Amazon SNS 주제에 대해 샘플링할 성공한 메시지의 비율입니다.
+ `SQSFailureFeedbackRoleArn` – Amazon SQS 엔드포인트를 구독하는 Amazon SNS 주제에 대해 실패한 메시지 전송 상태입니다.

플랫폼 애플리케이션 엔드포인트에 대한 로그는 다른 엔드포인트와 동일한 CloudWatch Logs 그룹에 기록됩니다.

**참고**  
 `<ENDPOINT>SuccessFeedbackRoleArn` 및 `<ENDPOINT>FailureFeedbackRoleArn` 속성은 사용자 대신 CloudWatch Logs를 사용할 수 있는 쓰기 액세스 권한을 Amazon SNS에 부여하는 데 사용됩니다. `<ENDPOINT>SuccessFeedbackSampleRate` 속성은 성공적으로 전송된 메시지의 샘플 비율(0-100)을 지정할 때 사용됩니다. `<ENDPOINT>FailureFeedbackRoleArn` 속성을 구성하고 나면, 메시지의 전송 실패가 CloudWatch Logs를 생성합니다.

# AWS 주제 속성을 구성하는 SDK 예제
<a name="topic-attributes-sdks"></a>

다음 코드 예시는 `SetTopicAttributes`의 사용 방법을 보여 줍니다.

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

**AWS CLI**  
**주제에 대한 속성을 설정하려면**  
다음 `set-topic-attributes`예제에서는 지정된 주제에 `DisplayName`속성을 설정합니다.  

```
aws sns set-topic-attributes \
    --topic-arn arn:aws:sns:us-west-2:123456789012:MyTopic \
    --attribute-name DisplayName \
    --attribute-value MyTopicDisplayName
```
이 명령은 출력을 생성하지 않습니다.  
+  API 세부 정보는 *AWS CLI 명령 참조*의 [SetTopicAttributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/set-topic-attributes.html)를 참조하세요.

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

**SDK for Java 2.x**  
 GitHub에 더 많은 내용이 있습니다. [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);
        }
    }
}
```
+  API 세부 정보는 *AWS SDK for Java 2.x API 참조*의 [SetTopicAttributes](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/SetTopicAttributes)를 참조하세요.

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

**SDK for JavaScript (v3)**  
 GitHub에 더 많은 내용이 있습니다. [AWS 코드 예 리포지토리](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples)에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요.
별도의 모듈에서 클라이언트를 생성하고 내보냅니다.  

```
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({});
```
SDK 및 클라이언트 모듈을 가져오고 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;
};
```
+  자세한 정보는 [AWS SDK for JavaScript 개발자 안내서](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-managing-topicsstttopicattributes)를 참조하세요.
+  API 세부 정보는 *AWS SDK for JavaScript API 참조*의 [SetTopicAttributes](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SetTopicAttributesCommand)를 참조하세요.

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

**SDK for Kotlin**  
 GitHub에 더 많은 내용이 있습니다. [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.")
    }
}
```
+  API 세부 정보는 *AWS SDK for Kotlin API 참조*의 [SetTopicAttributes](https://sdk.amazonaws.com/kotlin/api/latest/index.html)를 참조하세요.

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

**SDK for PHP**  
 GitHub에 더 많은 내용이 있습니다. [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());
}
```
+  API 세부 정보는 *AWS SDK for PHP API 참조*의 [SetTopicAttributes](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/SetTopicAttributes)를 참조하세요.

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

**SDK for Ruby**  
 GitHub에 더 많은 내용이 있습니다. [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
```
+  자세한 정보는 [AWS SDK for Ruby 개발자 안내서](https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/sns-example-enable-resource.html)를 참조하세요.
+  API 세부 정보는 *AWS SDK for Ruby API 참조*의 [SetTopicAttributes](https://docs.aws.amazon.com/goto/SdkForRubyV3/sns-2010-03-31/SetTopicAttributes)를 참조하세요.

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

**SDK for SAP ABAP API**  
 GitHub에 더 많은 내용이 있습니다. [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.
```
+  API에 대한 세부 정보는 [SAP ABAP용AWS SDK API 참조](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)의 *SetTopicAttributes*를 참조하세요.

------

# 를 사용하여 전송 상태 로깅 구성 CloudFormation
<a name="msg-status-cloudformation"></a>

를 `DeliveryStatusLogging` 사용하여를 구성하려면 JSON 또는 YAML 템플릿을 CloudFormation사용하여 CloudFormation 스택을 생성합니다. 자세한 내용은 CloudFormation 사용 설명서의 `AWS::SNS::Topic` 리소스 `DeliveryStatusLogging` 속성을 참조하세요. 다음은 Amazon SQS 프로토콜의 모든 `DeliveryStatusLogging` 속성으로 새 주제를 생성하거나 기존 주제를 업데이트하기 위한 JSON 및 YAML CloudFormation 템플릿의 예입니다.

`SuccessFeedbackRoleArn` 및 `FailureFeedbackRoleArn`에서 참조되는 IAM 역할에 필요한 CloudWatch Logs 권한이 있는지 확인합니다.

------
#### [ 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
```

------