Render.comを使ってGo&PostgreSQLを爆速でデプロイしてみた

こんにちは！
Go&PostgreSQLを思ったより簡単にデプロイできたので参考になれば幸いです

## こんな方におすすめ
- より手軽にGoとPostgreSQLをデプロイしてDBから取得、保存等ができるようになりたい

### この記事で扱わないこと
- Goの文法に関して
- 各種サイトやツールのインストール方法


## 今回使用するGoファイル
こちらの記事で実装したGoファイルを使います

https://qiita.com/miumi/items/6a70d5b9a1a61cc39dc8

リポジトリは下記になります

https://github.com/mikaijun/go-postgre-onboarding/

## render.comのアカウント作成
下記サイトにアクセスします。

https://render.com/

アカウント作成の流れは下記の記事が参考になると思います

https://zenn.dev/protoout/articles/54-howto-render-setup


## デプロイ用のPostgreSQL作成
https://dashboard.render.com/ にアクセスしてNew +からPostgreSQLを選択します

![スクリーンショット 2023-12-02 15.26.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/3687353a-b919-06d7-6448-8c556b9b6fa8.png)

Nameに一意の名前を記入してその他は記入しなくて大丈夫です。
![スクリーンショット 2023-12-02 15.27.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/af04c12c-8e42-dfa7-5cc6-6a811cac8cc9.png)

動作を確認するだけならFreeで大丈夫です。左下のCreate Databaseをクリック
![スクリーンショット 2023-12-02 15.27.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/7dbf2c56-8498-abbb-94f1-24289e7ea53e.png)

作成に成功するとconnectionsの箇所にDBの情報が記載されてます。
今回は赤枠の部分を使用します

![スクリーンショット 2023-12-02 15.34.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/d5237e10-a008-2f44-5822-ffa0b0c1bf60.png)


## デプロイ用のGo作成
New+からWeb Serviceを選択

![スクリーンショット 2023-12-02 16.13.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/bf10fd16-bd2e-3072-30e1-86eaed8da473.png)

上のBuild and deploy from a Git repositoryを選択
![スクリーンショット 2023-12-02 15.38.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/7cab637a-05d6-c8b8-a1de-52eff7e8ccc7.png)

デプロイしたいリポジトリを選択します。
今回は今回使用するGoファイルで記述してあるリポジトリを使います

![スクリーンショット 2023-12-02 15.39.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/03a9bb75-2fec-6e95-975b-8242243c4867.png)

環境変数を設定したいのでAdd Environment Variableを選択
![スクリーンショット 2023-12-02 15.41.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/4f9c7aba-400b-3278-4e80-cbd2d0b466d3.png)

各種環境変数を設定。Key名はGoファイル(下記ファイル参考)から、valueは上記スクショから引用しました。
![スクリーンショット 2023-12-02 15.44.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/fc4830a2-7014-7fde-0275-73566b0dfaeb.png)

```main.go
func main() {
    host := os.Getenv("POSTGRES_HOSTNAME")
    database := os.Getenv("POSTGRES_DB")
    user := os.Getenv("POSTGRES_USER")
    password := os.Getenv("POSTGRES_PASSWORD")
```

一番下のCreate Web Serviceをクリック
![スクリーンショット 2023-12-02 15.48.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/132ce032-b840-a709-0f1b-d1b8eb70f99c.png)

しばらくするとデプロイが成功すると思います

![スクリーンショット 2023-12-02 15.54.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/9e1b22ce-e491-0428-3588-dceb269b5e6c.png)
```
Dec 2 03:54:21 PM  ==> Running './app'
Dec 2 03:54:21 PM  Server is running on port 8080...
Dec 2 03:54:29 PM  Your service is live 🎉
```

## DBクライアントツールでデプロイしたPostgreSQLと接続する
今回は https://tableplus.com/ を使いたいと思います。
インストール・設定が完了したら右クリックでConnection URLを選択

![スクリーンショット 2023-12-02 15.57.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/fa5c119c-7cad-320f-5675-771c812b6b60.png)

ここに貼り付けるURLはExternal Database URLになります。
(PostgreSQLの情報は上記Dashboardタブから確認できます)

![スクリーンショット 2023-12-02 15.59.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/1fa13a59-9143-3fe0-a6ea-6fe96f9353b4.png)

こんな感じで設定画面が開けると思うのでconnectをクリック

![スクリーンショット 2023-12-02 16.01.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/f1bfbb91-66c4-c65b-75c6-de64b376c100.png)

接続するとusersテーブルを確認できました
![スクリーンショット 2023-12-02 16.03.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/9188befb-430e-aea8-2879-18d364978b8e.png)

ちなみにusersテーブルは下記部分で生成してます
```migrations/users.go
func UsersMigrate(db *sql.DB) {
	var count int
	err := db.QueryRow("SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 'users'").Scan(&count)
	if err != nil {
		panic(err)
	}
```


## API実行してみる
dashboadからWeb Serviceを選択してGoのエンドポイントを確認します

![スクリーンショット 2023-12-02 16.04.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/9cada5bc-97f0-e146-2445-da6591b13c10.png)

API実行してみる。エンドポイントは下記参考
```api/users.go
func Users(db *sql.DB) {
	http.HandleFunc("/users/get", func(w http.ResponseWriter, r *http.Request) {
		// 省略
	})

	http.HandleFunc("/users/create", func(w http.ResponseWriter, r *http.Request) {
        // 省略
    })
}
```


```
% curl -X GET https://go-test-e5bk.onrender.com/users/get
[{"Id":1,"Name":"Smith"},{"Id":2,"Name":"Johnson"},{"Id":3,"Name":"Brown"}]
```
```
% curl -X POST   -d '{ "name": "Bob" }' https://go-test-e5bk.onrender.com/users/create
{"Id":4,"Name":"Bob"}
```
```
mikaijun@MacBook-Pro ~ % curl -X GET https://go-test-e5bk.onrender.com/users/get                             
[{"Id":1,"Name":"Smith"},{"Id":2,"Name":"Johnson"},{"Id":3,"Name":"Brown"},{"Id":4,"Name":"Bob"}]
```
クライアントツールでも更新されてました
![スクリーンショット 2023-12-02 16.08.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/a4083e0e-9761-4d5c-d1b6-7ed2a77362fb.png)



以上になります。
Goのデプロイする時の幸いになれば幸いです。
最後まで読んでいただきありがとうございます！