どうしてもGoで開発したい!
はじめに
無料環境大好き!レッツ貧乏エンジニアリング!
無料で開発できる環境は非常にありがたいですが、なかなかGoを実行できるものは少ないです。。。
こちらの紹介記事を眺めていたら cyclic という良さげなサービスを知りました。
ただ、開発できるのはNode
とのこと。
どうにかしてGo
で開発できるようにならないかなあと思い試してみたのでご紹介します!
cyclic
について
によるとcyclic
はAWS
を利用してLambda
などを利用して構築されるみたいです。
S3
やDynamoDB
も使えるので太っ腹ですね!
制限はありますがうまく活用すればちょっとしたアプリを構築するのには十分そうです。
Node
からGo
を起動してみる
ひとまずNode
からGo
を実行するようにしてみれば活路が見出せるのではないかと思い試してみることに。
child-processを参考にGo
バイナリにてサーバーを作ってNode
から呼び出してみました。
無事に起動&アクセスすることができました!
npm run start
> fs-go-on-node@1.0.0 start
> node index.js
stderr: 2022/10/31 18:41:38 go server running...
curl http://localhost:3000
Hello, Go!%
(stderr ...???)
試しに作ってみたコードは以下に置いてあります。
いざデプロイ
Node
からGo
を起動することが確認できたのでいざデプロイへ!
cyclic
とGitHub
を連携してコンソール画面をぽちぽちしてstarter-micro-apiがデプロイできました。
こちらを改造していきます。
(最終的には別リポジトリを作成して連携させることにしました。)
index.js
を改良してデプロイしアクセスすると以下の画面に...
cyclic
コンソールのログを確認してみると以下の出力が。
stderr: ./main: ./main: cannot execute binary file
バイナリが実行できないだと...
そういえば、私の開発環境mac
だったじゃん。
Lambda
のOSはAmazon Linux 2
か。そしてArchitecturesもx86_64
かもな。
ビルドコマンドを以下に修正してみて再びデプロイしてみることに。
GOOS=linux GOARCH=amd64 go build -o main main.go
無事にデプロイが成功しアクセスにも成功しました!
2022-10-31T10:52:16.320Z: [CYCLIC] Building...
2022-10-31T10:52:16.327Z: [CYCLIC] cached, updating...
2022-10-31T10:52:17.240Z: From https://github.com/takokun778/fs-cyclic-go
* branch 51607ce26b04d3349ff0001778140149aa4fc2c7 -> FETCH_HEAD
2022-10-31T10:52:17.243Z: Warning: you are leaving 1 commit behind, not connected to
any of your branches:
007e552 first commit
2022-10-31T10:52:17.245Z: HEAD is now at 51607ce first commit
2022-10-31T10:52:17.390Z: [CYCLIC] verifying...
2022-10-31T10:52:17.664Z: [CYCLIC] using: node:v16.18.0 npm:8.11.0 runtime:nodejs16.x
2022-10-31T10:52:17.666Z: [CYCLIC] installing dependencies from: package.json
2022-10-31T10:52:17.916Z: npm
2022-10-31T10:52:17.918Z: WARN config production Use `--omit=dev` instead.
2022-10-31T10:52:18.015Z:
up to date in 119ms
2022-10-31T10:52:18.020Z: [CYCLIC] running build if defined...
2022-10-31T10:52:18.311Z: [CYCLIC] pruning dev dependencies...
2022-10-31T10:52:18.635Z:
up to date, audited 1 package in 91ms
2022-10-31T10:52:18.637Z:
found 0 vulnerabilities
2022-10-31T10:52:18.649Z: [CYCLIC] packaging 6.36 MB...
2022-10-31T10:52:18.960Z: [CYCLIC] done packaging
[CYCLIC] deploying...
2022-10-31T10:52:25.040Z: deployed ap-northeast-2 - 6.068s
2022-10-31T10:52:25.042Z: SUCCESS
took 9.0 seconds
api deployed at:
curl https://xxxxx-xxxxxxxxx-xxx.cyclic.app/
Hello, Go!%
今回使ったコードは以下に置いておきます。
調整したあれこれ
最初はバイナリがデプロイできていないのかなと思い
-
S3
にバイナリを配置 -
Lambda
起動時にダウンロード - バイナリ起動
を試みるもLambda
内へは権限的に書き込みが禁止だったっぽくて失敗...
解決したいあれこれ
とりあえず動かしたかっただけだったので
実用化するためには調整することはあります。
- ログが
stderr
で吐き出される - バイナリをGitHubに保存したくない(デプロイ時にビルドしたい)
その他
ローカル環境は以下になります。
node --version
v16.15.1
go version
go version go1.19.2 darwin/arm64
おわりに
どうにかして無理やりGo
で実装する環境を構築してみました。
たったひとつのエンドポイントしか作っていないのでがっつり構築できるかは今後も要調査といったところですね。
まだまだ調整すべきことはたくさんありますがどうしてもGo
で開発したい方はぜひ試してみてください!
(wasm使いこなせればもっと無理やりGo開発の環境を開拓できたりするのかなぁ。。。)
Discussion