翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS メッセージ配信ステータス
Amazon SNSは、次の Amazon SNSエンドポイントを持つトピックに送信された通知メッセージの配信ステータスを記録するサポートを提供します。
メッセージ配信ステータス属性を設定すると、トピックサブスクライバーに送信されたメッセージのログエントリが CloudWatch ログに送信されます。メッセージの配信ステータスを記録することは、以下のように運用をよりよく把握するのに役立ちます。
-
メッセージが Amazon SNSエンドポイントに配信されたかどうかを知る。
-
Amazon SNSエンドポイントから Amazon に送信されたレスポンスを識別しますSNS。
-
メッセージドウェル時間 (公開タイムスタンプから Amazon SNSエンドポイントに引き渡す直前の時間) を決定します。
メッセージ配信ステータスのトピック属性を設定するには、、 AWS ソフトウェア開発キット (SDKs) AWS Management Console、クエリAPI、または を使用できます AWS CloudFormation。
AWS Management Consoleを使用した配信ステータスのログ記録を設定する
Amazon SNSコンソール にサインインします。
-
ナビゲーションパネルで、[トピック] を選択します。
-
[トピック] ページで、トピックを選択して [編集] を選択します。
-
編集時 MyTopic
「」ページを開き、配信ステータスのログ記録セクションを展開します。
-
配信ステータスをログに記録するプロトコルを選択します (AWS Lambda など)。
-
成功サンプルレート ( CloudWatch ログを受信する成功メッセージの割合) を入力します。
-
IAM ロールセクションで、次のいずれかを実行します。
-
[Save changes] (変更の保存) をクリックします。
メッセージ配信ステータスを含む CloudWatch ログを表示および解析できるようになりました。の使用の詳細については CloudWatch、「 CloudWatchドキュメント」を参照してください。
を使用した配信ステータスのログ記録の設定 AWS SDKs
は、Amazon AWS SDKsAPIsでメッセージ配信ステータス属性を使用するための複数の言語で提供します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 ログを使用するための Amazon SNS書き込みアクセス許可を付与するために使用されます。<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
-
- 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
を使用して を設定するには AWS CloudFormation、 JSONまたは YAML テンプレートを使用して 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