2016-12-29 12 views
3

内APIのポスト呼び出しを行うためにPythonの要求モジュールを使用してい私の開発環境では、これはポストが成功したことを示す、次の値を返します。AWSクラウドウォッチログでトラブルAWSラムダ

starting API request... 
<Response [201]> 
{"opportunity_id":253,"pdf":"https://s3.storage.asset.com:443/253/253___PDF.pdf?Signature=[CONFIDENTIAL STUFF HERE ;)]"} 

、POSTリクエストを実行しようとすると、しかし、プロセスがハングアップします。

starting API request... 
END RequestId: beedb0c4-ce07-11e6-a715-53b3bd8edccc 
REPORT RequestId: beedb0c4-ce07-11e6-a715-53b3bd8edccc Duration: 30002.89 ms Billed Duration: 30000 ms Memory Size: 128 MB Max Memory Used: 22 MB 
2016-12-29T20:46:24.356Z beedb0c4-ce07-11e6-a715-53b3bd8edccc Task timed out after 30.00 seconds 

S3バケット、APIエンドポイント、およびRDSはすべて同じVPCに属しています。プロセスはdevで動作しますが、プロダクションではハングします。どのようにこれをデバッグする上の任意のポインター?

this post私は、外部のインターネットリソースへの接続にNATゲートウェイが必要だが、APIエンドポイントは同じVPC内のEC2インスタンス上で実行されていると確認しました。 AWSはAPIコールを使用しているため、外部接続を確立しようとしていると考えていますか?これをどのようにデバッグするのですか?

+0

ここでは、外部者の視点からここに移動するには十分ではありません。私はちょうどあなたのdevとセットアップをprod ...の違いを確認し、あなたがした仮定が正しいことを確認します。 – Jack

+1

APIが動作しているEC2サーバーのプライベートIPを使用していることを確認する必要があります。パブリックIPを使用している場合は、VPC外に存在するリソースとして扱われます。また、EC2サーバーが属しているセキュリティグループを開いて、ラムダ機能からのアクセスを許可しました(ラムダ機能が属するセキュリティグループのIDを介して)? –

+0

@マークB:これは本当に役に立ちます、ありがとう、私はそれがそういうものかもしれないと心配しました。問題は、Jenkinsで設定されたEC2インスタンスでアプリケーションを実行していることです。ロードバランスは、着信要求のヘッダーを読み取り、パブリックドメイン名に基づいて適切なアプリケーションを呼び出します。プライベートIPに切り替えると、ロードバランサは呼び出すアプリケーションを認識しません。ロードバランサのルールをカスタマイズするか(それがどれくらい簡単か分かりません)、専用のインスタンスを作成するかのように思えます。どう思いますか? – Aaron

答えて

1

同じtimeout problemに遭遇したのは、以下の理由による。

AWS document

あなたはラムダ関数にVPCの設定を追加すると、それができることをVPCでのみアクセスリソース。ラムダ関数がVPCリソースとパブリックインターネットの両方にアクセスする必要がある場合、VPCはVPC内にNAT(Network Address Translation)インスタンスを持つ必要があります。

Mark Bのコメントは正しくありません。

このアドバイスに従うと、blogにNATを組み込むことができます。

+0

ありがとう、@ジンリン、あなたとマークBにスポットがあります。 VPCはこの問題を解決する最も簡単な方法でした。 – Aaron