この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
AWS Elastic BeanstalkがGoをサポートしたことが発表されました!
これまではDocker、Java、.NET、Node.js、PHP、Python、Rubyがサポートされていましたが、新たにGoが加わったことになります。Elastic BeanstalkでのGoアプリケーションの実行では、Javaと同様にProcfileを使って複数のプロセスを実行することができます。コンパイルしたバイナリをサクっとアップロードすれば動くGolangは、Elastic Beanstalkと相性が良いと思います。
ということで、とりあえず実際にやってみました!
やってみた
以下のような、簡単なWebアプリケーションを書きました。5000/tcpポートで立ち上がって、アクセスしたら"Hello, Golang on EB."と返すだけです。
$ vi application.go
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, Golang on EB.")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":5000", nil)
}
./binというディレクトリを作り、buildして、出来上がったバイナリを./bin以下に配置します。
$ mkdir bin
$ go build -o bin/application application.go
$ ls -alF ./bin/application
-rwxr-xr-x 1 smokeymonkey staff 5807380 9 29 17:18 application*
そしてzip圧縮します。
$ $ zip ../myapp.zip -r *
updating: application.go (deflated 26%)
updating: bin/ (stored 0%)
updating: bin/application (deflated 71%)
さて、AWS管理コンソールでElastic Beanstalkの画面にアクセスします。以下の通り、"Go"が増えてますね。"Go"を指定してApplicationを作成します。
Applicationが作成されます。Default EnvironmentのDashboardから[Upload and Deploy]をクリックします。
先ほど作成したzipファイルをアップロードして、Deployします。
正常にデプロイが完了しました。
そしてElastic Beanstalk ApplicationのEnvironment URLにアクセスすると...はい、以下のようにGoアプリケーションが動いていることがわかります!
さいごに
もっと詳しい情報はDeploying Applications on the Go Platformに記載がありますが、すごく簡単にGoアプリケーションをElastic Beanstalkで動かすことができます。前述した通り複数のプロセスを起動することもできますし、オプションとしてNamespaceを定義することもできます。
今回のアップデートで、Elastic Beanstalkの使い道が広がるのではないでしょうか。