ワークに紹介しましたモバイルアクセスプラットフォームを構築したときのアイデアです。
AWS上でシステムが完結すれば良いのですが、オンプレのシステムにアクセスする必要がある時、APIGateway – Lambda – VPC – ALB/NLB – ダイレクトコネクト – プライベートネットワークのような形になろうかと思います。
オンプレのWebシステムがシンプルなWebサービスやマイクロサービスであれば特に問題ありませんが、通常の画面を返すようなWebサイトだと、html上のリンクがオンプレ上のアドレスや相対パスになっていたり、リダイレクトを指示しているケースがあります。その場合、当然ですが、アクセス元のブラウザに正しく表示されません。更にヘッダー等でトークン等を認証している場合もあります。
基本的には「インターネット→API Gateway(※greedy パス変数を設定)→ (VPC Link) → VPC内 Network LoadBalancer → (Direct Connect) → オンプレWeb サイト」の流れになるでしょう。
自分がコントロールしているシステムであれば対応もさほど難しくは無いのですが、色んなパッケージ製品やERP、他社でSIされたシステムが対象となると「サポート対象外です」とか言われて、情報提供してくれません。Chromeで取得したHARファイルから拾うしかなく大変でした。
最終的には①greedyパス変数②受信リクエスト(ヘッダー、パス)とレスポンスコードのマッピング③特定の条件下のクエリパラメータをパスの書き換えで変換するの方法でクリアすることが出来ました。
少し③について説明します。HTTP APIのパラメータマッピングではすべての受信リクエストに対して変換が適用されるので、特定条件の場合のみパラメータを追加したいというような対応が出来ません(当時はそのようにAWSから回答頂きました。機能要望としてはあげてもらいましたので、今は可能になったかも?)。
クエリパラメータであることから、パラメータを含めたパスの書き換えで行ってみたところ、問題なく特定の条件下でパラメータの追加の有無が可能になりオンプレシステムにも連動できました。パラメータのマッピングをパスのマッピングで/aaa?prm01=val01&prm02=val02のように上書きするって感じです。念の為AWSにも確認しましたが、問題ありませんと回答頂きました。
その他以下のことがわかりました。
- VPCリンクを使用するとき、NLB DNS 名の設定がある。デフォルトではhttpはOKだが、httpsにする場合はNLB 側で TLSのリスナー設定が必要(内部ネットワークなのでhttpで不都合はない)。
- VPCLinkと接続されたNLB 、VPCピアリングを経由する構成においても、別 VPC 内に配置されたリソースよりレスポンスを受け取ることは可能。