[AWS OpsWorks]Berksfileだけgithubにあげて、OpsWorksでhttpd24 + php56 WEBサーバを作ってみる



TL;DR
======

OpsWorksでhttpd24 + php56をインストールする。

https://github.com/imura81gt/httpd24_php56_opsworks
ここにあるBerksfileとCustom Jsonで。
chef cookbook書かなくてすんだ話。



こんな壁にぶち当たった
===================

PHP App Server layer と custom json を使って php56を入れようとしても、httpd24が入らなくてエラーが出た。

https://github.com/aws/opsworks-cookbooks/blob/release-chef-11.10/apache2/recipes/default.rb

```直書きされてる
 when 'rhel'
    package_name 'httpd'
```


個人的にchefを使うときの方針？きまり？手抜きルール？として

* Chef DKを使う
* なるべく自分ではcookbook書かない
	* 自分で使うだけだから考えなくていいのに、Amazon Linux以外にもUbuntuや他OSでも使えるように書きたくなるから。。。
		* https://supermarket.chef.io 極力ここのを使う
			* Berkshelfを使う

みたいなことを考えてて、あーcookbook作るのは面倒だなーどうしようかなーと思いながらOpsWorksを引き続き触ってました。


ざっとOpsWorksを使ってみてわかったこと
===================================


* custom json で attributeを指定できる
* opsworksが提供しているchef-repoはあまりattribute使ってなくてカスタムしずらい
* Berkshelfが使える

＿人人人人人人人人人人人人人人人人人人人人人人人人人人人＿
＞　BerksfileだけgithubにあげればOpsWorksで動かせる予感！　＜
￣ＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹＹ￣

（マニュアルを読んでないだけかもしれないけど。。。）

用意
====

Berksfileだけ入ったgithubリポジトリ
--------------------------------------------------

https://github.com/imura81gt/httpd24_php56_opsworks

Berksfile

```
source "https://api.berkshelf.com"

# apache
cookbook 'apache2', '~> 3.0.1'

# php
cookbook 'php', '~> 1.5.0'
```


githubリポジトリでDeploy Keyを設定しておく
-----------------------------------------------------------------

### deploy key（no password） の作成


```
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/imura81gt/.ssh/id_rsa): ./githubtest
Enter passphrase (empty for no passphrase):（何も文字を入力せずにEnterキー）
Enter same passphrase again:（何も文字を入力せずにEnterキー）
```

### deploy key の設定

該当リポジトリの [Settings] -> [Deploy keys] -> [add deploy key] で
先ほど生成された `.pubファイル` の中身を設定。

OpsWorks準備
============

Stack作成
---------

`Add Stack` をクリック

