サーバーレス(cloud functions)のIPアドレスがどうなっているのか気になったので検証
背景
スクレイピングはEC2などのインスタンスからやるのが通常かと思っていましたが、それ以外にも、サーバーレス(cloud functions
)からpuppeteer
+headless chrome
を使用してスクレイピングが可能なのことを最近知りました。
サーバーレスだと固定IPが付けられなく、IPも変動するのが通常のような感じがします。疑問に感じたので、サーバーレスのIPアドレス変動
の実態について検証します。
※ cloud functions
から外部サイトへのアクセスは無料のspark
プラン以外からでないとできません。
IPを調べる方法
外部IP
だけで十分ですが、せっかくなので外部IP
と内部IP
の両方を確認してcloud functions
のことをもっと知りたい!
内部IPはos
モジュール、外部IPはIPアドレスを表示してくれるWEBサイトを叩いて表示されたIPを取得します。
構成とソースをちょっと解説
構成とか
-
firebase init --only functions
でfunctions
を作成
-
npm install --save puppeteer os
で今回使用するモジュールをインストール
puppeteer
でWEBサイトをスクレイピングして.outIp
クラス=IPアドレスを取得する
os
モジュールを利用して内部IPを取得
console.log
でos
モジュールの結果と.outIp
の出力を入れる
functions.region('foo')
でマルチリージョンに展開
firebase deploy
!
ソース抜粋
const puppeteer = require('puppeteer');
const os = require('os');
// firebaseのexport
// puppeteerの初期化処理 pageオブジェクトが外部サイトの構造を持っている
let item = await page.$(".outIp");
let outerIp = await (await item.getProperty('textContent')).jsonValue();
let innerIps = os.networkInterfaces();
console.log("============================");
console.log("Outer Ip Adress is" + outerIp);
console.log("Inner Ip Adress is" + innerIps);
// マルチリージョンに展開する
firebase init --only functions
でfunctions
を作成npm install --save puppeteer os
で今回使用するモジュールをインストールpuppeteer
でWEBサイトをスクレイピングして.outIp
クラス=IPアドレスを取得する
os
モジュールを利用して内部IPを取得
console.log
でos
モジュールの結果と.outIp
の出力を入れる
functions.region('foo')
でマルチリージョンに展開
firebase deploy
!
const puppeteer = require('puppeteer');
const os = require('os');
// firebaseのexport
// puppeteerの初期化処理 pageオブジェクトが外部サイトの構造を持っている
let item = await page.$(".outIp");
let outerIp = await (await item.getProperty('textContent')).jsonValue();
let innerIps = os.networkInterfaces();
console.log("============================");
console.log("Outer Ip Adress is" + outerIp);
console.log("Inner Ip Adress is" + innerIps);
// マルチリージョンに展開する
これでcloud functions
のURLを叩けば、ログに外部IPと内部IPが出力される関数ができました。ローカルで動作確認をして、firebase deploy
を実行。
※ 256MBだと実行時にmemory error
になってしまうので、functions.runWith({memory: '512MB'}).
を追加しました。
結果
外部IP
1-4回目: 約2分間隔
5回目: 約5分間
6回目: 約10分間隔
7回目: 約30分間隔
8回目: 約3時間間隔
9回目: 約1日間隔
10回目: 約2日間隔
us-central1 | us-east1 | us-east4 | europe-wast1 | europe-west2 | asia-east2 | asia-northeast1 | |
---|---|---|---|---|---|---|---|
1回目 | 107.178.239.204 | 107.178.239.245 | 107.178.229.223 | 107.178.238.124 | 107.178.231.62 | 35.203.253.255 | 107.178.234.88 |
2回目 | 107.178.232.166 | 107.178.200.177 | 107.178.229.254 | 107.178.238.124 | 107.178.231.62 | 35.203.253.255 | 107.178.234.28 |
3回目 | 107.178.239.204 | 107.178.200.177 | 107.178.229.254 | 107.178.238.124 | 107.178.231.95 | 35.203.253.255 | 107.178.234.28 |
4回目 | 107.178.232.166 | 107.178.200.177 | 107.178.229.254 | 107.178.238.124 | 107.178.231.95 | 35.203.253.255 | 107.178.234.28 |
5回目 | 107.178.232.166 | 107.178.200.177 | 107.178.229.254 | 107.178.238.124 | 107.178.231.62 | 35.203.253.255 | 107.178.234.28 |
6回目 | 107.178.232.166 | 107.178.239.245 | 107.178.229.223 | 107.178.238.105 | 107.178.231.19 | 35.203.253.255 | 107.178.234.150 |
7回目 | 107.178.200.231 | 107.178.239.245 | 107.178.229.223 | 107.178.238.105 | 107.178.231.19 | 35.203.254.16 | 107.178.234.150 |
8回目 | 35.203.245.117 | 107.178.239.245 | 107.178.229.220 | 107.178.238.105 | 107.178.231.19 | 35.203.253.240 | 107.178.234.146 |
9回目 | 107.178.231.237 | 107.178.200.191 | 107.178.229.220 | 107.178.238.105 | 107.178.231.50 | 35.203.253.240 | 107.178.234.149 |
10回目 | 35.203.245.181 | 107.178.239.241 | 107.178.229.250 | 107.178.206.31 | 107.178.231.51 | 35.203.253.251 | 107.178.234.149 |
内部IP
とれませんでした。。理由はよくわからないです。
まとめ
ある程度IPレンジはあるもののちょいちょい変動していることがわかりました。
法則性は今回の検証だけではちょっとわからなかったです。googleの中の人しかわからないか..?
IPのレンジや変動するタイミングなどご存じの方いれば情報共有お願いします。
※ 曜日間隔も試したいので継続して更新します。
Author And Source
この問題について(サーバーレス(cloud functions)のIPアドレスがどうなっているのか気になったので検証), 我々は、より多くの情報をここで見つけました https://qiita.com/qeema/items/86a810ddb3da7b684ea9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .