Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9233

サーバーレス(cloud functions)のIPアドレスがどうなっているのか気になったので検証

$
0
0

背景

スクレイピングはEC2などのインスタンスからやるのが通常かと思っていましたが、それ以外にも、サーバーレス(cloud functions)からpuppeteer+headless chromeを使用してスクレイピングが可能なのことを最近知りました。
サーバーレスだと固定IPが付けられなく、IPも変動するのが通常のような感じがします。疑問に感じたので、サーバーレスのIPアドレス変動の実態について検証します。

cloud functionsから外部サイトへのアクセスは無料のsparkプラン以外からでないとできません。

IPを調べる方法

外部IPだけで十分ですが、せっかくなので外部IP内部IPの両方を確認してcloud functionsのことをもっと知りたい!
内部IPはosモジュール、外部IPはIPアドレスを表示してくれるWEBサイトを叩いて表示されたIPを取得します。

構成とソースをちょっと解説

構成とか

  1. firebase init --only functionsfunctionsを作成
  2. npm install --save puppeteer osで今回使用するモジュールをインストール
  3. puppeteerWEBサイトをスクレイピングして.outIpクラス=IPアドレスを取得する
    image.png

  4. osモジュールを利用して内部IPを取得

  5. console.logosモジュールの結果と.outIpの出力を入れる

  6. functions.region('foo')でマルチリージョンに展開

  7. firebase deploy!

ソース抜粋

constpuppeteer=require('puppeteer');constos=require('os');// firebaseのexport// puppeteerの初期化処理 pageオブジェクトが外部サイトの構造を持っているletitem=awaitpage.$(".outIp");letouterIp=await(awaititem.getProperty('textContent')).jsonValue();letinnerIps=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分間隔
7回目: 約3時間間隔

us-central1us-east1us-east4europe-wast1europe-west2asia-east2asia-northeast1
1回目107.178.239.204107.178.239.245107.178.229.223107.178.238.124107.178.231.6235.203.253.255107.178.234.88
2回目107.178.232.166107.178.200.177107.178.229.254107.178.238.124107.178.231.6235.203.253.255107.178.234.28
3回目107.178.239.204107.178.200.177107.178.229.254107.178.238.124107.178.231.9535.203.253.255107.178.234.28
4回目107.178.232.166107.178.200.177107.178.229.254107.178.238.124107.178.231.9535.203.253.255107.178.234.28
5回目107.178.232.166107.178.200.177107.178.229.254107.178.238.124107.178.231.6235.203.253.255107.178.234.28
6回目107.178.232.166107.178.239.245107.178.229.223107.178.238.105107.178.231.1935.203.253.255107.178.234.150
7回目107.178.200.231107.178.239.245107.178.229.223107.178.238.105107.178.231.1935.203.254.16107.178.234.150
8回目35.203.245.117107.178.239.245107.178.229.220107.178.238.105107.178.231.1935.203.253.240107.178.234.146

内部IP

とれませんでした。。理由はよくわからないです。

まとめ

ある程度IPレンジはあるもののちょいちょい変動していることがわかりました。
法則性は今回の検証だけではちょっとわからなかったです。googleの中の人しかわからないか..?
IPのレンジや変動するタイミングなどご存じの方いれば情報共有お願いします。

※ 曜日間隔も試したいので継続して更新します。


Viewing all articles
Browse latest Browse all 9233

Trending Articles