Amazon SNS 메시지 전송 상태 - Amazon Simple Notification Service

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

Amazon SNS 메시지 전송 상태

Amazon SNS는 다음 Amazon SNS 엔드포인트가 있는 주제에 전송된 알림 메시지의 전송 상태를 로깅하기 위한 지원을 제공합니다.

  • HTTP

  • 아마존 데이터 파이어호스

  • AWS Lambda

  • 플랫폼 애플리케이션 엔드포인트

  • Amazon Simple Queue Service

메시지 전송 상태 속성을 구성하면 주제 구독자에게 전송되는 메시지의 CloudWatch 로그 항목이 로그로 전송됩니다. 메시지 전송 상태를 로깅하면 다음과 같이 더욱 확장된 운영 이해를 제공할 수 있습니다.

  • 메시지가 Amazon SNS 엔드포인트에 전송되었는지 확인

  • Amazon SNS 엔드포인트에서 Amazon SNS로 전송된 응답 식별

  • 메시지 유지 시간(게시 타임스탬프 시간부터 Amazon SNS 엔드포인트에 넘겨주기 직전까지의 시간) 결정

메시지 전송 상태에 맞게 주제 속성을 구성하려면 AWS Management Console, AWS 소프트웨어 개발 키트(SDK), 쿼리 API 또는 AWS CloudFormation을 사용할 수 있습니다.

AWS Management Console을 사용하여 전송 상태 로깅 구성

  1. Amazon SNS 콘솔에 로그인합니다.

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

  3. 주제 페이지에서 주제를 선택한 다음 편집을 선택합니다.

  4. 편집 MyTopic페이지에서 전송 상태 로깅 섹션을 확장합니다.

  5. 전송 상태를 로그할 프로토콜을 선택합니다(예: AWS Lambda).

  6. 성공 샘플 비율 ( CloudWatch 로그를 수신하려는 성공 메시지의 백분율) 을 입력합니다.

  7. IAM 역할 섹션에서 다음 중 하나를 수행합니다.

    • 계정에서 기존 서비스 역할을 선택하려면 Use existing service role(기존 서비스 역할 사용)을 선택한 후 성공한 전송과 실패한 전송의 IAM 역할을 지정합니다.

    • 계정에 새 서비스 역할을 생성하려면 Create new service role(새 서비스 역할 생성)을 선택하고 Create new roles(새 역할 생성)를 선택하여 IAM 콘솔에서 성공한 전송과 실패한 전송의 IAM 역할을 정의합니다.

      Amazon SNS에서 사용자 대신 CloudWatch 로그를 사용할 수 있는 쓰기 액세스 권한을 부여하려면 Allow (허용) 를 선택합니다.

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

    이제 메시지 전송 상태가 포함된 CloudWatch 로그를 보고 분석할 수 있습니다. 사용에 CloudWatch 대한 자세한 내용은 CloudWatch설명서를 참조하십시오.

AWS SDK를 사용하여 전송 상태 로깅 구성

AWS SDK는 Amazon SNS에서 메시지 전송 상태 속성을 사용하기 위해 여러 언어로 API를 제공합니다.

주제 속성

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

HTTP

  • HTTPSuccessFeedbackRoleArn - HTTP 엔드포인트에 가입된 Amazon SNS 주제에 대한 메시지 전송 성공 상태를 나타냅니다.

  • HTTPSuccessFeedbackSampleRate - HTTP 엔드포인트에 가입된 Amazon SNS 주제에 대해 샘플링에 성공한 메시지의 비율을 나타냅니다.

  • HTTPFailureFeedbackRoleArn - HTTP 엔드포인트에 가입된 Amazon SNS 주제에 대한 메시지 전송 실패 상태를 나타냅니다.

