2016-03-03 10 views
8

あるドメインのすべてのトラフィックを別のドメインにリダイレクトしようとしています。このジョブ専用のサーバーを実行するのではなく、リダイレクトを実行するためにAWS API Gatewayをラムダで使用しようとしていました。AWS APIゲートウェイでワイルドカードまたはキャッチオールパスを使用することは可能ですか

私はルートパス "/"ではこれがうまく動作していますが、サブパスに対するリクエストはありません。/aは処理されません。 「すべてをキャッチする」リソースまたはワイルドカードパスハンドラを定義する方法はありますか?

答えて

11

は先週の時点で、API Gatewayは、今、彼らは「キャッチオールパス変数」と呼ぶものをサポートしています。

完全な詳細とウォークスルーここに:あなたが/{thepath+}のようなパスを持つリソースを作成することができますAPI Gateway Update – New Features Simplify API Development

+0

2018年には、@ geekQの回答(https://stackoverflow.com/a/40608247/347777)をご覧ください。真のキャッチオール(/ a/b/c/d/...と一致する)が可能になりました。 – Viccari

1

パス変数が​​のリソースを作成できます。これをワイルドカードパスハンドラとして扱うことができます。

おかげで、 - カー侯

+0

おかげで、あなたは、これは、ネストされたパスで動作するかどうか知っていますか?つまり/ {param}を使用すると/ aと一致しますが、/ a/b/cと一致するかどうかはわかりません。私はすべてのトラフィックをリダイレクトしようとしているので、/ *またはそれと同等のことを言うことが理想的です。 '/ {param}'のリソースを定義する –

+1

はネストされたパスを処理しません。 など。 '/ something'は一致しますが、'/something/else'はリソース '/ {param} 'と一致しません –

+1

これは正しいです。 APIゲートウェイは現在複数レベルのパスをサポートしていません。 –

8

更新:先週の時点で、APIゲートウェイは、今、彼らは「キャッチオールパス変数」と呼ぶものをサポートしています。 API Gateway Update – New Features Simplify API Developmentを参照してください。


残念なことに、各レベルのリソースを作成する必要があります。この理由は、API Gatewayを使用して、オブジェクトを介してそれらのパラメータにアクセスできるようにするためです。例えば

method.request.path.XXXX

をので、あなただけの​​あなたがそれにアクセスすることができなかった場合:method.request.path.paramいますが、ネストされたパス(スラッシュ付きのparams)を持っていた場合、それは動作しません。あなたはまた、全体の要求に対して404を得るでしょう。

method.request.path.paramが代わりに配列だった場合は、名前が付けられていないと位置によってパラメータを取得できます。たとえば、method.request.path.param[] ...名前付きパラメータはそこでも処理できますが、アクセスは簡単ではありません。何らかのJSONパスマッピングを使用する必要があります(マッピングテンプレートを使ってできるように考える)。悲しいことに、これはAPIゲートウェイでどのように処理されるかではありません。

これはAPIゲートウェイの設定をさらに複雑にする可能性があるため、問題ありません。しかし、APIゲートウェイも制限されています。このような状況に対処するためには、最終的にはもっと混乱した設定になります。

だから、ここには長い道のりがあります。複数のリソースに対して同じメソッドを作成し、/{1}/{2}/{3}/{4}/{5}/{6}/{7}などのようにします。必要に応じて、各パスパラメータレベルを処理できます。

パラメータの数が常に同じ場合は、少し幸運なことですが、多くのリソースを設定する必要がありますが、最後には1つの方法しかありません。

ソース:https://forums.aws.amazon.com/thread.jspa?messageID=689700&#689700

+1

先週、API Gatewayは「Catch-All Path Variables」と呼ばれるものをサポートします:https://aws.amazon.com/blogs/aws/api-gateway-update-new-features-simplify-api-development/ –

+1

また、 'ANY'リクエストと'/{proxy +} 'を使うこともできます。ワイルドカードパスだけでなく、ワイルドカードHTTPメソッドもサポートされています。\ o/ – Tom

2

。プラス記号は重要です。次に、あなたのラムダ関数であなたが

  • event.pathの両方で値にアクセスすることができます

    は - 常にフルパス

  • またはevent.queryPathParameters.thepathが含まれている - あなたによって定義された部分が含まれています。その他の可能な使用例:/images/{imagepath+}のようなリソースを定義すると、特定の接頭辞を持つpathesにのみ一致させることができます。変数には、サブパスのみが含まれます。

あなたがして、あなたの関数に渡されるすべての値をデバッグすることができますJSON.stringify(event)

Full documentation

関連する問題