GoとGCEで小さなWebアプリケーションを構築する(1) ~とりあえずGCE上で動かしてみるの巻~
久々に書きます。 今日はお仕事ネタではなく、Golangの話題についてです。
ひと月ほど前に友人からこんな本を頂きました。ほんとありがとね。
Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ
- 作者:Sau Sheong Chang,武舎 広幸,阿部 和也,上西 昌弘
- 発売日: 2017/03/17
- メディア: Kindle版
一通り遊んだので、そろそろアウトプットしていきたいと思います。
この記事の目的
以下のようなWebサイトをWWW(この世のすべて)に公開することです。
もちろん、ここで終わりにするつもりはなく、 簡単なDB連携やES、JSONでのREST通信的なものも書いてみるつもりです。ネタは豊富です!
あと、誰かが見れるようにした方が楽しいと思ったので、あえてデプロイまでつっこみます。Golangなら、デプロイ自体はとても簡単ですよ。
※セキュリティには配慮しつつ書きますが、どうしても知識不足なところはあると思います。
このエントリだけでなく、他記事からも情報を仕入れつつ、慎重にデプロイしてください。
使うお道具
- Windows
- Google Compute Engine (GCE)
- Visual Studio Code
- 今回は実施しないですが、GCE上に置いておくこともできたりします。
- gopherの皆様にも人気のエディタです。
- (参考:Go Developer Survey 2019 Results - The Go Blog)
- Golang
- 今回のWebアプリケーションを実装してくれる言語です。
手順
GCEを整える
GCEは、マシンタイプ f1-micro
であれば、無料で使えます。
会員登録等は省略します。
まず、こちらにアクセスし、必要事項を記入しましょう。
右上にお金かかりそうなことが書いてありますが、この構成の1台のみならば、お金は発生しないはずです。 発生したらごめんね。
SSHの設定
当方、Windowsなので、PowerShell(OpenSSH)にてSSH公開鍵作成&SSH接続をしてみます。
4096bitのrsa暗号鍵ペアを作ります。 -f
オプションは適宜変更してください。
PS >ssh-keygen -t rsa -b 4096 -f C:\Users\(あなたのおなまえ)\.ssh\id_rsa_test
指定したパスに次のファイルができます。
拡張子なしのファイルは秘密鍵です、動かしてはなりません。誰かに悟られてはいけません。 .pubを公開鍵といいます。これをGCE上に置きます。
GCEコンソールに戻って、作成したVMインスタンスをクリック、 上タブの「編集」をクリックして、.pubファイルの中身をコピペします。
では、PowerShellで接続してみましょう。
PS> ssh (あなたのおなまえ)@VMインスタンスの外部IP -i c:/users/(あなたのおなまえ)/.ssh/id_rsa_test -p 22
これで環境設定は終了です。と言いたいところですが、次のファイアウォールの設定は絶対にしておきましょう。
ファイアウォール
ここが詳しいです。必ず設定しましょう。 22ポートを開放していると、世界中の怖い人がたくさん訪問してきますよー^^ eightyfivelife.com
また、同様の設定でHTTP通信のポートも制限しておくといいかもしれません。
これで、環境設定は終了です。
Goのインストール
他にたくさん文献がありますので、省略します。
この辺りを見たらできるんじゃないんでしょうか。
テキストエディタにてファイル編集
環境変数GOPATH以下が、Golangの主なワークスペースです。 Golangに付属するコマンドは、大体ここを見ながら動きます。
さあ、初めてのWebアプリを書きましょう(ここまで記事を書くのに3時間)。 いまは、Golangの文法等については気にしなくて結構です。
%GOPATH%\src\first_webapp\server.go
package main import ( "fmt" "net/http" ) func handler(writer http.ResponseWriter, request *http.Request) { fmt.Fprintf(writer, "Hello World, %s", request.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
Goを コンパイルする
まず、Goのワークスペースフォルダに移動して、 上記で作成したプロジェクト「first_webapp」を初期化します。
PS> cd $env:GOPATH PS> go install first_webapp
Goをビルドしてできたバイナリは、別OS上では動作しません。 しかし、環境変数を設定することによって、Linux用のバイナリを作成することが可能です。
PS> $env:GOOS = "linux" PS> $env:GOARCH = "amd64"
ビルドの時は、いつの間にか出来ているbinフォルダに入って行います。
PS> cd bin PS> go build first_webapp
さ、これでバイナリが出来上がっています。
あとはこのバイナリをSCP送信して、実行します。
PS> scp -i (秘密鍵) (goのバイナリ) (外部IP):~/
bash: first_webapp
WEBページにつないでみましょう。 開発用にポートを∶8080にしたことに注意してください。
これで、晴れて世界デビューです。おめでとうございます。
詳しい解説は、また別日に!!