Google App Engineのバージョン管理


Google App Engine（以下GAE）のバージョン管理がおもしろそうだったのでちょっと触ってみる。

やってみるリストというか目次

１．GAEで公開するアプリへのアクセス（URL）
２．バージョン管理
　　複数バージョンのアプリを用意して、トラフィック分割によるアプリの切替。
　　Blue-Green Deploymentてきなことを。。
　　

##１．GAEで公開するアプリへのアクセス（URL）
GAEで公開するアプリは

```
http://[※プロジェクトID].appspot.com
```

でアクセスできる。
※プロジェクトIDはGoogle Cloud Platformでプロジェクト作成時に任意で設定するID
※GAEの中ではプロジェクトID＝アプリケーションID

他にもバージョンを指定してもアクセスできる。

```
http://[バージョン]-dot-[※プロジェクトID].appspot.com
```

例）バージョン：1 プロジェクトID：test

```
http://1-dot-test.appspot.com
```

##２．バージョン管理
今日の目玉のバージョン管理。
Immutable Infrastructure思想にもとづくBlue-Green Deploymentをお手軽にできそうなのでやってみる。

まず、Immutable Infrastructure思想ってなにそれおいしいの？
>Immutable Infrastructure（イミュータブル　インフラストラクチャ）は不変なサーバー基盤のこと。
>具体的には、一度サーバーを構築したらその後はサーバーのソフトウェアに変更を加えないことを意味する。
>参照：ウィキペディア

ソフトウェア変更、更新で発生するリスクを減らして安定稼働させようという思想。

Blue-Green Deployment
>Blue-Green DeploymentはImmutable Infrastructure思想にもとづくもので、
>通常のアプリ更新作業のようにサーバに更新、デプロイをするのではなく、
>もう一系統同じ環境を新規で作り直し元環境と切替えることでデプロイを行う。
>一系統をBlue、もう一系統をGreenとし更新時にはそれぞれを切替えるのでBlue-Green Deployment。
>切替えるだけなのでゼロダウンタイムリリースのテクニックとして有用。
>更新後に問題が発生した場合戻すことも用意になる。

Blue-Green Deploymentなんていうと仰々しく聞こえるし、小規模な場合そこまでしなくてもと思わなくもないが、
小規模だからこそ恩恵に預かれる気もする。
それこそ動的ではなく静的なただのサイトのリリースなんかにも。

それではバージョン管理を体験してみる。
大まかな流れは
・１系統を現行バージョンとして用意。
・もう１系統を新バージョンとして用意。
・この時点ではアクティブなのは現行バージョンであることを確認。
・GAEのバージョン管理画面から新バージョンをアクティブに切替。
・新バージョンがアクティブになっていることを確認。


###・１系統を現行バージョンとして用意。
[前回](http://qiita.com/senameru/items/fc206f54cf1472442e27)にデプロイしたのをちょっと修正してわかりやすくして再デプロイ。
（index.htmlを修正して「Version.1」と追加しただけ（笑））
このアプリ（アプリというには大げさ）にはバージョンを指定したURLだと

```
http://1-dot-プロジェクトID.appspot.com
```
でアクセスできる。

![スクリーンショット 2016-03-04 18.47.18.png](https://qiita-image-store.s3.amazonaws.com/0/102238/e98502ab-6638-8d45-9816-8bdb4fc13666.png "スクリーンショット 2016-03-04 18.47.18.png")

当然、現在はこのバージョンしかないので

```
http://プロジェクトID.appspot.com
```

でもアクセスできる。
![スクリーンショット 2016-03-04 19.02.54.png](https://qiita-image-store.s3.amazonaws.com/0/102238/bbb71ed6-97ff-ef0f-8539-45312853e121.png "スクリーンショット 2016-03-04 19.02.54.png")

###・もう１系統を新バージョンとして用意。
新バージョンをデプロイしてみる。index.htmlのVersion.1の部分をVersion.2に変更。
Eclipseでデプロイの設定を変更してデプロイ。

![スクリーンショット 2016-03-04 19.06.47.png](https://qiita-image-store.s3.amazonaws.com/0/102238/a1f9be91-e582-5c08-085f-9813152d379b.png "スクリーンショット 2016-03-04 19.06.47.png")

バージョンを指定してアクセス。

```
http://2-dot-プロジェクトID.appspot.com
```
![スクリーンショット 2016-03-04 19.09.35.png](https://qiita-image-store.s3.amazonaws.com/0/102238/743d0a5a-d8c6-cd9e-2254-cd292cda1a70.png "スクリーンショット 2016-03-04 19.09.35.png")

これで、２つのバージョンが存在することになる。

###・この時点ではアクティブなのは現行バージョンであることを確認。

```
http://プロジェクトID.appspot.com
```
にアクセスするとバージョン１（現行）が表示される。

![スクリーンショット 2016-03-04 19.02.54.png](https://qiita-image-store.s3.amazonaws.com/0/102238/1513c7b7-aad9-533f-eae2-841bacf0303f.png "スクリーンショット 2016-03-04 19.02.54.png")

Google Cloud PlatformのApp Engineメニューのバージョンを見るとバージョン１がアクティブ（トラフィックのシェアが１００％）なのが確認できる。

![スクリーンショット 2016-03-04 19.18.18.png](https://qiita-image-store.s3.amazonaws.com/0/102238/8ed4e9fe-82c8-470e-3a6a-95f2f1c73bd8.png "スクリーンショット 2016-03-04 19.18.18.png")

###・GAEのバージョン管理画面から新バージョンをアクティブに切替。
新バージョンをアクティブにするにはトラフィックのシェアを変更して、新バージョンを１００％にしてあげればいい。

![スクリーンショット 2016-03-04 19.21.51.png](https://qiita-image-store.s3.amazonaws.com/0/102238/4847f37a-3f77-4587-59f6-0d036da31403.png "スクリーンショット 2016-03-04 19.21.51.png")

###・新バージョンがアクティブになっていることを確認。

```
http://プロジェクトID.appspot.com
```
にアクセスすると、新バージョンが表示されアクティブになったことがわかる。
（なにこれ、お手軽で便利！！）

![スクリーンショット 2016-03-04 19.23.07.png](https://qiita-image-store.s3.amazonaws.com/0/102238/5a715dac-7112-7d59-b556-745aeffa9f4d.png "スクリーンショット 2016-03-04 19.23.07.png")