Amazon web services aws-如何让一个lambda呼叫另一个lambda

Amazon web services aws-如何让一个lambda呼叫另一个lambda,amazon-web-services,aws-lambda,Amazon Web Services,Aws Lambda,当我单独测试dynamoDB时,第二个lambda工作并将记录插入其中 然后我有另一个lambda,它正试图调用它,但似乎什么也没有发生 Cloudwatch日志显示没有问题,调用后显示puts语句。 但是dynamodb表没有插入任何记录 两个lambda都有完整的lambda访问权限 Lambda 2-LamdaLamdaDynamodb 第二个独立工作的lambda: # lambda 'two' require 'aws-sdk-lambda' require 'aws-sdk-dyna

当我单独测试dynamoDB时,第二个lambda工作并将记录插入其中

然后我有另一个lambda,它正试图调用它,但似乎什么也没有发生

Cloudwatch日志显示没有问题,调用后显示puts语句。 但是dynamodb表没有插入任何记录

两个lambda都有完整的lambda访问权限

Lambda 2-LamdaLamdaDynamodb 第二个独立工作的lambda:

# lambda 'two'
require 'aws-sdk-lambda'
require 'aws-sdk-dynamodb'
require 'time'
require 'json'

def handler(event:, context:)
  p "index2"
  dynamodb = Aws::DynamoDB::Client.new(region: 'us-east-2')
  item = {
      "name": "#{Time.now.to_s[0..19]} #{event['Records'][0]['eventSource']} #{event['Records'][0]['eventName']}",
      "eventTime": "#{Time.now.to_s[0..19]}",
      "eventSource": "lambda",
      "description": "from lambda event",
      "eventID": "#{event['Records'][0]['eventID']}",
      "eventName": "#{event['Records'][0]['eventName']}", 
      "eventSource":"#{event['Records'][0]['eventSource']}",
      "awsRegion":"#{event['Records'][0]['awsRegion']}"
  }
  params = {
      table_name: 'any_event',
      item: item
  }
  begin
    dynamodb.put_item(params)
    puts 'Added item'
  rescue  Aws::DynamoDB::Errors::ServiceError => error
    puts 'Unable to add item:'
    puts error.message
  end
end
Lambda 1-triggerLamdaLamda 第一个尝试称之为的Lambda:

require 'aws-sdk-lambda'
require 'time'
require 'json'
def lambda_handler(event:, context:)
  client = Aws::Lambda::Client.new(region: 'us-east-2')
  payload = '{"name": "thing"}' 
  the_payload = JSON.generate(payload)
  resp = client.invoke({
    function_name: 'LamdaLamdaDynamodb',
    invocation_type: 'RequestResponse',
    log_type: 'None',
    payload: the_payload
  })
end
把时间当作钥匙不是个好主意。见: 可以使用步骤函数以工作流方式链接Lambda函数。 第一个lambda可以发出CloudWatch事件,第二个lambda可以监听该事件作为触发器。事件将包含有效负载。 IMO:[3]是最简单的方法。您还可以尝试将function_name参数设置为Lambda函数的ARN

把时间当作钥匙不是个好主意。见: 可以使用步骤函数以工作流方式链接Lambda函数。 第一个lambda可以发出CloudWatch事件,第二个lambda可以监听该事件作为触发器。事件将包含有效负载。 IMO:[3]是最简单的方法。您还可以尝试将function_name参数设置为Lambda函数的ARN

你可以从另一个lambda调用一个lambda。 调用lambda的角色应具有具有lambda:InvokeFunction操作的附加策略。 调用lambda(假设其同步调用其他2个lambda)的默认类型应为invocationType=RequestResponseits。 不同的调用类型如下RequestResponse default、Event和DryRun。取决于同步调用或异步调用。 在您的情况下,我唯一能想到的是,这个操作需要lambda:InvokeFunction操作的权限。 你可以从另一个lambda调用一个lambda。 调用lambda的角色应具有具有lambda:InvokeFunction操作的附加策略。 调用lambda(假设其同步调用其他2个lambda)的默认类型应为invocationType=RequestResponseits。 不同的调用类型如下RequestResponse default、Event和DryRun。取决于同步调用或异步调用。 在您的情况下,我唯一能想到的是,这个操作需要lambda:InvokeFunction操作的权限。
正确的方法是使用SNS,因为您正在更新现有记录,而不是插入新记录。然而,我用时间作为关键来避免这种情况。而且它仍然没有多次尝试触发。正确的方法是使用SNS,因为您正在更新现有记录,而不是插入新记录。好的想法。然而,我用时间作为关键来避免这种情况。而且它仍然没有在多次尝试触发+1的时间评论后发布。我只是在玩,但我仍然应该为自己和他人练习好的技术。我加了一个.反转来帮助。对于中小型,时间注释应为ok+1。我只是在玩,但我仍然应该为自己和他人练习好的技术。我加了一个.反转来帮助。对于中小型,这应该可以
invoke_resp = LAMBDA_CLIENT.invoke(
        FunctionName='second_lambda',
        InvocationType='RequestResponse',
        Payload=encoded_payload)