![0001.png](https://qiita-image-store.s3.amazonaws.com/0/17518/215d80b8-b059-4355-54f0-e329f115e7cc.png "0001.png")

いろいろ入力して `Advanced` をクリック

![0002.png](https://qiita-image-store.s3.amazonaws.com/0/17518/81d0926e-9259-066a-b629-599511dd8821.png "0002.png")


`Use custom Chef cookbooks` を `Yes`。
Berksfileだけ置いたgitリポジトリの情報を入力。
custom jsonを以下のように入力。


```
{
  "apache": {
    "package": "httpd24",
    "service_name": "httpd",
    "version": "2.4",
    "lock_dir": "/var/run/httpd",
    "keepalive": "On"
  },
  "php": {
    "packages": [
      "php56",
      "php56-devel",
      "php56-cli",
      "php-pear"
    ]
  }
}
```

なんか一部attribute（lock_dir, keepalive）defautl attributeを取ってこれてなかった謎。
（取れてなくてapachectl configtest でエラーなのにopsworksが正常終了した）

![0003.png](https://qiita-image-store.s3.amazonaws.com/0/17518/0006a13d-040f-614d-9481-df7593caffeb.png "0003.png")


`Add Stack` をクリック

![0005.png](https://qiita-image-store.s3.amazonaws.com/0/17518/167da493-9402-a247-4f44-163e8d470d5b.png "0005.png")


Layer作成
---------

![006.png](https://qiita-image-store.s3.amazonaws.com/0/17518/d8579369-4e17-6326-ae34-688aed6c9ce6.png "006.png")

`Layer type` は `Custom` を選択した `Add Layer`


![0007.png](https://qiita-image-store.s3.amazonaws.com/0/17518/02d25393-2dd5-b46d-c567-a833d31c4eff.png "0007.png")

インスタンス追加
--------------

`Add Instance`

![0008.png](https://qiita-image-store.s3.amazonaws.com/0/17518/d42016e5-e313-f8d2-24d6-a717a457fece.png "0008.png")

OpsWorksのセミナーでc3.large以上がいいって話だった気がしますが、テストなので t2.microを選んで `Add Instance`

![0009.png](https://qiita-image-store.s3.amazonaws.com/0/17518/13fd420a-5fb2-fd91-cd3b-c4d719aa6d8b.png "0009.png")

recipe（apache2::default, php::default）を追加する
------------------------------------------------

`edit` をクリック

![0010.png](https://qiita-image-store.s3.amazonaws.com/0/17518/e7d2cba8-e983-b4c2-a905-9f1cc3aec716.png "0010.png")

`Setup` のところに `apache2::default` と `php::default` を入力して `Save`

![0011.png](https://qiita-image-store.s3.amazonaws.com/0/17518/82819d65-bf9a-ffc9-8e04-8829e6a4476a.png "0011.png")


インスタンス作成時にpublic ipが付与されるようにする
------------------------------------------------

NAT経由で外に出るか、public ipを付与してあげないと
いざ動かすとずっと `booting` のままになる

`Recipes` をクリック

![0013-1.png](https://qiita-image-store.s3.amazonaws.com/0/17518/a115ff47-481b-e211-b695-de53f8aa4573.png "0013-1.png")

`Edit` をクリック

![0013-2.png](https://qiita-image-store.s3.amazonaws.com/0/17518/2b07deec-2cf4-f209-98c6-49d2aa55299e.png "0013-2.png")

`Puglic IP address` を `Yes` にして `Save`

![0013-3.png](https://qiita-image-store.s3.amazonaws.com/0/17518/8cbfc780-7857-1340-684a-d15d39206302.png "0013-3.png")


インスタンス起動・適用
===================

`start` 

![0013.png](https://qiita-image-store.s3.amazonaws.com/0/17518/072f79e1-1731-2f5f-5915-72a0b9f7fe3e.png "0013.png")

待ち

![0014.png](https://qiita-image-store.s3.amazonaws.com/0/17518/fd6c2196-992d-6ab4-e8a0-cbd0e10f38e3.png "0014.png")

5分くらい待った。 Hostnameのところをクリック

![0017.png](https://qiita-image-store.s3.amazonaws.com/0/17518/35a129d3-de5c-d3e1-97cb-472213ba13e3.png "0017.png")

ログが見れる

![0018.png](https://qiita-image-store.s3.amazonaws.com/0/17518/cee95a98-7f6b-d123-caff-d03db116f1f8.png "0018.png")


確認
=====


（OpsWorksなのにsshしちゃった


Apache

```
[ec2-user@httpd24-php56-1 ~]$ httpd -v
Server version: Apache/2.4.12 (Amazon)
Server built:   Mar 18 2015 20:24:15
[ec2-user@httpd24-php56-1 ~]$
```

php

```
[ec2-user@httpd24-php56-1 ~]$ php -v
PHP 5.6.8 (cli) (built: Apr 17 2015 18:04:37)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
[ec2-user@httpd24-php56-1 ~]$
```
 
```
[ec2-user@httpd24-php56-1 ~]$ rpm -qa | grep php
php56-5.6.8-1.111.amzn1.x86_64
php-pear-1.9.5-2.17.amzn1.noarch
php56-xml-5.6.8-1.111.amzn1.x86_64
php56-process-5.6.8-1.111.amzn1.x86_64
php56-jsonc-devel-1.3.6-1.19.amzn1.x86_64
php56-cli-5.6.8-1.111.amzn1.x86_64
php56-common-5.6.8-1.111.amzn1.x86_64
php56-devel-5.6.8-1.111.amzn1.x86_64
php56-jsonc-1.3.6-1.19.amzn1.x86_64
[ec2-user@httpd24-php56-1 ~]$
```


あとは、、、、
===========

* Virtual Hostの設定をするrecipe
* デプロイユーザ作成
* 必要なディレクトリ作成

のrecipe書いて


* アプリケーションのデプロイ

すればカンタンなphpアプリケーションなら動かせそう。