GoでEC2上にWebサーバを構築して簡単なページを表示してみた

2023.03.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、ゲームソリューショングループの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サーバを構築して簡単なページを表示してみました。
どなたかの参考になると幸いです。