无效参数:发布到 AWS SNS arn 端点时主题名称错误

Bla*_*ock 8 java amazon-web-services amazon-sns

在 Java 中,我尝试使用以下代码将 AWS SNS 消息发布到特定的 ARN 端点:

import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.sns.AmazonSNS;
import com.amazonaws.services.sns.AmazonSNSClient;
import com.amazonaws.services.sns.model.PublishRequest;
import com.amazonaws.services.sns.model.PublishResult;

...

AmazonSNS snsClient = new AmazonSNSClient(new BasicAWSCredentials(System.getenv("AWS_KEY"), System.getenv("AWS_SECRET")));

snsClient.setRegion(Region.getRegion(Regions.US_EAST_1));

String message = "{\"APNS_SANDBOX\":\"{\\\"aps\\\":{\\\"type\\\":\\\"XXX\\\",\\\"email\\\":\\\"XXX@gmail.com\\\",\\\"alert\\\":\\\"some alert\\\"}}\"}";

PublishResult pr = snsClient.publish(new PublishRequest("arn:aws:sns:us-east-1:XXX:endpoint/APNS_SANDBOX/XXX/XXX-XXX-XXX-XXX", message));
Run Code Online (Sandbox Code Playgroud)

我一直收到以下错误消息:

Invalid parameter: Topic Name (Service: AmazonSNS; Status Code: 400; Error Code: InvalidParameter; Request ID: XXX

对此有什么想法吗?

我可以毫无问题地从 SNS 控制台发布到 ARN 端点,并且我尝试了不同的消息变体

Rex*_*Lam 9

您应该使用TargetArn而不是TopicArnwhich 是PublishRequest构造函数的第一个参数。

PublishRequest pr = new PublishRequest();
pr.TargetArn = "arn:aws:sns:us-east-1:XXX:endpoint/APNS_SANDBOX/XXX/XXX-XXX-XXX-XXX";
pr.Message = message;
Run Code Online (Sandbox Code Playgroud)

(也许现在回答lol太晚了)


che*_*kha 6

错误信息有点混乱。如果您提供了错误的主题 ARN,您Invalid Parameter: Topic Name也会收到错误消息。

从您发布的内容来看,您可能使用了订阅 ARN,而不是主题 ARN。主题 ARN 格式如下所示arn:aws:sns:AWS_REGION:AWS_ACCOUNT_NUMBER:TOPIC_NAME