AWS Lambda SNS目标无法成功或失败

问题描述

参考:https://aws.amazon.com/blogs/compute/introducing-aws-lambda-destinations/

检查this answer说:仅异步lambda执行仅对目标有效。

Lambda代码

const AWSManager = require('./AWSManager.js');
const request = require('request-promise'); 

exports.handler = async (event,context) => {
  var input = JSON.stringify(event,null,2);
  console.log(event.region);
  //console.log("EVENT: \n" + JSON.stringify(event,2))
  // Todo implement
  var secret_name,region_name;
  if(event.secretName){
    secret_name= event.secretName;
    region_name = event.region;
    
  }else{
    secret_name= "test/"
    region_name = "us-east-1"
  }
  console.log(secret_name)
  var secret = await AWSManager.getSecret(secret_name)
  //console.log('mysecret: ' + secret )
  var secret_values = JSON.parse(secret);
  //var request = require('request');
  var okta_org_url = secret_values['okta_org_url']
  var okta_token = secret_values['okta_token']
  var api_endpoint = okta_org_url + "api/v1/users?limit=25"
  var options = {
    'method': 'GET','url': api_endpoint,'headers': {
       // header @R_522_4045@ion
    }
  };
  var api_response = await request(options).then(res => res).catch(err => err)
 
 
  return {
    "statusCode": 200
  }
};

仅SNS目标无法正常执行代码。 SNS目标具有电子邮件协议订阅,可在失败时发送电子邮件

解决方法

找到答案只是错误。

根据AWS Lambda w/ SQS trigger,SQS Lambda Destinations,never adds to destination queue中的解释,仅对于调用lambda异步才是正确的,您必须运行其他命令。而且来自UI的测试输入无法像异步一样工作。它可以用作同步通话。

aws lambda invoke \     
--function-name lambdaname \     
--invocation-type Event \     
--payload '{ "name": "Bob" }' \     
response.json 

参考:https://docs.aws.amazon.com/cli/latest/reference/lambda/invoke.html#examples

这是异步和异步的列表调用支持lambda:

https://aws.amazon.com/blogs/architecture/understanding-the-different-ways-to-invoke-lambda-functions/