LoginSignup
1
0

More than 5 years have passed since last update.

HerokuのQuotaGuard Staticアドオン

Last updated at Posted at 2019-02-01

参考 - https://devcenter.heroku.com/articles/quotaguardstatic

まずは無料プランをProvisionしてみる

C:\>heroku addons:create quotaguardstatic:starter
Creating quotaguardstatic:starter on ⬢ <アプリ名>... free
Your static IPs are [<IPアドレスその1>, <IPアドレスその2>]
Created quotaguardstatic-XXX as QUOTAGUARDSTATIC_URL
Use heroku addons:docs quotaguardstatic to view documentation

C:\>heroku config | find "QUOTAGUARDSTATIC_URL"
QUOTAGUARDSTATIC_URL:         http://<ユーザ名>:<パスワード>@<リージョン?>-static-XXX.quotaguard.com:<ポート番号>

上記のQUOTAGUARDSTATIC_URLにブラウザでアクセスするとThis is a proxy server. Does not respond to non-proxy requests.と表示された
ということはOutbound通信時に通すProxyかな(そうであればProximoから乗り換えできるかな)

Herokuのアプリ画面のアドオン一覧からQuotaGuard Staticの管理画面(※1)に進むとPrivacy Agreementへの同意を求められる
(管理画面には heroku addons:open quotaguardstatic でも行ける)
AgreeにチェックしてSave押下するとDashboard画面が表示される

<IPアドレスその1><IPアドレスその2>にブラウザでアクセスすると「アプリが見えると思った?もうちょっと設定が必要だよ」的なメッセージが表示される
以後、heroku addons:docs quotaguardstaticでドキュメントを読みながら作業

先日ProximoでOutbound通信はできるようになっていた( https://qiita.com/pilot/items/35675c6a50ba9cc364ee )し、URLの形式も末尾にポート番号がつく以外は同じなので、参照する環境変数をPROXIMO_URLからQUOTAGUARDSTATIC_URLに変えてアプリを動かしてOutbound通信(Salesforce API呼出)をしてみたところ、Salesforce側のログイン履歴に<IPアドレスその1>または<IPアドレスその2>からのアクセスが表示されたのでうまく行った模様

QuotaGuard StaticのInbound ProxyはMicro以上のプランでないと使えないのでまた後日試す


以下、MicroプランでのInbound Proxy確認結果

https://dashboard.heroku.com/apps/<アプリ名>/resources にて、QuotaGuard StaticのModify PlanでMicroを選択してアップグレード実行

QuotaGuard Staticの管理画面(※1)にて右上のSettingsドロップダウンからSetupに進んで左側のInboundを押下、Create Inbound Proxyを押下(※2)、
Forwarding URL欄に現在のHerokuアプリのURL(※3)を入力( https://<アプリ名>.herokuapp.com ) してSaveを押下すると、Inbound ProxyのURL(※4)とそれをHerokuに伝えるためのheroku domains:addコマンド(※5)と「That Works For Me」ボタン(※6)が表示される

Windowsのコマンドプロンプトにてheroku domains:addコマンド(※5)を実行、
表示されたheroku domains:waitコマンドを実行 ※Windowsなのでシングルクォートをダブルクォートに書き換えた上で
しかし何故か「ACM is failing for 1 domain name (Incorrect DNS Settings)」とのエラーになるので、結局heroku domains:removeコマンドで削除してしまったが、動作に問題なし

ブラウザでInbound ProxyのURL(※4)にアクセスするとアプリの画面(※7)が見える
ただし、Create Inbound Proxyを押下(※2)してすぐだとまだ駄目なので、ちょっと時間をおいてから(最大10分)アクセスすればアプリの画面が見える
既存のURL(※3)でもアクセス可能
nslookupコマンドでInbound ProxyのURL(※4)内のドメインのIPアドレスを調べると、無料プランで発行されたアドレス2個と一致した

アプリ画面が見えたので「That Works For Me」ボタン(※6)を押しておく

以上

<追加1>
実はこの時点で見えたアプリの画面(※7)は https://qiita.com/pilot/items/11efce99be33f17f5bc3 による接続元IPアドレスチェックに引っかかったことによるエラー画面

QuotaGuard StaticのInbound Proxyを経由した場合、
request.getRemoteAddr()ではQuotaGuard Staticのアドレスが取得できるだけ
本当の接続元IPはX-Forwarded-Forヘッダで取得する

なので、接続元IPアドレスチェックを「X-Forwarded-ForヘッダがあればそのIPをチェック」と変更した

<追加2>
QuotaGuard StaticのInbound ProxyはSession Affinityと一緒に使用できない!
(Session Affinity用のSet-CookieヘッダにDomainとしてXXX.herokuapp.comが指定されているため。Domainの書き換えには対応できないとのこと。こねくり回してなんとなく動かしたがいまひとつ)

<追加3>
iPadで写真(2MBほど)を撮ってアプリにアップロードしようとするとエラー
https://qiita.com/pilot/items/9badd3e94fe48af1adb5 で調べるとどうもQuotaGuard Static Inbound Proxyのnginxから413 Request Entity Too Largeが返っている
nginxのリクエストサイズ制限はデフォルトで1MB
Herokuサポートにチケットで制限緩和を依頼したら512MBに設定変更してくれてエラーは解消した

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0