web-dev-qa-db-ja.com

ランダムステータスコード:ラムダに接続されたAWSAPIゲートウェイで502エラー

プロキシ統合を使用して、APIゲートウェイで複数のラムダを公開しています。時々、ステータスコード502で奇妙なエラーが発生します。ラムダクラウドウォッチログには何もありません。以下に、サンプルリクエストのAPIゲートウェイログを投稿しました。

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Received response. Integration latency: 231 ms

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Endpoint response body before transformations:
{
    "Message": "An error occurred and the request cannot be processed.",
    "Type": "Service"
}

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Endpoint response headers: 
{
    Connection=keep-alive, 
    x-amzn-RequestId=0cbc9dee-f1bd-11e7-857b-91f7f814692c, 
    x-amzn-ErrorType=ServiceException, 
    Content-Length=86, 
    Date=Fri, 05 Jan 2018 02:06:32 GMT, 
    Content-Type=application/json
}

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Execution failed due to configuration error: Malformed Lambda proxy response

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Method completed with status: 502

基本的に、APIゲートウェイはラムダに到達できず、ラムダへの呼び出しが返されているようです。

(0cbbd9f5-f1bd-11e7-92c0-4d5d3b7d0380) Endpoint response body before transformations:
{
    "Message": "An error occurred and the request cannot be processed.",
    "Type": "Service"
}

これらの問題を経験している人は他にいますか?私の側からの唯一の可能な修正は、再試行メカニズムを作成することですが、私の側からは、いくつかの構成が欠落しているか、AWSの障害を処理する必要があるように見えます。

20
Pawel

私はここに1つの考えられる理由をリストしています...

AWSLambdaがVPCで実行するように設定されている場合。 VPCからの実行ごとに1つのIPが必要です。

また、VPCの空きIPが少ない場合、ラムダはサイレントに失敗します:(

私は個人的に限られたIPに関して問題に直面しました、IPを増やすことは問題を解決しました。

this リンクからのテキストの下

指定するサブネットには、ENIの数と一致するのに十分な使用可能なIPアドレスが必要です。

また、Lambda関数構成の各アベイラビリティーゾーンに少なくとも1つのサブネットを指定することをお勧めします。各アベイラビリティーゾーンでサブネットを指定することにより、Lambda関数は、1つがダウンしたり、IPアドレスが不足した場合に、別のアベイラビリティーゾーンで実行できます。

注意

VPCに十分なENIまたはサブネットIPがない場合、リクエストが増加してもLambda関数はスケーリングされず、関数の失敗が増加します。 AWS Lambdaは現在、不十分なENIまたはIPアドレスが原因で発生したエラーをCloudWatchログに記録しません。対応するCloudWatchログがないとエラーが増加する場合は、 Lambda関数を同期的に呼び出して、エラー応答を取得できます(たとえば、コンソールがLambda関数を同期的に呼び出してエラーを表示するため、AWS LambdaコンソールでLambda関数をテストします)。

6
raevilman