AWS Video Rekognition不会将结果发布到SNS主题

时间:2019-09-12 21:56:35

标签: node.js amazon-web-services amazon-sns amazon-rekognition

运行一些nodejs aw rekognition以检测mp4视频中的标签,但是完成后它不会发布到指定的SNS主题。提交带有主题/角色信息的请求时,我没有任何权限错误。

const AWS = require('aws-sdk');
AWS.config.update(
    {
        region: 'us-west-2',
        accessKeyId: "asdfadsf",
        secretAccessKey: "asdfasdfasdfasd1234123423"
    }
);


const params = {
    Video: {
        S3Object: {
            Bucket: 'myvidebucket',
            Name: '5d683b81760ec59c2015.mp4'
        }
    },
    NotificationChannel: {
        RoleArn: 'arn:aws:iam::xxxxxxxxxxxxx:role/AmazonRekognitionSNSSuccessFeedback',
        SNSTopicArn: 'arn:aws:sns:us-west-2:xxxxxxxxxxxxx:recoknize',
    },
    MinConfidence: 60
};


rekognition.startLabelDetection(params).promise().then(data => {
    console.log(JSON.stringify(data));
}).catch(error => {
    console.log(error);
});

该代码执行没有错误,我得到了一个工作ID。我的SNS主题订阅已确认,并且应该发布到我的HTTPS端点。但是什么也没有到达,并且AWS控制台中的任何地方都没有关于此的错误日志。

当我通过jobid手动访问识别时,数据恢复正常,因此我知道它正确完成了。使用IAM权限必须进行一些奇怪的事情。

2 个答案:

答案 0 :(得分:1)

我已成功检查并测试了您的nodejs代码,但没有发现任何问题。

由于代码成功返回了AWS Rekognition“ JobId”,因此您可以查看您的SNS配置并检查其是否符合以下条件:

1。。在您的 SNS主题上( 'arn:aws:sns:us-west-2:xxxxxxxxxxxxx:rekknize' ),导航至访问策略,然后检查您是否具有类似于以下内容的策略:

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "Service": "rekognition.amazonaws.com"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "arn:aws:sns:us-west-2:XXXXXXXXXXXX:AmazonRekognitionTopic"
    }
  ]
}

2。在您的 IAM角色 ('arn:aws:iam :: xxxxxxxxxxxxx:role / AmazonRekognitionSNSSuccessFeedback') < / strong>,请确保以下几点:

(i)您角色的“信任关系”具有以下陈述:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service":"rekognition.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

(ii):该角色具有一个附加的政策文件,类似于以下给出的文件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:publish"
            ],
            "Resource": "*"
        }
    ]
}

从Amazon Rekognition成功发布到SNS主题的消息应输出类似以下内容的

"JobId":"8acd9edd6edfb0e4985f8cd269e4863e54f7fcd451af6aafe10b32996dedbdba","Status":"SUCCEEDED","API":"StartLabelDetection","Timestamp":1568544553927,"Video":{"S3ObjectName":"final.mp4","S3Bucket":"syumak-rekognition"}}

希望这会有所帮助。

答案 1 :(得分:0)

隐藏在文档中-显然 https://docs.aws.amazon.com/rekognition/latest/dg/api-video-roles.html#api-video-roles-all-topics

AmazonRekognitionServiceRole允许Amazon Rekognition Video访问 带有AmazonRekognition前缀的Amazon SNS主题。

并没有说角色ARN需要加上前缀。但不会受伤。 仔细检查您的主题是AmazonRekognitionMyTopicName

 RoleArn: 'arn:aws:iam::xxxxxxxxxxxxx:role/AmazonRekognitionSNSSuccessFeedback', <- don't think this is so important.
SNSTopicArn: 'arn:aws:sns:us-west-2:xxxxxxxxxxxxx:recoknize', <- Must be something like AmazonRekognitionSuccess

也-这有帮助/我取消了FIFO,该FIFO除了允许SQS之外还允许通过电子邮件进行订阅。 https://docs.aws.amazon.com/rekognition/latest/dg/video-troubleshooting.html

此行 确认您具有IAM服务角色,该角色赋予了Amazon Rekognition Video权限以发布到您的Amazon SNS主题。有关更多信息,请参阅配置Amazon Rekognition视频。

我创建了一个新的IAM并给了它 AmazonRekognitionFullAccess 亚马逊 AmazonSNSFullAccess

我更新了信任关系,使其同时包含sns.amazonaws.com / rekognition.amazonaws.com。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "sns.amazonaws.com",
          "rekognition.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

不确定是哪一个使所有内容都点击了-但是在此上度过了愉快的一天/希望这可以节省一些时间。