11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Opt TechnologiesAdvent Calendar 2016

Day 7

SpinnakerでPlay 2.5アプリをGCEにデプロイする

Posted at

この記事はOpt Technologies Advent Calendar 2016の7日目です。(納品が1日遅れ大変申し訳ございません)

Spinnakerは、Netflixが作っている、オープンソースのマルチクラウド対応継続的デリバリーPlatformです。

LBの下にサーバーを並べるようなクラスタの構成や、ビルド成果物からのマシンイメージの作成 ~> デプロイといったパイプラインの構築が簡単にできるようです。

今回、PlayアプリケーションをGCEにデプロイするパイプラインを構築して、Spinnakerに入門してみました。

必要なもの

  • GCPのアカウント
    • Spinnakerの起動も、アプリのデプロイもGCP上に行います。
    • 手元でgcloudのインストール & authも済ませておきましょう。
  • java8の実行環境がインストール済みのUbuntu 14.04GCEマシンイメージ
    • このイメージに対して、PlayアプリをBakeします。
    • イメージ名は ubuntu-1404-trusty-jdk8 とします。
  • プライベートaptリポジトリ
    • この記事ではS3を使用します。(GCSでもいけるはずなんですが...)

Playアプリをプライベートaptリポジトリにpublish

Spinnakerは、debianパッケージからマシンイメージを作成(Bakeと呼ばれます)するため、アプリをaptリポジトリに置いておく必要があります。

実際はJenkinsやCIサービスなどを使ってテスト ~> リポジトリへのpublishを行うことになると思いますが、この記事ではAptlyを使って手元でpublishしておきます。

Aptlyの詳しいセットアップ方法については省略します。

$ git clone https://github.com/ocadaruma/play-example.git
$ cd play-example
$ bin/activator debian:packageBin # .debを作成
$ aptly repo create play-example
$ aptly repo add play-example target/play-example_1.0-SNAPSHOT_all.deb
$ aptly --skip-signing --architectures="amd64,i386" --distribution=trusty publish repo play-example s3:main: # ~/.aptly.confにmainという名前でS3の設定がされている前提

Spinnakerのセットアップ

起動

GCPでは、Cloud Launcherを使ってワンタッチでSpinnakerインスタンスが作れますので、それを使いましょう。

image

起動したら、このような画面が見えるはずです。

image

Accessing Spinnaker through SSH Tunnelに書いてあるコマンドを打って、SSHトンネルを開きます。
すると、localhost:9000でSpinnaker Consoleが開けるはずです。

プライベートaptリポジトリ用の設定

Bake時に、プライベートaptリポジトリを読めるようにします。

作ったSpinnakerインスタンスにSSHでログインし、/opt/rosco/config/rosco.ymlを開いて以下を追記します。(S3以外をaptリポジトリに使う場合は適宜変更)

/opt/rosco/config/rosco.yml
debianRepository: s3://your-repo.s3.amazonaws.com/ trusty main

また、S3を使う場合は、aptでs3://スキームを使えるようにする設定も必要です。
うまいやり方が思いつかなかったため、強引ですが/opt/rosco/config/packer/install_packages.shを以下のように編集します。。

/opt/rosco/config/packer/install_packages.sh
#!/bin/bash

〜〜

function provision_deb() {
  # install s3 method
  sudo wget https://raw.githubusercontent.com/BashtonLtd/apt-transport-s3/master/s3 -O /usr/lib/apt/methods/s3
  sudo chmod +x /usr/lib/apt/methods/s3

  # setup aws credentials
  cat << EOS | sudo tee /etc/apt/s3auth.conf
AccessKeyId = AKIA*********
SecretAccessKey = *********
Token = ''
EOS

〜〜

Spinnakerアプリケーションの設定

ではSpinnaker Consoleを開き、いろいろ作成していきましょう。

Application

ApplicationsタブのActions ~> Create Applicationを開き、このような内容で作成します。

image

Load Balancers

LOAD BALANCERSタブ ~> Create Load Balancerから、9000番に対するLBを作成します。

image

image

Security Groups

SECURITY GROUPSタブ ~> Create Security Groupから、9000番を許可するファイアウォール設定を作成します。

image

Pipelines

PIPELINESタブ ~> +から、PlayアプリのBakeとデプロイを行うパイプラインを作成していきます。

image

Bake Stage

Add stageで、java8インストール済みのtrustyイメージに対してアプリをBakeするStageを作成します。

image

Deploy Stage

続けてAdd stageで、デプロイを行うStageを作成します。

TypeをDeployにし、Add server groupから、クラスタを構成していきます。

image

Load Balancers, Security Groupsに、先ほど作成したものを設定します。

image

Instance TypeはとりあえずMicroにします。

image

動作確認

作成したBake & Deployパイプラインを、Start Manual Executionで動かしてみます!

無事にパイプラインが終了し、

image

Load Balancerのエンドポイント:9000にアクセスしてPlayアプリの画面が出ればOKです!

image

まとめ

  • マシンイメージを利用したデプロイパイプラインの構築が簡単にできてよさそう。
  • また今回は単純なBake & Deployする例だけでしたが、パイプライン同士に依存関係をつけたり、Blue-Greenデプロイしたりも簡単にできそうです。
11
7
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
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?