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