目的
ただのいたずら心と好奇心です。
やったこと
まずは、GASがGAS自身(という表現が正しいかはわかりませんが)のグローバルIPアドレスを教えてくれるサービスを作りました。
グローバルIPアドレスの取得には、ifconfig.co/jsonを利用しました。
リクエストを投げると、グローバルIPアドレスを返してくれます。
また、プログラムからリクエストを投げるためにはURLFetchApp.fetchメソッドを利用しました。
//ifconfig.co/jsonへリクエストを投げる
var response = UrlFetchApp.fetch("https://ifconfig.co/json");
//レスポンスを受け取る
var rawJSON = response.getContentText();
//受け取ったJSONをパース
var parsed = JSON.parse(rawJSON);
//このWebサイトのレスポンス値としてそのまま受け取ったJSONを返す
return ContentService.createTextOutput(JSON.stringify(parsed)).setMimeType(ContentService.MimeType.JSON);
上記コードを書いた後、Webアプリとして公開します。
返ってきたレスポンス
自分で立てたWebサーバへアクセスしてみたところ
レスポンスが返ってきたので、一部伏せますがこんな感じでした。
{
"ip":"35.187.XXX.XXX",
"ip_decimal":599491999,
"country":"United States",
"country_eu":false,
"country_iso":"US",
"city":"Mountain View",
"latitude":37.4043,
"longitude":-122.0748,
"asn":"AS15169",
"asn_org":"Google LLC"
}
ここでやめておけばよかったのですが...。
興味本位でもう一度アクセスしてみると、なんとIPアドレスが変わってる!?
ついでに、レスポンスの内容が微妙に違う!
hostnameがついていてどうやらGAE(Google App Engine)上でホストされているらしい。
{
"ip":"107.178.XXX.XXX",
"ip_decimal":1806877999,
"country":"UnitedStates",
"country_eu":false,
"country_iso":"US",
"hostname":"135.194.XXX.XXX.gae.googleusercontent.com",
"latitude":38.6583,
"longitude":-77.2481,
"asn":"AS15169",
"asn_org":"Google LLC"
}
もう止まりません。
何度も何度もやっていると、時々1つ目の結果のような感じになることもあれば、
2つ目と同じIPアドレスだけどhostnameが微妙に違うとか、わけがわかりません。
{
"ip":"107.178.XXX.XXX",
"ip_decimal":1806877999,
"country":"United States",
"country_eu":false,
"country_iso":"US",
"hostname":"100.194.XXX.XXX.gae.googleusercontent.com",
"latitude":38.6583,
"longitude":-77.2481,
"asn":"AS15169",
"asn_org":"Google LLC"
}
考察兼まとめ
貧弱な知識で考えましたが、結局まともな考察はできませんでした。
Google Cloud Platformはちょくちょく弄っているのでなんとなくの察しはつきますが、
・CDN的なキャッシュサーバから応答が返ってきていることがある
・私が実際に立てているサービス自体が負荷分散されている
・GASが自体がFunction as a Service的な感じなので、そのときに都合の良いコンピュータ上で処理が行われている
ぐらいしか思いつきませんでしたが、そこそこ楽しかったです。