아마존 데이터 파이어호스

  • FirehoseSuccessFeedbackRoleArn - Amazon Kinesis Data Firehose 엔드포인트에 가입된 Amazon SNS 주제에 대한 메시지 전송 성공 상태를 나타냅니다.

  • FirehoseSuccessFeedbackSampleRate - Amazon Kinesis Data Firehose 엔드포인트에 가입된 Amazon SNS 주제에 대해 샘플링에 성공한 메시지의 비율을 나타냅니다.

  • FirehoseFailureFeedbackRoleArn - Amazon Kinesis 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 애플리케이션 엔드포인트에 전송된 알림 메시지의 메시지 전송 상태를 위해 주제 속성을 구성할 수 있을 뿐만 아니라, 푸시 알림 서비스에 전송되는 푸시 알림 메시지의 전송 상태를 위해 애플리케이션 속성을 구성할 수도 있습니다. 자세한 정보는 메시지 전송 상태를 위한 Amazon SNS 애플리케이션 속성 사용을 참조하세요.

Amazon SQS

  • SQSSuccessFeedbackRoleArn - Amazon SQS 엔드포인트에 가입된 Amazon SNS 주제에 대한 메시지 전송 성공 상태를 나타냅니다.

  • SQSSuccessFeedbackSampleRate - Amazon SQS 엔드포인트에 가입된 Amazon SNS 주제에 대해 샘플링에 성공한 메시지의 비율을 나타냅니다.

  • SQSFailureFeedbackRoleArn - Amazon SQS 엔드포인트에 가입된 Amazon SNS 주제에 대한 메시지 전송 실패 상태를 나타냅니다.

참고

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

AWS SDK 예제로 주제 속성 구성

다음 코드 예제는 Amazon SNS 주제 속성을 설정하는 방법을 보여줍니다.

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

이 명령은 출력을 생성하지 않습니다.

Java
SDK for Java 2.x
참고

자세한 내용은 에서 확인할 수 GitHub 있습니다. AWS 코드 예제 리포지토리에서 전체 예제를 찾고 설정 및 실행하는 방법을 배워보세요.

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.xAPI SetTopicAttributes참조를 참조하십시오.

JavaScript
JavaScript (v3) 용 SDK
참고

더 많은 내용이 있습니다. GitHub AWS 코드 예제 리포지토리에서 전체 예제를 찾고 설정 및 실행하는 방법을 배워보세요.

별도의 모듈에서 클라이언트를 생성하고 내보냅니다.

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; };
Kotlin
SDK for Kotlin
참고

자세한 내용은 다음과 같습니다 GitHub. AWS 코드 예제 리포지토리에서 전체 예제를 찾고 설정 및 실행하는 방법을 배워보세요.

suspend fun setTopAttr(attribute: String?, topicArnVal: String?, value: String?) { val request = SetTopicAttributesRequest { attributeName = attribute attributeValue = value topicArn = topicArnVal } SnsClient { region = "us-east-1" }.use { snsClient -> snsClient.setTopicAttributes(request) println("Topic ${request.topicArn} was updated.") } }
  • API 세부 정보는 Kotlin API용 AWS SDK 레퍼런스를 참조하세요 SetTopicAttributes.

PHP
SDK for PHP
참고

자세한 내용은 여기에서 확인할 수 있습니다. GitHub AWS 코드 예제 리포지토리에서 전체 예제를 찾고 설정 및 실행하는 방법을 배워보세요.

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()); }
Ruby
SDK for Ruby
참고

자세한 내용은 다음과 같습니다 GitHub. AWS 코드 예제 리포지토리에서 전체 예제를 찾고 설정 및 실행하는 방법을 배워보세요.

# 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
SAP ABAP
SDK for SAP ABAP API
참고

자세한 내용은 다음과 같습니다 GitHub. AWS 코드 예제 리포지토리에서 전체 예제를 찾고 설정 및 실행하는 방법을 배워보세요.

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용 AWS SDK ABAP API 참조를 참조하십시오 SetTopicAttributes.

AWS CloudFormation을 사용하여 전송 상태 로깅 구성

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

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