LoginSignup
2
2

More than 5 years have passed since last update.

GolangのウェブアプリをBeanstalkへデプロイする環境をなるはやで作る(Mac版)

Last updated at Posted at 2016-07-30

コンセプト

  • とにかく動くことを確認して、細かい設定を後でやりたい人向けに
  • なるはやって書いたけど、やること結構あった・・・
  • 何か漏れがあるかもしれないけど、ご了承くださいませ

Elastic Beanstalkあれこれ

  • Elastic Beanstalkは、以降EBと略します

注意点

  • Golangに対応した環境も用意されているが、2016年7月現在、Golang 1.4と1.5の環境のみで、最新の1.6に対応していない
  • 1.6のvendoringの機能は使いたい
  • 今後の最新バージョンへの対応を考えて、Docker環境の上でGolangを動かしたほうがよさそう

そんなわけでDocker環境で動かす方法を書きます。

以下やること

  • デプロイ先となるEBのサーバー環境を作る
  • ローカルのgitリポジトリへコミット
  • ローカルのリポジトリからEBへデプロイ

EC2キーペアの作成

EC2のキーペアが必要なので、まずそれを作る

  • ブラウザからAWSへアクセスし、サービス一覧からEC2を選択
  • n個のキーペアを押す
  • キーペアの作成を押す
  • キーペア名を入力して作成を押す
  • pemファイルがダウンロードされるので保存しておく

アクセスキーを作る

  • AWSのサービス一覧からIAMを選択
  • 個々の IAM ユーザーの作成
  • ユーザーの管理を押す
  • 新規ユーザーの作成を押す
  • ユーザー名の入力で適当な名前を入れる
    • ここでは、ebtestとする
  • 認証情報のダウンロードを押す
  • CSVファイルがダウンロードされるので保存
  • 閉じるを押す
  • ユーザー一覧画面が表示される
  • 先ほど作ったebtestを選択
  • アクセス許可のタブを選択し、ポリシーのアタッチを押す
  • フィルターに AWSElasticBeanstalkServiceと入力
  • 長いので途中で名前が切れているがAWSElasticBeanstalkServiceを選択
  • ポリシーのアタッチを押す
  • これでこのユーザーにEBへデプロイする権限が与えられる

AWSのコンソール上でEB環境の構築

  • AWSのサービス一覧からEBを選択
  • 新しいアプリケーションの作成を押す
  • アプリケーション名を入れて次へ
  • 新しい環境
    • ウェブサーバーの作成を押す
  • 環境タイプ
    • 事前定義の設定:Dockerを選択して次へ
  • アプリケーションバージョン
    • サンプルアプリケーションを選択して次へ
  • 環境情報
    • 環境名がデフォルトで問題なければ、そのまま次へ
  • その他のリソース
    • RDS DBインスタンス、VPN内にこの環境作成があるがチェックオフのまま次へ
  • 構成の詳細
    • インスタンスタイプ:t2.microのままでいいはず
    • EC2キーペア: 先ほど作ったキーペア名を選択
    • 次へ
  • 環境タグ
    • 次へ
  • アクセス権限
    • 次へ
  • 情報の確認
    • 起動

しばらく待つと環境構築され起動します。

※ EC2はオンデマンドの料金プランで起動するので、使用時間によって課金されていきます。よってお試しが終わったら環境を終了させましょう。

EBのコマンドラインツールをインストール

$ brew install awsebcli
$ eb --version
EB CLI 3.6 (Python 2.7.1)

リポジトリとeb環境のひもづけ

  • goプロジェクトのhello.goがあるディレクトリにgitリポジトリを作る
$ git init
  • ebコマンドがgitリポジトリと連動するように初期化
$ eb init

Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-southeast-1 : Asia Pacific (Singapore)
7) ap-southeast-2 : Asia Pacific (Sydney)
8) ap-northeast-1 : Asia Pacific (Tokyo)
9) sa-east-1 : South America (Sao Paulo)
10) cn-north-1 : China (Beijing)
(default is 3): 
  • さきほど環境を作ったリージョンの番号を選ぶ
You have not yet set up your credentials or your credentials are incorrect 
You must provide your credentials.
(aws-access-id): 
(aws-access-key): 
  • 上記のようにaws-access-id、aws-secret-keyを求められ得るので、アクセスキーの項目で保存したCSVから以下の項目をそれぞれ入力。
    • Access Key Id
    • Secret Key
Select an application to use
1) 作ったアプリケーション名
2) [ Create new Application ]
  • 作ったアプリケーション名の番号を選択

これでeb deployした時、gitの最新の状態がzipで固められてEBの環境へアップロードされ展開されるようになります。

サンプルウェブアプリ

  • $GOPATH/example.jp/sample1/hello.goというファイル名でmain()を呼び出すコードを書く
    • 実際の運用では、$GOPATH/ドメイン名/任意のパッケージ名/とする
    • このディレクトリの構成は守ったほうがトラブルなくて良いです
  • HTTPサーバーの起動は80ポートにする
hello.go
package main

import (
"fmt"
"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "EBへデプロイしたった\(^o^)/")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":80", nil)
}
$ go build

ブラウザからlocalhostにアクセスすると

EBへデプロイしたった\(^o^)/

と表示されるはず。まだデプロイしてないけど。

  • これをgitリポジトリへコミットします

Dockerfile

  • hello.goがあるのと同じフォルダにDockerfileを作る
FROM golang:1.6-onbuild
EXPOSE 80
  • gitリポジトリへコミット

デプロイ

  • EBへのデプロイは以下のコマンドで行います
$ eb deploy

デプロイ後の流れ

  • EB内でDockerfileにしたがって、golang 1.6が動作するDockerイメージが起動する
  • ウェブアプリはDocker内部で起動される

デプロイ完了の確認

  • ブラウザでAWSのサービス一覧からEBを選択
  • すべてのアプリケーションから該当アプリケーションを選択
  • 作った環境が開き、チェックアイコンにヘルス OKと表示されていれば成功
  • 環境ID:***** URL:*****と表示さているので、そのURLを押す
  • 以下のページが表示されれば成功!
EBへデプロイしたった\(^o^)/

以後は、ローカルで開発してgitへコミットし、タイミングをみてeb deployコマンドでEB上へデプロイの繰り返しです。

EBの環境の終了

先程も書いたように時間と共に課金されていくので、テストで確認しただけなら環境を終了させておきましょう。

  • ブラウザでAWSのサービス一覧からEBを選択
  • すべてのアプリケーションから該当アプリケーションを選択
  • 作った環境が開き、アクションボタンを押す
  • 環境を終了するを選択
  • しばらく待つと環境が終了する
2
2
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
2
2