![EC2にHTTP接続する](https://mitikusa-engineer.com/wp-content/uploads/2023/01/AWS-1024x538.png)
AWSのEC2に構築した(パブリックサブネット内の)仮想サーバーにHTTP接続する方法をまとめました。
動作環境
ホストOS | Windows 11 Home 22H2(22621.963) 64bit |
ブラウザ | Chrome 109.0.5414.75 |
Visual Studio Code | 1.74.3 |
GoLang | 1.19.5 |
設定手順
EC2に仮想サーバーを構築
ここを参考に進めてみてください。
EC2にセキュリティグループを設定
VPC上の通信を制御するためのセキュリティグループを設定します。ここで仮想サーバーの8080番ポートをHTTP接続先として開放します。前述の手順でSSHの接続先ポートを設定したセキュリティグループに追加する形にします。
![](https://mitikusa-engineer.com/wp-content/uploads/2023/01/WS000002-7.jpg)
![](https://mitikusa-engineer.com/wp-content/uploads/2023/01/WS000003-7.jpg)
![](https://mitikusa-engineer.com/wp-content/uploads/2023/01/WS000004-7.jpg)
![](https://mitikusa-engineer.com/wp-content/uploads/2023/01/WS000005-8.jpg)
[ソース]には作業しているPCのグローバルIPアドレスを設定しましたが、ブログなどのWebサイトとして利用するなら、『0.0.0.0/0』でもいいと思います。
![](https://mitikusa-engineer.com/wp-content/uploads/2023/01/WS000007-3-1024x264.jpg)
VS CodeのSSH接続設定
仮想サーバーにVS CodeからSSH接続して、Webサーバーとしての環境を整えていきます。ここではGoLang(Go言語)のnet/httpパッケージを使って接続できるようにしていきます。VS Codeをインストールしていない場合、迷うことはないと思いますが、ここを参考に進めてみてください。
拡張機能『Remote Development』のインストール
ここを参考に進めてみてください。
VS Codeから仮想サーバーにSSH接続
EC2に仮想サーバーを構築する際に作成したキーペアの秘密鍵を.sshフォルダに格納し、configファイルを用意します。
C:\Users\[ユーザー]\.ssh
config
キーペアの秘密鍵(pemファイル)
configファイルの内容は下記のようにしておきます。
Host [任意の名前]
HostName [仮想サーバーのパブリックIPアドレス]
User [仮想サーバーへのログインユーザー名]
IdentityFile C:\Users\[ユーザー名]\.ssh\[pemファイル名]
IdentitiesOnly yes # 指定した秘密鍵のみを許可
PasswordAuthentication no # パスワード接続を拒否
この状態でVS Codeのサイドメニュー[Remote Explorer]を開き、該当の接続設定を選択すると、仮想サーバーにSSH接続できると思います。もし設定が表示されない場合は、VS Codeを再起動してみてください。
![](https://mitikusa-engineer.com/wp-content/uploads/2023/01/WS000000-7.jpg)
SSH接続に成功するとVS Code左下が下記のような表示になります。
![](https://mitikusa-engineer.com/wp-content/uploads/2023/01/WS000001-7.jpg)
仮想サーバーにWebサーバー環境を構築
GoLangのインストール
[Terminal] > [New Terminal]を開き、作業ディレクトリの作成、GoLangのインストールをします。このディレクトリ内にGoLangのプログラムファイルを作成します。
# ホームディレクトリにいる前提
# GoLangのインストール
sudo apt update
sudo apt upgrade
sudo wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xvf go1.19.5.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
source .profile
go version
------------------------------
go version go1.19.5 linux/amd64
------------------------------
# 作業ディレクトリを作成
sudo mkdir /webserver
sudo chown -R ubuntu /webserver
cd /webserver
sudo touch main.go
go mod init [任意のGoプロジェクト名]
Webサーバーの作成
main.goにWebサーバーを起動するプログラムを記述します。
package main
import (
"fmt"
"net/http"
"log"
)
func hello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Hello Internet!!</h1>")
}
func main() {
http.HandleFunc("/", hello)
// rootユーザーじゃないので8080を解放
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
ソースコードをビルドします。
go build [任意のGoプロジェクト名]
Webサーバーのデーモン化
Webサーバーをデーモン(サービス)化し、起動します。
sudo vi /etc/systemd/system/webserver.service
------------------------------
[Unit]
Description=Webserver
[Service]
ExecStart=/bin/bash -c './[任意のGoプロジェクト名]'
WorkingDirectory=/webserver
Restart=always
Type=simple
User=ubuntu
[Install]
WantedBy=multi-user.target
------------------------------
sudo systemctl daemon-reload
sudo systemctl start webserver.service
sudo systemctl status webserver.service
systemctl list-units --type=service | grep webserver
WebサーバーにHTTP接続
ブラウザから下記で接続できればOKです。
http://[仮想サーバーのパブリックIPアドレス]:8080
![](https://mitikusa-engineer.com/wp-content/uploads/2023/01/WS000008-3.jpg)