追記
この記事を書き終わってから、他の方々の記事を検索してみたのですが、AWS SDK for Goを使うのが一般的みたいです。
https://aws.amazon.com/jp/sdk-for-go/
この記事では、EC2を手動で作って、GoのコードをコンパイルしたバイナリファイルをEC2にアップロードする方法です。よろしくお願いします。
やりたいこと
GoとEC2を使って、ブラウザでHello, World!するだけです。
こちらの記事を大変参考にしました。
https://qiita.com/Dragon-taro/items/09a67b93093770348ce5
ローカルにGoは既にインストールされている前提です。
ちなみに、僕のGoのバージョンは1.16.6でした。
Goアプリの作成
ファイル構成
.
└── main.go
main.go
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))
}
EC2の作成
以下、コンソール画面をポチポチしてEC2を作成する。
項目 | 値 |
---|---|
Amazonマシンイメージ | Amazon Linux2 AMI |
インスタンスタイプ | t2.micro |
ネットワーク | (デフォルト) |
サブネット | 優先順位なし(デフォルト) |
自動割り当てパブリックIP | 有効 |
EBSサイズ(GiB) | 20 |
タグ | Name:app-ec2 |
セキュリティグループ
タイプ | プロトコル | ポート範囲 | ソース |
---|---|---|---|
SSH | TCP | 22 | 0.0.0.0/0 |
HTTP | TCP | 80 | 0.0.0.0/0::/0 |
HTTPS | TCP | 443 | 0.0.0.0/0::/0 |
ターミナル作業
以下、ターミナルで作業していきます。
xxxxx.pemは、キーペアのダウンロードした秘密鍵ファイル、
xxx.xxx.xxx.xxxは、EC2のパブリックIPv4アドレスです。
適宜読み替えてください。
local
# 秘密鍵ファイルを移動、権限変更
$ mv ~/Downloads/xxxxx.pem ~/.ssh
$ chmod 700 ~/.ssh/xxxxx.pem
# linux形式でコンパイルする
$ GOOS=linux GOARCH=amd64 go build main.go
# ファイル転送モードでログイン
$ sftp -i ~/.ssh/xxxxxx.pem ec2-user@xxx.xxx.xxx.xxx
ec2
# ec2へ、localのmainバイナリファイルを転送
$ put main
$ exit
local
# sshでログイン
$ ssh -i ~/.ssh/xxxxxx.pem ec2-user@xxx.xxx.xxx.xxx
ec2
# nginxをインストール
$ sudo amazon-linux-extras install nginx1.12
# nginx設定ファイルを編集
$ sudo vim /etc/nginx/nginx.conf
nginx.conf
http {
server {
location / {
# 追記箇所
proxy_pass http://localhost:8080;
}
}
}
ec2
# nginx起動
$ sudo service nginx start
# goアプリ起動
$ ./main```
xxx.xxx.xxx.xxxをブラウザで開くと、「Hello, World!」が見れるはず!
ご覧いただき、ありがとうございました!