首页 > 解决方案 > 让 SNS 以编程方式工作...通过命令行工作

问题描述

尝试在我的 PROD 环境中对 SNS 进行简单调用,但它不断抛出SELF_SIGNED_CERT_IN_CHAIN错误。这在我的本地和 DEV 环境中使用相同的代码非常有效。

我最初将证书传递给 AWS.config 但将其取出(请参阅评论)。我猜它在某处寻找证书,但似乎无法在 AWS 文档中找到。

var AWS = require('/projects/aws-sdk/node_modules/aws-sdk');
var fs = require('fs'), https=require('https');
//var certs=fs.readFileSync('/etc/pki/ca-trust/extracted/pem/ca-bundle.pem).toString().split(/(?=-----BEGIN CERTIFICATE-----)/);
AWS.config.update({
  httpOptions: {
    agent: new https.Agent({rejectUnauthorized:true})
    }
  });

AWS.config.update({
   region: 'us-iso-east-1'
  });

var params = {
   Message: "SNS Test",
   TopicArn: 'arn:aws-iso:sns:us-iso-east-1:7446189262331:SNS_EROR_PROD' };

var publishTextPromise = new AWS.SNS({apiVersion:'2010-03-31'}).publish(params).promise();
logger.info("publishPromise:"+JSON.stringify(publishTextPromise));
logger.info("Before call to promise");
publishTextPromise.then(
   function(data) {
      logger.info("inside call");
    }).catch(function(err) {
      logger.info("CATCH ERROR", err);
    });

一切似乎都正常运行,直到publishTextPromise.then它落入catch抛出该证书错误的块中。

当我注销的值时,publishTextPromise我得到了我认为是垃圾的值:publishPromise:{"_c":[],"_s":0,"_d":false,"_h":0,"_n":false}

作为一个单独的测试,我使用命令行 CLI 订阅该 sns 主题并向其发布消息。它在 PROD 中效果很好!命令行有效,但代码无效。诡异的。

我上面的示例是直接从 AWS 文档中提取的,所以我认为它会起作用吗?希望有人看到我可能错过的愚蠢的东西!谢谢大家!

标签: amazon-web-servicesamazon-sns

解决方案


推荐阅读