LoginSignup
56
49

More than 3 years have passed since last update.

AWS Cloud9でdepとDockerを使用したGo言語のAPIサーバーの開発環境を構築する

Last updated at Posted at 2018-07-09

Go言語の開発は普通はローカルのPCで行う前提で環境構築が説明されているのですが、
AWS Cloud9はGo言語をサポートしているので、どれくらい開発に使えるものなのか試してみました。

拙作のAPIサーバーのstarter-kitが動作することを目標にしました。

このAPI starter-kitは、以下のような構成になっています。

  • Ginフレームワーク
  • O/Rマッパーにxorm
  • MySQLをデータベースとして使用
  • ローカル開発環境用にDockerを使用してMySQLを起動
  • nodemonを使用してファイル編集時にAPIサーバーを自動リロード

結論からいくと、これらの全てが問題なく動作しました。

順番に設定手順を説明していきます。

以下のことが前提です。

  • AWSアカウントを持っている
  • bashの操作が出来る

AWS Cloud9にログイン

AWS Cloud9の起動は既に終わっているところから説明します。
まだの場合、設定と起動手順はこちらのQiita記事などを参考にして下さい。

Cloud9を立ち上げて、下の画像のような状態からスタートします。
主に下側にある、bashのターミナルにコマンドを打ち込んで操作します。

Cloud9画面

Go言語のバージョン確認と更新

Cloud9のターミナル
$ go version

# 表示結果
go version go1.9.1 linux/amd64

go versiongo1.10.xの方がAPIサーバーの自動リロードが高速に行え、快適な開発がもたらされるため、Go言語のバージョンをアップデートします。

Go言語のアップデートには次のコマンドを実行します。
(go1.10.3は 2018/07時点の最新のバージョンです)

Cloud9のターミナル
$ wget https://storage.googleapis.com/golang/go1.10.3.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf ./go1.10.3.linux-amd64.tar.gz
$ rm ./go1.10.3.linux-amd64.tar.gz
$ go version

# 表示結果
go version go1.10.3 linux/amd64

環境変数の設定

以下の4つのコマンドを実行して、PATHとGOPATHを設定します。

Cloud9のターミナル
$ echo 'export GOPATH=$HOME/go' >> ~/.bashrc
$ echo 'export GOBIN=$GOPATH/bin' >> ~/.bashrc
$ echo 'export PATH=$GOBIN:/usr/local/go/bin:${PATH}' >> ~/.bashrc
$ . ~/.bashrc

Go言語のパッケージ管理ツールdepのインストール

Cloud9のターミナル
$ mkdir -p $GOBIN
$ curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh

リポジトリのclone

go-gin-xorm-starterリポジトリをcloneします。

Cloud9のターミナル
$ git clone https://github.com/gemcook/go-gin-xorm-starter.git $GOPATH/src/github.com/gemcook/go-gin-xorm-starter

これ以降、リポジトリルートで作業を行うため、cdコマンドで移動します。

Cloud9のターミナル
$ cd $GOPATH/src/github.com/gemcook/go-gin-xorm-starter

このディレクトリが左のフォルダビューで表示されるように設定します。

フォルダービューShow Home in Favoritesを選択します。

フォルダービューShow Home in Favoritesを選択

~/go/src/github.com/gemcook/ までディレクトリを開いていき、go-gin-xorm-starterをAdd to Favoritesします。

Add to Favorites

nodemon のインストール

nodemon コマンドをインストールします。

Cloud9のターミナル
$ npm i -g nodemon

nodenpmがインストール済みなので簡単です。

docker-composeコマンドをインストールする

Cloud9にはdockerコマンドは初めから入っていますが、docker-composeは入っていません。

以下のコマンドでインストールします。

Cloud9のターミナル
$ sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

(2018/07時点の最新のバージョンなので、今時点の最新を入れたい場合は、docker-composeリリース一覧から最新のバージョンのインストールコマンドを確認して下さい)

Dockerを使用してMySQLを起動する

念のため既存のMySQLを停止しておきます。

