2016/04/01

AppEngineで簡単WANアドレス取得アプリ作成

昔 Google App EngineでWANアドレス管理サーバー なんて記事を書いたが、今回は最も簡単な方法で作ってみる。管理いらずの方法で目的は果たせる。

前回、Google Cloud Platformでプロジェクト作成してGitホスティングする記事を書いたが、そこまでは同じ。

プロジェクトのダッシュボードへ行く。
(AppEngineのダッシュボードはアプリ稼働させてから行くところ)

「Try App Engine」をクリックして、"Hellow World"アプリ作成とデプロイまでのチュートリアルをスタートさせる。

どの言語を使用するかだが、Java、Python、PHP、Go の4つが無料枠で使用できる。
そのうちのお好みの言語で。
ブラウザはChromeがいいかも。Firefoxでやったらコピペしたい文字列が空欄になった・・

ここでは最も簡単なPHPとGoでやってみる(だけど自分でコードは一切書かない)

「PHPのチュートリアルを開始する」で開始すると右側にチュートリアルが出てくる
「次へ」
「プロジェクトを作成する」 前記事の要領で
「次へ」
左上のサービスメニューから”開発”を選択 (言う通りにしないとチュートリアルが進まない)
「次へ」
ソースコードリストから"app.yaml"ファイルをクリックしてオープンする
”/”をクリックしてリストへ戻る (という手順のチュートリアルなのだ)
「次へ」
Google Cloud Shellを起動 (ナビバーの「>.」アイコン)
"show me how"というリンクをクリックすればどこをクリックすればいいのか教えてくれる。
初めての起動だと、インスタンスの構築に若干時間がかかる。2016年末まで無料だそうな。

Shellで
$ cd src/(project ID)/gcloud でクローン済みのリポジトリへ移動
チュートリアルに表示されている文字列をShellへコピペ実行でもOK
「次へ」
$ gcloud preview app deploy でデプロイする
チュートリアルに表示されている文字列をShellへコピペ実行でもOK
「次へ」もしくはチュートリアルキャンセル
チュートリアルはAppEngineのダッシュボードでステータス表示と続くが、この辺でキャンセルしてもいい。

WANアドレス表示アプリに改造

”開発”ダッシュボードからhelloworld.phpをクリック
「編集」で編集モードに
'Hello, world!' を $_SERVER['REMOTE_ADDR'] に書き換え
commit」でコミットする
Google Cloud Shellで
$ git pull する
$ gcloud preview app deploy でデプロイする

Goでも流れは同じだけど、Shellで編集する流れにすると
$ emacs hello/hello.go (なんとCloud ShellでEmacsが最初から使えるよ!)
handlerメソッドの fmt.Fprint(w, "Hello, world!") を fmt.Fprint(w, r.RemoteAddr) に変更
キーバインドが違うんでカーソル移動が厳しいか・・・
$ gcloud preview app deploy (デプロイ)
一応commit&pushも
$ git config --global user.email "my_name@gmail.com" (セットしてなければ)
$ git config --global user.name "my name" (セットしてなければ)
$ git commit -a -m "メッセージ"でコミット
$ git push origin
プレビュー確認
$ goapp serve  (Goのチュートリアルやると分かるがCloudShellからテストサーバー起動出来る)
Shellウインドウ左端の「ウェブでプレビュー」アイコンクリックすると表示される

https://(プロジェクト ID).appspot.com へアクセスするとWANアドレスが表示される

チュートリアルでGoogle Cloud Shellを使う流れになっているけど、2017年になったらどういうチュートリアルになるんだろ?素朴な疑問

javaの場合は
$ mvn gcloud:run テストサーバー起動
$ mvn gcloud:deploy デプロイ
忘れそうなので書き残しておく

gcloudブランチ
チュートリアルから作成したリポジトリは、masterではなくgcloudブランチを使う流れになっている。
masterとgcloudブランチの違いは、app.yamlファイル。
masterにはapplication: ~と version: ~の記述が冒頭にあるけど、gcloudブランチには無い。

試しにmasterブランチをgcloudデプロイしてみたら、applicationとversion記述はもう要らぬ!と怒られてデプロイできなかった。


ログからWANアドレスを知る

自宅以外の場所から自宅の現在のWANアドレスを知ために、以前は今回のようなアプリに更にアドレスをアプリで保存管理出来るようにしたり、変更された際にはメール通知するとか色々めんどくさいことをしていた。

今回は最も簡単(いい加減?)な方法で確実に知ることが出来る方法だ。

「ツールとサービス」メニューから”Stackdriverのログ"から、GETリクエストログの1つを開けてみれば、その先頭にWANアドレスが書かれている。

Stackdriverサービスのログリスト観覧だけなら、これも無料枠で大丈夫。

cron/crontabで定期的にwgetでアクセスさせておく。認証もしないシンプルアクセス

我が家のサーバーへアクセスしたくなった時、このログを出先で確認すればいいのです。
もう認証やらメール通知やら、小難しいことしないでも十分実用になっております。

懸念点としては、攻撃にあって通信量で無料枠オーバーとか不特定多数のログが多すぎて
自分のアクセスが見つからない・・・とか?
今のところその心配は皆無です。自分以外のアクセスは0です。

ログを見れば分かるからAppEngineアプリもHelloWorldのままでいいじゃんとも思うが、
外でも仕事で今のWANアドレス(GWはどれ通ってる?)知りたい時に手軽に利用できるんで
表示させるだけでも便利なのです。

0 件のコメント:

コメントを投稿