IBM Compose for MySQL を AWS 上にデプロイしてみた


Composeは、Bluemixとの統合が進められているので、今後、画面の見え方が変わるかもしてませんが、特徴のあるDBaaSなので、発展を期待したい処です。 Compose のサービスでは、インスタンスを作る場所を 複数のクラウドベンダーから選べるという特徴があります。 Bluemix の Compose のサービスでは、IBMに限定されるのですが、Compose のポータルからログインすれば、AWS,GCP, Bluemix (旧SoftLayer)から選択できます。

Compose については、過去、いくつかの記事を書いていますので、ご参考までにリストしておきます。

* [Bluemix で使えるComposeとはなんですか？ について調べてみた](http://qiita.com/MahoTakara/items/a614df96059d3d8749a1) 
* [Bluemix CFコンテナのPHP と DBaaS MySQLを繋いでアプリを動かしてみた](http://qiita.com/MahoTakara/items/598fc3452be7dc712af4)
* [Compose MongoDB の Node.js アプリ開発の事始め](http://qiita.com/MahoTakara/items/f5a1e4d5cbfab8ac6c02)



## 使用感など

https://www.compose.com から ログインします。 
  
![スクリーンショット 2017-07-21 16.28.28.png](https://qiita-image-store.s3.amazonaws.com/0/42829/003391fb-e35b-b9a1-5887-42b2628735e8.png "スクリーンショット 2017-07-21 16.28.28.png")


Beta Deployment というところが気になりますが、MySQL を選択します。 このまま本サービスになって欲しいですね。


![スクリーンショット 2017-07-21 16.29.10.png](https://qiita-image-store.s3.amazonaws.com/0/42829/49642584-15fd-83f2-63af-5db6ded21be3.png "スクリーンショット 2017-07-21 16.29.10.png")

Location の選択リストを開くと、次の様にAWS,GCP,SoftLayerから場所を選択できます。 せっかくなので、AWSを選んでみます。そして、ストレージのサイズを選択します。 RAMのサイズは、ストレージサイズの 10分の1 に設定されます。 つまり、10Gのストレージを選べば、1GのRAMが割り当てられる事になります。 とても大雑把ですが、これで十分な用途は沢山あると思います。　Create Deployment をクリックすると、３ノードが提供されます。 


![スクリーンショット 2017-07-21 16.29.59.png](https://qiita-image-store.s3.amazonaws.com/0/42829/3abdc29c-e613-20ed-be3b-1e15c7143927.png "スクリーンショット 2017-07-21 16.29.59.png")

10分程度で、デプロイが完了して、次の画面が表示されます。


![スクリーンショット 2017-07-21 16.30.34.png](https://qiita-image-store.s3.amazonaws.com/0/42829/0b8ac847-30fe-8543-daea-81f54e61a101.png "スクリーンショット 2017-07-21 16.30.34.png")

メモリ監視の画面で、３ノードの状態を確認できます。

![スクリーンショット 2017-07-21 16.32.53.png](https://qiita-image-store.s3.amazonaws.com/0/42829/d5d24302-f09f-7938-d68a-09b7ad66ec77.png "スクリーンショット 2017-07-21 16.32.53.png")

簡単なPHPアプリからアクセスしてみます。 ユーザーID, パスワード、SSL接続用のCA を取得して、PHPのコードにセットします。

![スクリーンショット 2017-07-21 16.38.32.png](https://qiita-image-store.s3.amazonaws.com/0/42829/e1472e1d-d63e-0fe2-0e51-ea2ac7327578.png "スクリーンショット 2017-07-21 16.38.32.png")

上記画面の コマンドラインに習って、ログインしてみます。 pemファイルを添付していますが、オプションだけで、暗号が有効になっています。

~~~
imac:compose maho$ mysql -u admin -p --host aws-us-east-1-portal.29.dblayer.com --port 21198 --ssl-mode=REQUIRED
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10728
Server version: 5.7.17-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW VARIABLES LIKE '%ssl%';
+---------------------------------------------------+------------------------+
| Variable_name                                     | Value                  |
+---------------------------------------------------+------------------------+
| group_replication_recovery_ssl_ca                 |                        |
| group_replication_recovery_ssl_capath             |                        |
| group_replication_recovery_ssl_cert               |                        |
| group_replication_recovery_ssl_cipher             |                        |
| group_replication_recovery_ssl_crl                |                        |
| group_replication_recovery_ssl_crlpath            |                        |
| group_replication_recovery_ssl_key                |                        |
| group_replication_recovery_ssl_verify_server_cert | OFF                    |
| group_replication_recovery_use_ssl                | OFF                    |
| group_replication_ssl_mode                        | DISABLED               |
| have_openssl                                      | YES                    |
| have_ssl                                          | YES                    |
| ssl_ca                                            |                        |
| ssl_capath                                        |                        |
| ssl_cert                                          | /app/certs/capsule.crt |
| ssl_cipher                                        |                        |
| ssl_crl                                           |                        |
| ssl_crlpath                                       |                        |
| ssl_key                                           | /app/certs/capsule.key |
+---------------------------------------------------+------------------------+
19 rows in set (0.17 sec)

mysql> 

~~~

このPHPのサンプルコードは、[Bluemix CFコンテナのPHP と DBaaS MySQLを繋いでアプリを動かしてみた](http://qiita.com/MahoTakara/items/598fc3452be7dc712af4) と同じものです。 SSL接続に関するPHPのバージョンなど、同じです。 HAProxyの背後のMySQLサーバーにアクセスするため、PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT が必須です。このパラメータの値は、trueでもfalseでもどちらでも良く、この文字列が入っていることが必要な様です。


~~~
     1	<?php
     2	
     3	$user = 'admin';
     4	$pass = '************';
     5	$dsn = 'mysql:host=aws-us-east-1-portal.29.dblayer.com;port=21198;dbname=mysql';
     6	$ops = array(
     7	    PDO::MYSQL_ATTR_SSL_CA => './cert3_aws.pem',
     8	    PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false
     9	);
    10	
    11	$dbh = new PDO($dsn, $user, $pass, $ops);
    12	foreach($dbh->query('SELECT user,password_last_changed from user') as $row) {
    13	    print_r($row);
    14	}
    15	$dbh = null;
    16	
    17	?>
~~~

以下が実行結果です。 


~~~
imac:compose maho$ php test3.php 
Array
(
    [user] => root
    [0] => root
    [password_last_changed] => 2017-07-20 09:08:24
    [1] => 2017-07-20 09:08:24
)
Array
(
    [user] => mysql.sys
    [0] => mysql.sys
    [password_last_changed] => 2017-07-20 09:08:24
    [1] => 2017-07-20 09:08:24
)
Array
(
    [user] => _gr_user
    [0] => _gr_user
    [password_last_changed] => 2017-07-20 09:08:25
    [1] => 2017-07-20 09:08:25
)
Array
(
    [user] => compose-replication
    [0] => compose-replication
    [password_last_changed] => 2017-07-20 09:09:24
    [1] => 2017-07-20 09:09:24
)
Array
(
    [user] => admin
    [0] => admin
    [password_last_changed] => 2017-07-20 09:09:24
    [1] => 2017-07-20 09:09:24
)
~~~

# まとめとか感想
AWS上といっても、IBMクラウドで利用するのと、何ら変わりが無いもんですね。 性能を比べると差があるかもしれませんが、クラウドとはそういうもんなんですね。


# 参考資料

(1) Compose 社 ホームページ https://www.compose.com/