Cloud9のターミナル
$ sudo service mysqld stop

docker-composeを使用してdockerを立ち上げます。

Cloud9のターミナル
$ docker-compose up

ターミナルにdockerの実行ログが流れます。

docker-compose up実行結果

このターミナルタブはそのまま置いておき、フォルダービューからgo-gin-xorm-starter を選択して、右クリックメニューからOpen Terminal Hereを選択すると新しいタブが表示されます。

Open Terminal Here

ちなみに、新しいタブはエディタエリアに開きますが、ドラッグ&ドロップで下のパネルに移動できます。

APIサーバーを立ち上げる

.envファイルの準備が必要なのでexampleをコピーして作ります。

Cloud9のターミナル(2)
$ cp .env.example .env

APIサーバーの依存パッケージをdepコマンドでインストールします。

Cloud9のターミナル(2)
$ dep ensure

サンプルのデータベースを作成します。

Cloud9のターミナル(2)
$ sh ./fixtures/init_db.sh

APIサーバーを起動します。

Cloud9のターミナル(2)
$ make start

APIサーバーのルーティング一覧がログとして表示されていれば成功です。

APIサーバー起動ログ

APIを呼び出す

Preview Running Applicationを開くと外部からアクセス可能なURLが表示されます。
このURLは、ポート8080で起動しているAPIサーバーに繋がっています。

Preview Running Application

Cloud9の右側に内部ブラウザが開き、下記のようなURLにアクセスしています。

https://<環境ID>.vfs.cloud9.<AWSリージョン>.amazonaws.com/

starter-kitは /v1/fruits でアクセスするとフルーツ一覧をJSONで返すので、

https://<環境ID>.vfs.cloud9.<AWSリージョン>.amazonaws.com/v1/fruits にアクセスして、APIの動作確認が出来ます。

/v1/fruitsにアクセス

/v1/fruitsにアクセスした結果

starter-kitを拡張していくには

以下の作業を行って下さい。

リポジトリの名前を変更して、自分のものにします

$GOPATH/src/github.com/<あなたのGitHubユーザー名>/<任意のリポジトリ名>

ソースコード全体に対して、以下の置換処理をします

置換前: gemcook/go-gin-xorm-starter
置換後: <あなたのGitHubユーザー名>/<任意のリポジトリ名>

【番外編】 adminerとphpMyAdminを使用してMySQLの内容を確認する

starter-kitではdocker-composeを使用して、MySQLを立ち上げましたが、
MySQL以外に、adminerとphpMyAdminも立ち上がっています。
Cloud9の仕様で、外部に公開出来るポートは 8080, 8081, 8082 に限られているため、adminerかphpMyAdminの使用する方のポートを8081に書き換える必要があります。

まずは、既に立ち上がっているdocker-composeを停止します。

以下のコマンドを実行するか、実行中のターミナルでCTRL+Cで中断を送信します。

$ docker-compose down

docker-compose.ymlを書き換えます。

docker-compose.yml(adminerを使用する場合)
  adminer:
    image: adminer
    ports:
      # - 10080:8080
      # adminerを使用する場合、10080:8080 -> 8081:8080に変更する
      - 8081:8080
    depends_on:
      - mysql
docker-compose.yml(phpMyAdminを使用する場合)
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: mysql
      PMA_USER: root
      PMA_PASSWORD: password
    ports:
      # - 9080:80
      # phpMyAdminを使用する場合、9080:80 -> 8081:80に変更する
      - 8081:80
    depends_on:
      - mysql

再び、dockerを起動します。

$ docker-compose up

 そのあと、ブラウザから https://<環境ID>.vfs.cloud9.<AWSリージョン>.amazonaws.com:8081/ にアクセスします。

phpMyAdmin アクセス例

まとめ

普段Go言語の開発をしているVSCodeと比べると、支援機能は正直いまいちです。

しかし、AWS Cloud9で大体のGo言語の開発は出来そうです。
大抵の必要なものは初めからインストール済みなので入門用の環境としては良いのではないでしょうか。

56
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
49