404

2 つの Lambda 関数があります。1 つは見積もりを生成し、もう 1 つは見積もりを注文に変換します。Order lambda 関数が Quote 関数を呼び出して、信頼できないクライアントから引用を受け取るだけでなく、引用を再生成するようにしたいと考えています。

私は考えられるあらゆる場所を見てきましたが、関数をチェーンしたり呼び出したりする方法がわかりません...確かにこれは存在します!

4

18 に答える 18

443

を使う方法を見つけました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

于 2015-07-31T12:05:17.297 に答える
138

Lambda functionsviaをチェーンする必要がありますSNS。このアプローチは、最小限の労力で優れたパフォーマンス、レイテンシ、およびスケーラビリティを提供します。

1人目はLambdaあなたにメッセージを発行SNS Topicし、2 人目Lambdaはこのトピックにサブスクライブします。メッセージがトピックに到着するとすぐに、Lambda入力パラメーターとしてメッセージを使用して second が実行されます。

Amazon SNS 通知を使用した Lambda 関数の呼び出し を参照してください。

このアプローチを使用して、SNS 経由でクロスアカウント Lambda 関数を呼び出すこともできます。

于 2015-07-30T18:58:03.437 に答える
96

これは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": "*"
    }
于 2016-02-19T21:08:57.593 に答える
12

Lambda クライアントのドキュメント (Java バージョン)でこれを見るまで、SNS の切り取りを検討していました。

AWS Lambda にアクセスするためのクライアント。このクライアントを使用して行われたすべてのサービス呼び出しはブロックされており、サービス呼び出しが完了するまで返されません。

したがって、SNS には明らかな利点があります。つまり、非同期です。あなたのラムダは、後続のラムダが完了するのを待ちません。

于 2016-08-09T03:12:02.380 に答える
3

Async.js ウォーターフォール機能を利用できる場合があります。例として、このドキュメントのステップ 3 にある大きなコード チャンクの下部を参照してください。

https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/

于 2015-09-02T14:54:25.800 に答える
2

私は同じ問題を抱えていますが、実装する 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/

于 2016-04-22T08:59:05.243 に答える
1

回避策のようなものですが、ラムダ関数をチェーンする必要がある場合は、ラムダ関数の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

于 2016-07-25T14:42:31.203 に答える