質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon VPC

Amazon VPC(Amazon Virtual Private Cloud) は、仮想的なネットワークです。 独自の IP アドレスレンジの選択、サブネットの作成、ルートテーブル、 ネットワークゲートウェイの設定など、仮想ネットワーク環境を完全にコントロール可能です。

Q&A

解決済

2回答

4177閲覧

LambdaでVPC内のEC2のAPIにアクセスする方法を教えて頂けないでしょうか。

wasi300

総合スコア66

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon VPC

Amazon VPC(Amazon Virtual Private Cloud) は、仮想的なネットワークです。 独自の IP アドレスレンジの選択、サブネットの作成、ルートテーブル、 ネットワークゲートウェイの設定など、仮想ネットワーク環境を完全にコントロール可能です。

0グッド

1クリップ

投稿2019/06/27 02:21

いつもお世話になっております。
LambdaでVPC内EC2上で稼働しているアプリケーションに
GETリクエストを送りたいのですが、
テストするとタイムアウトしてしまい困っているので、
どなたか知見をお借りすることはできないでしょうか。

実現したいこと全体

ユーザから空メールを送信して貰い、
MXレコードでSESに空メールを転送し、SESの受信を契機に
Lambdaを動かし、EC2上にメールアドレスをGETで送りたいと思っています。
SESからLambdaが呼ばれるまでは確認できています。

空メール ⇒ Route53 ⇒ SES ⇒ Lambda ⇒ EC2(API) ⇒ メール送信

このようなフローを実現したいです。

発生している問題

VPC内EC2上に作成したAPIに対してGETリクエストを
node.jsの書いてあるLambdaから送信すると、
タイムアウトしてしまいエラーになります。

切り分け

セキュリティグループのインバウンドルールを

0.0.0.0/0

とすると、GETリクエストがEC2上に届くことが
ログを見ると確認できる。

わからないこと

  1. セキュリティグループに対して、Lambdaの許可をする方法
  2. インバウンドルールを全許可状態で、role等が全く同じLambdaをオレゴンリージョンのLambdaを動かすと
    200でOKになり、Lambdaが1度動くという想定通りの挙動をするのに対し
    東京のLambdaを実行すると、1秒間に5~9回Lambdaが実行されこと

お忙しいところ大変申しわけありませんが、どなたかご教示頂けないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

投稿2019/06/27 03:27

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wasi300

2019/06/28 01:01

ご回答頂きありがとうございます。 提示頂いた方法は、EC2と同じVPC内に VPCを存在させるという手法だと認識しております。 Lambda用のロールに、 VPCのポリシーがアタッチされているという前提での、 AWS上の具体的な手順としては 1. Lambdaの画面から関数を選択 2. 同画面のネットワークからVPC選択 3. VPCサブネットを選択 4. セキュリティグループを選択 5. 保存をクリック このとき3については、全てのサブネットを選択していて 4については、EC2で設定したセキュリティグループと同じものを設定しています。 この状態で、テストデータをEC2に向けてGET送っているのですが、 タイムアウトしてしまいます。タイムアウトは10秒に設定しています。 仮説1 設定して思ったのですが、これはLambda自身の保護をしていて、 セキュリティグループへのアクセス許可とは違うことをやっているように思えます。 仮説1の対応方法 このLambda自身のIPを許可するなり、ARNを許可する必要があると思っています。 対応方法への課題 ARNをセキュリティグループで許可する方法が存在するのかどうか不明なのと、 LambdaのIPを何処で把握すればよいのか分かりません。 ただ、Lambdaは毎回違うサーバーで動作していると思っているので、 IPは都度違うのではないかとも思っています。 下記について、教えて頂けないでしょうか。 1. 頂いた記事に対する私の対応は適切でしょうか 2. 仮説1は間違っていますでしょうか。 3. 仮説1の対応方法は適切でしょうか 4. 対応方法への課題の中の各サービスの中への認識は間違っていますでしょうか ご協力しても良いと思える場合のみ、ご助力下さい。 お忙しい中、ご回答頂き本当にありがとうございました。
guest

0

ベストアンサー

VPC 内で Lambda 関数を動かすということですので、Lambda 実行時のセキュリティグループを設定できると思います。
Lambda のセキュリティグループを EC2 側セキュリティグループで許可するといいと思います。
(セキュリティグループの Source には、IPアドレスではなく、他のセキュリティグループを設定できます。)

投稿2019/06/29 02:03

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaichiYanagiya

2019/06/29 15:27

Lambda と EC2 インスタンスのセキュリティグループが同じでも、許可ルールの設定(Source にセキュリティグループを設定)は必要です。
wasi300

2019/07/01 06:51

ご回答頂きありがとうございました。 早速セキュリティグループのインバウンドルールを編集し LambdaでhttpsでGETを送信しているので、 ポート443番に対して、sg-***********96 (****_dev) の許可を出した後、Lambdaでテストデータを送信しました。 結果はタイムアウトしてしまいました。 切り分けの為、httpでGETを送信して、 ポート80番に対して、sg-***********96 (****_dev) の許可を出した後、再度、Lambdaでテストデータを送信しました。 ただ、こちらもタイムアウトしてしまいました。 sg-***********96 (****_dev)に対してsg-***********96 (****_dev)を 許可しているのが問題なのかと思い、別のセキュリティグループを作成し、 同じ手順で443と80を許可してテスト実行しましたが、 結果はタイムアウトになってしまいました。 ネットワークインターフェースの設定を見ても、 両方のセキュリティグループが許可されているのが確認できているので、 私の方が、許可ルールの設定について認識違いしているのではないかと感じています。 許可ルールの設定についての認識違いはないでしょうか。
TaichiYanagiya

2019/07/02 13:33

文章ではわかりづらいのですが、たぶん、許可ルールは合っていると思います。
wasi300

2019/07/04 04:05

色々教えて頂きありがとうございました。 今回はどうしてもうまく行かないので、別の方法を検討しようと思います。 多分何か理解していない前提があるのだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問