기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon SNS 메시지 전송 상태
AmazonSNS은 다음 Amazon SNS 엔드포인트를 사용하여 주제로 전송된 알림 메시지의 전송 상태를 로깅하는 지원을 제공합니다.
메시지 전송 상태 속성을 구성하면 주제 구독자에게 전송되는 메시지에 대한 로그 항목이 CloudWatch 로그로 전송됩니다. 메시지 전송 상태를 로깅하면 다음과 같이 더욱 확장된 운영 이해를 제공할 수 있습니다.
-
메시지가 Amazon SNS 엔드포인트에 전달되었는지 여부를 알 수 있습니다.
-
Amazon SNS 엔드포인트에서 Amazon 로 전송된 응답을 식별합니다SNS.
-
메시지 일시 중지 시간(게시 타임스탬프와 Amazon SNS 엔드포인트로 전달하기 직전 사이의 시간) 확인
메시지 전송 상태에 대한 주제 속성을 구성하려면 , AWS Management Console AWS 소프트웨어 개발 키트(SDKs), 쿼리 API또는 를 사용할 수 있습니다 AWS CloudFormation.
AWS Management Console을 사용하여 전송 상태 로깅 구성
Amazon SNS 콘솔 에 로그인합니다.
-
탐색 창에서 주제(Topics)를 선택합니다.
-
주제 페이지에서 주제를 선택한 다음 편집을 선택합니다.
-
편집에서 MyTopic
페이지에서 전송 상태 로깅 섹션을 확장합니다.
-
전송 상태를 로그할 프로토콜을 선택합니다(예: AWS Lambda).
-
성공 샘플 비율( CloudWatch 로그를 수신하려는 성공 메시지의 백분율)을 입력합니다.
-
IAM 역할 섹션에서 다음 중 하나를 수행합니다.
-
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 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
이 명령은 출력을 생성하지 않습니다.
- 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);
}
}
}
- 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.")
}
}
- 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());
}
- 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.
를 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