2017-04-11 7 views
0

ラムダ関数を使ってダイナモテーブルを取得し、セールスフォースにデータをプッシュします。これはうまく動作します。関数が5分に制限されているのは、sqsから電子メール(またはクライアントIDを一度に1つずつ取り出して、各電子メールごとに1回ずつラムダ関数を実行し、制限を超えて実行しないようにすることです。ループと私のチームメイトが試したいくつかの他の方法として。私のラムダ関数を一度に1つ1つのsqs内のすべてのメールに呼び出す方法

function receive() { 
    var aws = require('aws-sdk'); 
    var sqs = new aws.SQS({"region": "us-west-2"}); 
    var params = { 
    QueueUrl: "https://sqs.us-west-2.amazonaws.com/*****/****", 
    MaxNumberOfMessages: 1 
    }; 
    sqs.receiveMessage(params, function(err, data) { 
// var message = JSON.load(data['Message']) 
// var message = JSON.load(data); 
// var message = data; 
    var message = data.Messages[0], 
    body = JSON.parse(message.Body); 
    console.log(body.client_id); 

    get_client_from_dynamo(body.client_id); 

    // console.log("Raw" + data) 
    }); 
} 

この方法では、ここでは動作しますが、唯一のリストの最後の電子メールのためのラムダ関数を呼び出します。任意の提案は役立つだろう、私はまだ多少新しいですとセールスフォースとラムダにも私が愛している最後の数週間で良いことを学んだ。必要に応じてより多くのコードを追加します。

+0

ラムダが5分以内に処理を完了できない場合は、遅い処理またはデータスループットの制限が原因であるかどうかを確認してください。処理が遅いため、最大1.5GBのRAMをプロビジョニングできます。 – mootmoot

答えて

2

メール/ SES> - > SQS/SNS->ラムダを実行するには、おそらくはラムダには適していません。

AWSラムダは、が新しい情報が到着するなどのイベントによってがトリガーされた状況に最適です。

または、ラムダをに設定すると、小さな作業塊であるを処理できます。たとえば、データをコピーするためにDynamoDBをスキャンしたLambda関数を実行し、次にそれぞれが小さな作業を行う複数のLambda関数を直接トリガーします。あなたは、それぞれが小さな仕事をしている数百から数千のラムダ関数を消すことができます。

t2インスタンス(例:t2.nano)を使用することもできます(予約済みインスタンスとして1時間あたり1時間未満またはさらに低コスト)。すべて、スポット価格で1時間あたり約0.5セントの古いt1.microインスタンスを使用することができます。

+0

それは1つか2つの勘定ではそれ以上時間がかかりませんが、私が発電所のすべての口座にデータを送り出すのは、私が発電所のテーブルに持っていればすぐにはかかります。それはまた、私のテーブルをスキャンし、新しい日のデータを送信する毎日のイベントですトリガに到着する新しいデータに依存しません。クライアントが私たちが作成した管理ページを使用して新しいアカウントをテーブルに追加するときはわからないので、別のラムダを使用することはできません。これは基本的に私がそれをやろうとしていたことでもありました。 –

関連する問題