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

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

Amazon SNS 메시지 전송 상태

AmazonSNS은 다음 Amazon SNS 엔드포인트를 사용하여 주제로 전송된 알림 메시지의 전송 상태를 로깅하는 지원을 제공합니다.

  • HTTP

  • Amazon Data Firehose

  • AWS Lambda

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

  • Amazon Simple Queue Service

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

  • 메시지가 Amazon SNS 엔드포인트에 전달되었는지 여부를 알 수 있습니다.

  • Amazon SNS 엔드포인트에서 Amazon 로 전송된 응답을 식별합니다SNS.

  • 메시지 일시 중지 시간(게시 타임스탬프와 Amazon SNS 엔드포인트로 전달하기 직전 사이의 시간) 확인

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

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

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

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

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

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

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

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

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

    • 계정에서 기존 서비스 역할을 선택하려면 기존 서비스 역할 사용을 선택한 다음 성공 및 실패한 전송에 대한 IAM 역할을 지정합니다.

    • 계정에서 새 서비스 역할을 생성하려면 새 서비스 역할 생성을 선택하고 새 역할 생성을 선택하여 IAM 콘솔에서 성공 및 실패한 전송에 대한 IAM 역할을 정의합니다.

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

  8. Save changes(변경 사항 저장)를 선택합니다.

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

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

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

주제 속성

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

HTTP

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

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

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

Amazon Data Firehose

  • 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 Application Attributes 사용을 참조하세요.

Amazon SQS

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

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

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

참고

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

AWS SDK 주제 속성을 구성하는 예제

다음 코드 예제는 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 내용은 명령 참조SetTopicAttributes의 섹션을 참조하세요. AWS CLI

Java
SDK 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 내용은 참조SetTopicAttributes의 섹션을 참조하세요. AWS SDK for Java 2.x API

JavaScript
SDK 용 JavaScript (v3)
참고

에 대한 자세한 내용은 를 참조하세요 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 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 자세한 내용은 SetTopicAttributes의 에서 AWS SDK Kotlin API 참조 를 참조하세요.

PHP
PHP용 SDK
참고

에 대한 자세한 내용은 를 참조하세요 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()); }
  • 자세한 API 내용은 참조SetTopicAttributes의 섹션을 참조하세요. AWS SDK for PHP API

Ruby
SDK 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 에 대한 SAP ABAP
참고

에 대한 자세한 내용은 를 참조하세요 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 자세한 내용은 SetTopicAttributes의 섹션을 AWS SDK SAP ABAP API 참조하세요.

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

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

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