こんにちは、ゲームソリューショングループのsoraです。
今回は、GoでEC2上にWebサーバを構築して簡単なページを表示してみたことについて書いていきます。
本記事で紹介すること
- EC2へのGoのインストール
- GoでのWebサーバの実装
- 実行(HTMLページの表示)
EC2へのGoのインストール
EC2作成
まずはEC2を作るのですが、ほとんどデフォルト設定のため、設定を入れた部分のみ記載いたします。
ネットワークACLの設定は、デフォルトのものを使用していれば不要だと思いますが、必要に応じて入れてください。
- EC2のAMI:Amazon Linux 2(Amazon Linux 2023だとamazon-linux-extrasが入っておらず手順が少し変わります)
- セキュリティグループ:アクセス元のIPアドレスからのSSHと8080ポートへのアクセスを許可
Goのインストール
EC2にsshでログインして、Goをインストールしていきます。
#amazon-linux-extrasが入っていることの確認
$ which amazon-linux-extras
#amazon-linux-extrasでインストール可能なGoのバージョンを確認
$ amazon-linux-extras list | grep golang
#Goのインストール
$ sudo amazon-linux-extras install golang1.11
#GOPATHを通す
$ sudo vi ~/.bashrc
⇒export GOPATH=$HOME/goを追記
#設定されていることの確認
$ source ~/.bashrc
$ echo $GOPATH
#Goがインストールされていることの確認
$ go version
GoでのWebサーバの実装
Goにはhttpパッケージがあり、HTTPクライアントとサーバーが簡単に実装できます。
http package - net/http - Go Packages
http.go
package main
import (
"fmt"
"html/template"
"log"
"net/http"
)
func frontHandler(w http.ResponseWriter, r *http.Request) {
// HTMLファイルのパース処理
resp, err := template.ParseFiles("front.html")
if err != nil {
log.Printf("template error: %v", err)
}
// 値の埋め込み+エラー処理
if err := resp.Execute(w, nil); err != nil {
log.Printf("failed to execute template: %v", err)
}
}
func main() {
http.HandleFunc("/front", frontHandler)
fmt.Println("Go Server Start")
// リクエスト状態の開始
log.Fatal(http.ListenAndServe(":8080", nil))
}
テストとして表示させるページのHTMLファイルも作成します。
front.html
<h1>sora</h1>
<h2>所属</h2>
<p>営業統括本部 ゲームソリューショングループ ソリューションアーキテクト</p>
<h2>今後ブログにしようと思っていること</h2>
<ul>
<li>CDK(Python)で出たエラー</li>
<li>Goで色々作ってみた成果物</li>
<li>構築したことのない構成やサービスをCDKで構築</li>
</ul>
実行(HTMLページの表示)
コードの準備ができたため、先ほどの2つのファイルをEC2上に配置して、Goプログラムを実行します。
$ go run http.go
Server Start Up........
サーバにてリクエストを受け付ける状態にできたため、ブラウザで[パブリックIPアドレス]:8080/front
にアクセスします。
HTMLページが表示されました。
参考にしたページ
Go開発環境/ビルド環境としてAmazon Linuxをセットアップする手順
Go の html/template でヘッダーやフッター等の共通化を実現する方法
GoでWebサーバーを構築
最後に
今回は、GoでEC2上にWebサーバを構築して簡単なページを表示してみました。
どなたかの参考になると幸いです。