기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon SNS 메시지 전송 상태
Amazon SNS는 다음 Amazon SNS 엔드포인트가 있는 주제에 전송된 알림 메시지의 전송 상태를 로깅하기 위한 지원을 제공합니다.
메시지 전송 상태 속성을 구성하면 주제 구독자에게 전송되는 메시지에 대한 CloudWatch 로그 항목이 로그로 전송됩니다. 메시지 전송 상태를 로깅하면 다음과 같이 더욱 확장된 운영 이해를 제공할 수 있습니다.
-
메시지가 Amazon SNS 엔드포인트에 전송되었는지 확인
-
Amazon SNS 엔드포인트에서 Amazon SNS로 전송된 응답 식별
-
메시지 유지 시간(게시 타임스탬프 시간부터 Amazon SNS 엔드포인트에 넘겨주기 직전까지의 시간) 결정
메시지 전송 상태를 위한 주제 속성을 구성하려면, AWS 소프트웨어 개발 키트 (SDK) AWS Management Console, 쿼리 API 또는 AWS CloudFormation를 사용할 수 있습니다.
AWS Management Console을 사용하여 전송 상태 로깅 구성
Amazon SNS 콘솔에 로그인합니다.
-
탐색 창에서 주제(Topics)를 선택합니다.
-
주제 페이지에서 주제를 선택한 다음 편집을 선택합니다.
-
편집 MyTopic
페이지에서 전송 상태 로깅 섹션을 확장합니다.
-
전송 상태를 로그할 프로토콜을 선택합니다(예: AWS Lambda).
-
성공 샘플 비율 ( CloudWatch 로그를 수신하려는 성공 메시지의 백분율) 을 입력합니다.
-
IAM 역할 섹션에서 다음 중 하나를 수행합니다.
-
계정에 새 서비스 역할을 생성하려면 Create new service role(새 서비스 역할 생성)을 선택하고 Create new roles(새 역할 생성)를 선택하여 IAM 콘솔에서 성공한 전송과 실패한 전송의 IAM 역할을 정의합니다.
Amazon SNS에서 사용자 대신 CloudWatch 로그를 사용할 수 있는 쓰기 액세스 권한을 부여하려면 Allow (허용) 를 선택합니다.
-
변경 사항 저장를 선택합니다.
이제 메시지 전송 상태가 포함된 CloudWatch 로그를 보고 분석할 수 있습니다. 사용에 CloudWatch 대한 자세한 내용은 CloudWatch설명서를 참조하십시오.
AWS SDK를 사용하여 전송 상태 로깅 구성
AWS SDK는 Amazon SNS의 메시지 전송 상태 속성을 사용하기 위한 여러 언어의 API를 제공합니다.
주제 속성
메시지 전송 상태를 위해 다음 주제 속성 이름 값을 사용할 수 있습니다.
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 애플리케이션 속성 사용을 참조하세요.
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 예제
다음 코드 예제는 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
이 명령은 출력을 생성하지 않습니다.
- 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);
}
}
}
- JavaScript
-
- JavaScript (v3) 용 SDK
-
별도의 모듈에서 클라이언트를 생성하고 내보냅니다.
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
-
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.")
}
}
- 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
-
# 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
-
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.
사용을 구성하려면 JSON 또는 YAML 템플릿을 DeliveryStatusLogging
사용하여 AWS CloudFormation스택을 생성하십시오. AWS CloudFormation 자세한 내용은 AWS CloudFormation 사용 설명서의 AWS::SNS::Topic
리소스 DeliveryStatusLogging
속성을 참조하십시오. 다음은 Amazon SQS AWS CloudFormation 프로토콜의 모든 DeliveryStatusLogging
속성을 사용하여 새 주제를 생성하거나 기존 주제를 업데이트하기 위한 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