Java 亚马逊SNS客户端可以';不要发表主题

Java 亚马逊SNS客户端可以';不要发表主题,java,eclipse,aws-lambda,amazon-sns,Java,Eclipse,Aws Lambda,Amazon Sns,我已经创建了AmazonSNS客户端,提供了凭证,设置了区域,创建了发布消息,并使用了带有属性的发布方法。它不会显示任何日志或异常,主题上也不会发生任何事情。我哪里出错了?先谢谢你 背景 我使用“implements RequestHandler{}”创建了lambda函数。无论何时发生错误,我都想将错误消息推送到所需的主题,基本上是尝试错误处理。如果没有错误,并且函数本身没有使用“发布到”主题,则Lambda函数工作正常。下面的代码仅应用于错误句柄部分。多谢各位 这是我的密码: String

我已经创建了AmazonSNS客户端,提供了凭证,设置了区域,创建了发布消息,并使用了带有属性的发布方法。它不会显示任何日志或异常,主题上也不会发生任何事情。我哪里出错了?先谢谢你

背景


我使用“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);

如果您的代码在AWS Lambda中运行,则会自动提供凭据。无需使用
BasicAWSCredentials

简单地说:

AmazonSNSClient snsClient = new AmazonSNSClient();

要查找Lambda函数正在运行的区域,请参阅:

我设法使用以下代码使其工作:


问题终于解决了,实际上是由于网络问题

详细了解我所做的工作和存在的问题


有关更多详细信息,请查看此链接,单击

尝试包含尽可能多的信息。您不想包含访问密钥和密码是可以理解的,因此在这些字符串中包含类似于
的内容可以明显看出您包含了密钥,但只是为了解决问题而混淆了密钥,而不是将它们作为空字符串保留,这显然是一个问题。关于你所在地区的一切都不应该是秘密,我在文档中找不到任何关于
地区的参考。MyRegion
@JamieStarke谢谢你的评论。关于关键的你理解正确,对于区域我也采取同样的技术隐藏。可以理解的是,地区并没有那么私人。我将作为下一个问题的参考。再次感谢您的回复。@John Rotenstein,感谢您的回答。请清楚说明我不需要凭证,否则我会感到困惑。关于我使用“snsClient.setRegion(Region.getRegion(regions.EU_CENTRAL_1))”的区域,我尝试了一种简单的方法,即不使用凭据。但它仍然没有发布到相应的主题。有什么建议吗?再次感谢。如果它不起作用,那么您需要查看报告的错误。日志被发送到CloudWatch日志,但您首先需要为Lambda函数使用的角色分配权限,以便它可以访问CloudWatch日志(
AWSLambdaBasicExecutionRole
)。