【问题标题】:Amazon SNS Client Can't publish to a topicAmazon SNS 客户端无法发布到主题
【发布时间】:2023-03-26 03:41:01
【问题描述】:

我已经创建了亚马逊 sns 客户端,提供了凭据,设置了区域并创建了发布消息,并使用了带有属性的发布方法。它没有显示任何日志或异常,并且主题上没有任何事情发生。我哪里出错了?提前谢谢你。

背景


我使用“implements RequestHandler {}”创建了 lambda 函数。每当发生错误时,我想将该错误消息推送到所需的主题,基本上是尝试错误处理。当没有错误并且发布到主题未在其自身的函数上使用时,Lambda 函数工作正常。下面的代码仅适用于错误句柄部分。谢谢。

这是我的代码:

String msg = "Message";
String ACCESS_KEY = "";
String SECRET_KEY = "";
BasicAWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
AmazonSNSClient snsClient = new AmazonSNSClient(new AWSStaticCredentialsProvider(credentials));
snsClient.setRegion(Region.getRegion(Regions.MyRegion));
String topicArn = "topic arn";
PublishRequest publishRequest = new PublishRequest(topicArn, msg);
snsClient.publish(publishRequest);

【问题讨论】:

  • 尽量包含尽可能多的信息。您不想包含您的访问密钥和秘密是可以理解的,因此在这些字符串中包含 <AccessKey><SecretKey> 之类的内容很明显您包含了您的密钥,但只是为了问题而混淆了它,而不是您只是将这些保留为空字符串,这显然是一个问题。您所在地区的任何事情都不应该保密,我在文档中找不到对Regions.MyRegion的参考
  • @JamieStarke 感谢您的评论。关于Key,您理解正确,对于区域,我也采用相同的隐藏技术。可以理解,区域没有那么私密。我将作为下一个问题的参考。再次感谢您的回复。

标签: java eclipse aws-lambda amazon-sns


【解决方案1】:

如果您的代码在 AWS Lambda 中运行,则会自动提供凭证。不用BasicAWSCredentials

只需调用:

AmazonSNSClient snsClient = new AmazonSNSClient();

要发现运行 Lambda 函数的区域,请参阅:How can one determine the current region within an AWS Lambda function?

【讨论】:

  • @ John Rotenstein,感谢您的回答,这清楚地表明我不需要凭证,否则我会感到困惑。关于我使用这个“snsClient.setRegion(Region.getRegion(Regions.EU_CENTRAL_1));”的区域我尝试了没有凭证的简单方法。它仍然没有发布到相应的主题。有什么建议么?再次感谢您。
  • 如果它不起作用,那么您将需要查看报告的错误。日志会发送到 CloudWatch Logs,但您首先需要为 Lambda 函数使用的角色分配权限,以便它可以访问 CloudWatch Logs (AWSLambdaBasicExecutionRole)。
【解决方案2】:

我设法让它与以下代码一起工作:

enter image description here

【讨论】:

    【解决方案3】:

    终于解决了,其实是网络问题

    关于我所做的和问题的详细信息here

    更多详情请看此链接点击here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      相关资源
      最近更新 更多