やりたいこと
1.自サービスから、IP制限のある外部APIに接続したい
2.自サービスはGAEで動いており接続元IPが固定できないので、GCEを中継サーバ + Cloud NATで出口のIPを固定
3.自サービス(GAE)→中継サーバ(GCE)はサブドメインを用意し、SSL接続したい
簡単に図にすると・・・
※「internet」の前段には自サービス(GAE)が居ます
GCEインスタンスグループの設定
まずインスタンステンプレートを作成し、そのテンプレートを元にインスタンスグループを生成します。
インスタンスグループ作成時、オートスケールする/しない や インスタンス数(スケールしない場合のみ)を選択します。
デプロイ時、ダウンタイムを発生させたくない場合ローリング更新を行います。
ローリング更新するとき、【リージョンの数 > インスタンス数】にしておかないと、同時に全部更新されます。
(1リージョンに対して2つ以上のインスタンスが配置されているリージョンが最低1つ必要?)
Cloud Load Balancingの設定
バックエンドの設定
新たにバックエンドサービスを作成します。
先ほど作成したGCEインスタンスグループを選択します。
今回の場合、APIが8080で起動しているので、ポートは8080としました。
バックエンドサービス作成時、ヘルスチェックを新規作成します。同じくポートは8080としました。
ホストとパスのルール
今回はデフォルトのままとしました。
フロントエンドの設定
IPを固定する場合、外部IP アドレスを開き、IPアドレスを確保してからフロントエンドに割り当てます。
(IP固定しない場合エフェメラルを選択します。)
HTTPSプロトコルにしたい場合、既存の証明書をアップロードするかSSL証明書を新規作成します。
今回は、先程確保した固定IPアドレスに対して、ドメインを紐づけてあるので、その情報で証明書を新規作成します。
完了ボタンを押してしばらく待ちます。
ロードバランサの詳細を開いて、バックエンドの「n/n個のインスタンスが正常です」と表示されていれば成功です。
ファイアウォールの設定
※ロードバランサから各インスタンスへのヘルスチェック時、ヘルスチェックのソース元IPアドレスを許可しないといけません。
IP範囲は公式ドキュメントに記載されています。
https://cloud.google.com/compute/docs/load-balancing/health-checks?hl=ja
Cloud NATの設定
インスタンスグループが外部に出ていくときのIPアドレス=NATのIPアドレスとなるように設定をします。
Cloud Routerの選択で、
・VPCネットワーク(今回はdefault)
・リージョン(任意のリージョン)
・Cloud Router
を入力し、作成を完了させます。