2 つの Lambda 関数があります。1 つは見積もりを生成し、もう 1 つは見積もりを注文に変換します。Order lambda 関数が Quote 関数を呼び出して、信頼できないクライアントから引用を受け取るだけでなく、引用を再生成するようにしたいと考えています。
私は考えられるあらゆる場所を見てきましたが、関数をチェーンしたり呼び出したりする方法がわかりません...確かにこれは存在します!
2 つの Lambda 関数があります。1 つは見積もりを生成し、もう 1 つは見積もりを注文に変換します。Order lambda 関数が Quote 関数を呼び出して、信頼できないクライアントから引用を受け取るだけでなく、引用を再生成するようにしたいと考えています。
私は考えられるあらゆる場所を見てきましたが、関数をチェーンしたり呼び出したりする方法がわかりません...確かにこれは存在します!
を使う方法を見つけましたaws-sdk
。
var aws = require('aws-sdk');
var lambda = new aws.Lambda({
region: 'us-west-2' //change to your region
});
lambda.invoke({
FunctionName: 'name_of_your_lambda_function',
Payload: JSON.stringify(event, null, 2) // pass params
}, function(error, data) {
if (error) {
context.done('error', error);
}
if(data.Payload){
context.succeed(data.Payload)
}
});
ここでドキュメントを見つけることができます: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
Lambda functions
viaをチェーンする必要がありますSNS
。このアプローチは、最小限の労力で優れたパフォーマンス、レイテンシ、およびスケーラビリティを提供します。
1人目はLambda
あなたにメッセージを発行SNS Topic
し、2 人目Lambda
はこのトピックにサブスクライブします。メッセージがトピックに到着するとすぐに、Lambda
入力パラメーターとしてメッセージを使用して second が実行されます。
Amazon SNS 通知を使用した Lambda 関数の呼び出し を参照してください。
このアプローチを使用して、SNS 経由でクロスアカウント Lambda 関数を呼び出すこともできます。
これはpythonのサンプルコードです。
from boto3 import client as boto3_client
from datetime import datetime
import json
lambda_client = boto3_client('lambda')
def lambda_handler(event, context):
msg = {"key":"new_invocation", "at": datetime.now()}
invoke_response = lambda_client.invoke(FunctionName="another_lambda_",
InvocationType='Event',
Payload=json.dumps(msg))
print(invoke_response)
ところで、このようなポリシーをラムダロールにも追加する必要があります
{
"Sid": "Stmt1234567890",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": "*"
}
Lambda クライアントのドキュメント (Java バージョン)でこれを見るまで、SNS の切り取りを検討していました。
AWS Lambda にアクセスするためのクライアント。このクライアントを使用して行われたすべてのサービス呼び出しはブロックされており、サービス呼び出しが完了するまで返されません。
したがって、SNS には明らかな利点があります。つまり、非同期です。あなたのラムダは、後続のラムダが完了するのを待ちません。
Async.js ウォーターフォール機能を利用できる場合があります。例として、このドキュメントのステップ 3 にある大きなコード チャンクの下部を参照してください。
https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/
私は同じ問題を抱えていますが、実装する Lambda 関数は DynamoDB にエントリを挿入するため、私のソリューションでは DynamoDB トリガーを使用します。
テーブルのすべての挿入/更新に対して DB が Lambda 関数を呼び出すようにするため、これにより 2 つの Lambda 関数の実装が分離されます。
ドキュメントはこちら: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.html
ガイド付きウォークスルーは次のとおりです: https://aws.amazon.com/blogs/aws/dynamodb-update-triggers-streams-lambda-cross-region-replication-app/
回避策のようなものですが、ラムダ関数をチェーンする必要がある場合は、ラムダ関数のAPI エンドポイントを呼び出すだけです。これにより、コーディング中に非同期にするかどうかを決定できます。
POST リクエストをセットアップしたくない場合は、クエリ文字列パラメーターをいくつか指定するか、まったく指定しない単純な GET リクエストをセットアップするだけで、簡単にイベントを渡すことができます。
- 編集 -
参照: https://docs.aws.amazon.com/apigateway/api-reference/making-http-requests/
および: http://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example.html