Closed7
herokuで固定IPを使いたいのでaddon選定などのメモ
ピン留めされたアイテム
herokuのアプリケーションから特定のWebAPIに接続するときに固定IPであることが求められるケースがある。
有名なところでは LINE BOT は IP の allowlist を登録する仕組みであるために
固定IPである必要がある。
heroku はコンテナが立ち上がり直すたびにIPが変わる動的IPな仕組みであるために
なんらかの対応を取る必要がある。
基本的には固定IPを実現するための heroku add-on を導入することになる
なお、今回は無料プランに拘るつもりはないので無料プランの有無などについての情報が必要な方は
各add-onページなどを見てみてください
固定IP化に使えそうな heroku add-on
- Proximo
- Fixie
- QuotaGuard Static IP's
他にもありそげではある。
参考
- Network | Add-ons | Heroku Elements
ドキュメントを読む限り、
Fixie と QuotaGuard Static IP's はローカル開発環境からも使えそう。
Proximo は Proximo wrapper が必要& Procfile の更新が必要そう?
Proximo を使っている記事
- [Heroku]外部接続時に固定IP化する2つの方法[Proximo] | Qiita
- HerokuアプリからのOutboundIPを固定化するアドオンProximoをPython3で使う | Qiita
- カラーミーリピートをHerokuで開発/運用して得た知見 | ペパボテックブログ
- [Heroku] Guzzleを使用してProximo経由で接続する
Fixie を使っている記事
- LINE BOTを無料で試してみました。heroku + Rails | COTeggのバケツ
- LINE BOT をとりあえずタダで Heroku で動かす | Qiita
QuotaGuard Static IP's を使っている記事
- [heroku]QuotaGuard Staticを使ってHerokuでのIP固定を試してみる | KayaMemo
- HerokuのQuotaGuard Staticアドオン | Qiita
外部API(WebAPI) への接続は nahi / httpclient を使う予定なのでついでにメモ
proxy を使ったRequestの方法など
- nahi / httpclient | GitHub
- Class: HTTPClient | Documentation for httpclient (2.8.3)
- gem 'httpclient' を使用して外部API呼び出し | Qiita
- unsupported proxy in HTTPClient | Stack Overflow
- 備考
- Ruby HTTPクライアントの比較表 | Qiita
当然だが固定IPになってるかはやってみるしかない。
当初の目的と同じくWebAPIで確認できると嬉しい
- グローバルIP確認をコマンド化 | One IT Thing
- ip-api
つまり
http://ip-api.com/json/
に Request すればOK。
ローカルからなら
% curl http://ip-api.com/json/
Response の query
として取得できるIPが
CMAN で確認できるIPアドレスと同じなのが確認できるはず。
- アクセス情報【使用中のIPアドレス確認】 | CMAN
固定IP add-on を使う前のProxy確認はこの辺使えばできます(自己責任で!)
- Free Proxy List
結局 Fixie を採用した。
選定理由は以下
- ローカルでも使える
- ただし当然ながら月間リクエスト数にはカウントされるので使用制限には注意
- Proximo と比べるとWrapperが必要ない
Fixie の利用方法
- コンソールから
heroku addons:add fixie
、もしくは Heroku Dashboard から Fixie を追加 - heroku の環境変数に
FIXIE_URL
が追加されるので heroku のコンテナを再起動して読み込めるようにする -
gem httpclient
を使うなら以下のようにすることで利用可能
require 'httpclient'
class ApiClient
def execute()
proxy = ENV["FIXIE_URL"]
# proxy を指定
HTTPClient.new(proxy)
# http://ip-api.com/json/ にリクエストすることでIPを確認
result = client.get('http://ip-api.com/json/')
end
end
このスクラップは2021/10/31にクローズされました