AWS CodeDeployを使ってみる


AWSの新作codedeployを試してみます

マニュアルも読まずにコンソールからポチポチといきます

まず、使えるリージョンはまだ２つしかない模様
新機能がバージニアなのは鉄板ですね

![スクリーンショット 2014-11-15 19.25.28.png](https://qiita-image-store.s3.amazonaws.com/0/28157/4062fd22-ad11-2511-fa89-1a7f2a01e981.png "スクリーンショット 2014-11-15 19.25.28.png")

リージョンを選んでウェルカム画面

![スクリーンショット 2014-11-15 19.25.42.png](https://qiita-image-store.s3.amazonaws.com/0/28157/c784a1c1-71da-e088-ccd1-8840e324b71b.png "スクリーンショット 2014-11-15 19.25.42.png")

アプリケーションは今回はsampleとして用意されているものを使ってみます。

![スクリーンショット 2014-11-15 19.25.47.png](https://qiita-image-store.s3.amazonaws.com/0/28157/ca47d085-9e5d-cd36-86ff-4e6bf7a5d961.png "スクリーンショット 2014-11-15 19.25.47.png")

ところで、こんな風にWEBのコンソールでsampleが用意されているものってありましたっけ？

さらにぽちぽち進みます

![スクリーンショット 2014-11-15 19.25.52.png](https://qiita-image-store.s3.amazonaws.com/0/28157/a7e1c572-ad08-5336-e1e2-a9bf8b14e7e4.png "スクリーンショット 2014-11-15 19.25.52.png")

AmazonLinuxを選択して起動
ここでwindowsを選択してもサンプルのアプリケーションは同じWEBの画面でした。
違いは後述
codedeployで利用するVMを起動すると

![スクリーンショット 2014-11-15 19.27.38.png](https://qiita-image-store.s3.amazonaws.com/0/28157/d3d4d4a6-a168-a9cd-dad9-db482451f566.png "スクリーンショット 2014-11-15 19.27.38.png")

CloudFormationで起動するので、そっちのコンソールみろ的なダイヤログが出ましたので、
覗いてみると

![スクリーンショット 2014-11-15 19.27.52.png](https://qiita-image-store.s3.amazonaws.com/0/28157/a1a9115a-87c6-8e80-9616-9073d294fd62.png "スクリーンショット 2014-11-15 19.27.52.png")

デプロイが始まっていました。
VMの起動は、CloudFormationを使って起動していました。
サンプルだからでしょうか？

CloudFromationのDescriptionを見てみると

```
Create instances ready for CodeDeploy: Create up to 3 Amazon EC2 instances with an associated instance profile and install the AWS CodeDeploy Agent. 
**WARNING** This template creates one or more Amazon EC2 instances. You will be billed for the AWS resources used if you create a stack from this template.
```

3つインスタンスを起動するようです。
![スクリーンショット 2014-11-15 19.34.42.png](https://qiita-image-store.s3.amazonaws.com/0/28157/ad6f3d30-e142-bafc-0144-51bca1867593.png "スクリーンショット 2014-11-15 19.34.42.png")

codeDeployのダイヤログには、CloudFormationので CREATE_COMPLETE となってから、次へ進めとありますので、しばし待機します

![スクリーンショット 2014-11-15 19.36.16.png](https://qiita-image-store.s3.amazonaws.com/0/28157/e33524d4-4e98-dc0c-ee85-9ba402b920d3.png "スクリーンショット 2014-11-15 19.36.16.png")

CREATE_COMPLETEになったので、次に進みます

アプリケーションに名前をつけます
![スクリーンショット 2014-11-15 19.36.32.png](https://qiita-image-store.s3.amazonaws.com/0/28157/e657dc60-2f0d-16ec-5c03-e8e98eacc237.png "スクリーンショット 2014-11-15 19.36.32.png")

アプリケーションを設定します

![スクリーンショット 2014-11-15 19.37.06.png](https://qiita-image-store.s3.amazonaws.com/0/28157/c27fd8ec-9106-8f3f-729b-ce110e57b655.png "スクリーンショット 2014-11-15 19.37.06.png")

ここでサンプルの中身が取得出来るので、見てみると

![スクリーンショット 2014-11-15 19.37.57.png](https://qiita-image-store.s3.amazonaws.com/0/28157/ae2f9cac-fb36-a968-cff9-dd842c3d05d8.png "スクリーンショット 2014-11-15 19.37.57.png")

このような中身でした

ちなみに、window用だとこんな感じ

![スクリーンショット 2014-11-15 20.43.38.png](https://qiita-image-store.s3.amazonaws.com/0/28157/86c807de-53fe-7a24-92be-b34b8129df4d.png "スクリーンショット 2014-11-15 20.43.38.png")

中身の違いは、パッケージのインストールとOSコマンドの違いだけでした
この中のappspec.ymlが鍵のようなので、中身を見てみると

AmazonLinuxの場合

```yml
version: 0.0
os: linux
files:
  - source: /index.html
    destination: /var/www/html/
hooks:
  BeforeInstall:
    - location: scripts/install_dependencies
      timeout: 300
      runas: root
    - location: scripts/start_server
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server
      timeout: 300
      runas: root
```


windowsの場合

```
version: 0.0
os: windows
files:
  - source: \index.html
    destination: C:\inetpub\wwwroot
hooks:
  BeforeInstall:
    - location: \before-install.bat
      timeout: 900
```

アプリケーションフックと思われる書式とhttpのルートフォルダが記載れていました

scriptsの中身は
AmazonLinuxの場合

```start_server
#!/bin/bash
service httpd start
```

```stop_server
#!/bin/bash
isExistApp = `pgrep httpd`
if [[ -n  $isExistApp ]]; then
    service httpd stop        
fi
```

```install_dependencies
#!/bin/bash
yum install -y httpd
```

windowsの場合のbefore-install.bat

```
REM Install Internet Information Server (IIS). 
c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Import-Module -Name ServerManager
c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Install-WindowsFeature Web-Server

```

コマンドがそのままでした

次にデプロイグループを設定

![スクリーンショット 2014-11-15 19.41.56.png](https://qiita-image-store.s3.amazonaws.com/0/28157/d0b02885-38df-5b15-2aca-a616bbeea9b9.png "スクリーンショット 2014-11-15 19.41.56.png")

EC2のインスタンスにタグをつけて管理するみたいです
ここで、さきほどCloudFormationで起動したVM以外にも同じタグがついていた場合、instanceの数がタグに反応して増えます

また、タグ名はautoscallingグループの名前も付けることが出来るみたいです

サービスロールの設定
![スクリーンショット 2014-11-15 19.42.31.png](https://qiita-image-store.s3.amazonaws.com/0/28157/1fb8082d-6986-bb7a-3963-4c1baa9d77bd.png "スクリーンショット 2014-11-15 19.42.31.png")
createとuseが使えますが、useの時点でcodedeploy用のロールが作られていました
恐らくWEBのサンプル専用に作られえるものでしょう

作られているロールはこのような感じです

![スクリーンショット 2014-11-15 19.43.48.png](https://qiita-image-store.s3.amazonaws.com/0/28157/5fe4b355-569e-bfc2-ce01-e6461e63e2e9.png "スクリーンショット 2014-11-15 19.43.48.png")

デプロイの設定をします
![スクリーンショット 2014-11-15 19.44.16.png](https://qiita-image-store.s3.amazonaws.com/0/28157/2ff473d4-2cfc-f47d-158a-4cc420a00f6c.png "スクリーンショット 2014-11-15 19.44.16.png")

以下の３つの設定が出来る模様
 都度１回
 ３０分に１回
 全体で１回
今回は１回のやつを選択


最後に設定一覧が出て問題なければ実行

![スクリーンショット 2014-11-15 19.46.00.png](https://qiita-image-store.s3.amazonaws.com/0/28157/4830f6e5-5fe4-8f2d-4011-5ecf5c97f735.png "スクリーンショット 2014-11-15 19.46.00.png")

アプリケーションのデプロイが開始されます
![スクリーンショット 2014-11-15 19.46.31.png](https://qiita-image-store.s3.amazonaws.com/0/28157/995f09ad-1063-3ce0-54a9-180586445f98.png "スクリーンショット 2014-11-15 19.46.31.png")

しばらくすると、viewに変化
![スクリーンショット 2014-11-15 19.47.00.png](https://qiita-image-store.s3.amazonaws.com/0/28157/ef06d072-52d7-2f30-6a47-fbd96048c3f8.png "スクリーンショット 2014-11-15 19.47.00.png")

さらに待つと、3ノードにデプロイが完了
![スクリーンショット 2014-11-15 19.48.32.png](https://qiita-image-store.s3.amazonaws.com/0/28157/2df1d09e-18fd-fd86-4675-8011627778e9.png "スクリーンショット 2014-11-15 19.48.32.png")

では、アプリケーションにアクセス・・・といっても、どこのURLにアクセスして良いかわからないので、３つのVMのどれかのpublicIPにhttpアクセスしてみると
![スクリーンショット 2014-11-15 19.49.36.png](https://qiita-image-store.s3.amazonaws.com/0/28157/ec444d04-9a2d-fa72-2196-553264774f3f.png "スクリーンショット 2014-11-15 19.49.36.png")

アプリケーションが表示されました。
試しに他のVMのIPにしても同じものが表示されました。
なお、Linux/Windowsどちらで試しても同じ結果となりました。

稼働中はこのような表示になるようです
![スクリーンショット 2014-11-15 19.53.54.png](https://qiita-image-store.s3.amazonaws.com/0/28157/8bb9689e-9db6-e587-8a8b-bcb6cbe62d75.png "スクリーンショット 2014-11-15 19.53.54.png")
![スクリーンショット 2014-11-15 19.50.28.png](https://qiita-image-store.s3.amazonaws.com/0/28157/763d3820-87da-8513-7ca2-860ad77712fa.png "スクリーンショット 2014-11-15 19.50.28.png")

さて、デプロイできたので、今度は削除してみます
上記の画面の済にあるDeleteボタンをクリックすると

![スクリーンショット 2014-11-15 19.53.57.png](https://qiita-image-store.s3.amazonaws.com/0/28157/12d4c48e-3831-c962-dda4-b1f6dea406dc.png "スクリーンショット 2014-11-15 19.53.57.png")

このような表示が出て、さらに続行するも・・・消えませんでした
正確にはアプリケーションは削除されましたが、VMは削除されませんでした
そこで
cloudformationから消してみます
![スクリーンショット 2014-11-15 19.54.54.png](https://qiita-image-store.s3.amazonaws.com/0/28157/8257e118-94ad-06ec-9b40-afd8626c34c1.png "スクリーンショット 2014-11-15 19.54.54.png")
![スクリーンショット 2014-11-15 19.54.58.png](https://qiita-image-store.s3.amazonaws.com/0/28157/aa4aec4e-5d21-486b-4177-06a1d5d27894.png "スクリーンショット 2014-11-15 19.54.58.png")
![スクリーンショット 2014-11-15 19.55.08.png](https://qiita-image-store.s3.amazonaws.com/0/28157/f0a8efb8-670e-13f3-166c-f9cea0a58c86.png "スクリーンショット 2014-11-15 19.55.08.png")
![スクリーンショット 2014-11-15 19.55.19.png](https://qiita-image-store.s3.amazonaws.com/0/28157/35d60269-7f09-2ee3-06ac-9fc8061512c5.png "スクリーンショット 2014-11-15 19.55.19.png")

消えました（当たり前


#総評

opsworkと被っているレイヤにも思えますが、chefが書けないといったエンジニアに向けた設定ファイルベースのサービスという感じに思えました
また、windows版があるのでエンタープライズでwindowsバリバリのシステムの移行にももしかしたら使えるかもしれません。

詳細は、WEBのマニュアルを参照されると良いと思います

http://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html

近日中に、custom版、およびCLIでも試してみたいと思います