【问题标题】:Amazon EventBridge rule cannot trigger a Lambda FunctionAmazon EventBridge 规则无法触发 Lambda 函数
【发布时间】:2021-08-06 15:23:26
【问题描述】:

使用 .Net AWSSDK.EventBridge 我创建了一个规则:

var client = new AmazonEventBridgeClient();
string ruleName = "SomeRule";
var putRuleRequest = new Amazon.EventBridge.Model.PutRuleRequest()
{
  Name = ruleName,
  ScheduleExpression = "rate(10 minutes)",                
  State = RuleState.ENABLED
}

await client.PutRuleAsync(putRuleRequest);

var target = new Amazon.EventBridge.Model.Target();
target.Arn = "ARN_LAMBDA_FUNCTION";
target.Id = "LAMBDA_FUNCTION_NAME";
target.Input = JsonSerializer.Serialize(new { someId, someDate});

var targetList = new List<Amazon.EventBridge.Model.Target>();
targetList.Add(target);

var putTargetRequest = new Amazon.EventBridge.Model.PutTargetsRequest()
{
  Rule = ruleName,
  Targets = targetList
};

await client.PutTargetsAsync(putTargetRequest);

Lambda 函数已创建,因此我将 ARN 和名称放在目标上。这个想法是只有一个函数,但多个规则会调用它。

函数的规则、计划和目标是在我运行代码时创建的,但问题是函数不能被规则触发。当我编辑规则时,在 AWS 控制台中更新它,而不更改触发器的工作原理。

我错过了什么?

【问题讨论】:

    标签: c# aws-lambda amazon-cloudwatch aws-event-bridge


    【解决方案1】:

    经过搜索,我发现我缺少 Lambda 的权限。

    //This line replaces the code above
    var putRuleResponse = client.PutRuleAsync(putRuleRequest).Result;
    
    var lp = new Amazon.Lambda.Model.AddPermissionRequest();
    lp.FunctionName = FUNCTION_ARN;
    lp.Action = "lambda:InvokeFunction";
    lp.SourceArn = putRuleResponse.RuleArn;
    lp.Principal = "events.amazonaws.com";
    lp.StatementId = "SomeStatement";
    
    var lambdaClient = new AmazonLambdaClient();
    await lambdaClient.AddPermissionAsync(lp);
    
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2021-10-08
      • 1970-01-01
      • 2021-09-02
      • 2022-01-27
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      相关资源
      最近更新 更多