AWS(Amazon Web Services) から提供されているクラウドサービスのラインナップは数多くあります。個人的にはこれまで IaaS の EC2 に、EC2 を固定 IP アドレスで使う Elastic IP、そしてストレージサービスであり静的HTMLサーバーにも使える S3 を使う機会が多くありました。
データベースサービスである RDS に関しては、その存在は以前から知っていて、MySQL インスタンスをセットアップしてテスト的に利用したことはありました。が、この RDS のデータベースはデフォルトの文字コードが latin1 になっていて※、日本語データを扱うサービスとして使うにはその設定を(一般的には UTF-8 などに)変更する必要がありました。
※正確には character_set_server と character_set_database の設定値が latin1 になっています。
例えば普通のサーバー環境だったり EC2 環境であれば、MySQL のデータベースの文字コードは /etc/my.cnf を直接書き換えることで簡単に変更できます。MySQL インストール時の一連の作業の1つとして認識しているエンジニアも多いでしょうし、なので初期設定値は問題ではないと考える人も多いかもしれません。
ただ今回は Amazon RDS という特殊な環境です。EC2 と違って SSH で直接ログインして /etc/my.cnf を編集して・・ というわけにはいかない状況です。でも日本語データを扱う上では必須な変更です。さてどうするか?
Amazon RDS ではパラメータグループという概念でこの問題を解決しています。/etc/my.cnf を直接編集することは許されていませんが、このパラメータグループの中で利用する文字セットをあらかじめ(UTF-8 などに)指定した上で、データベース作成時にそのパラメータグループを使って作成する、という方法で UTF-8 のデータベースを利用することができるようになります。
しかし、このパラメータグループの作成や編集をするには、これまでは Amazon から無料提供されている Amazon RDS Command Line Toolkit というコマンドラインツールをダウンロード&導入(更に導入の前提として Java 実行環境が必要だったりする)して、このコマンドラインツールからコマンドを実行するしかありませんでした。
要は「RDS で日本語データを扱う」というただそれだけのことが、できないことはないけど色々面倒だったわけでした。
が、最近になって改めて RDS を使った時にこのコマンドラインツールを使わなくても日本語環境を整えることができるようになっていたことに気付きました(いつからだろ??)。設定ファイルを直接書き換えるような方法と比べるとまだちょっと面倒ではありますが、コマンドラインツールはもう必須ではなく、同様の処理がウェブのUIからも可能になっていました。
その設定方法と内容は以下の通りです。Amazon RDS のウェブコンソールから "Parameter Groups" を選択します。標準で "default-mysql.5.x" という名前のパラメータグループがありますが、これを使うと文字化けから逃れれられなくなります。そこで "Create DB Parameter Group" ボタンをクリックして新しい日本語用のパラメータグループを作成します(ここではパラメータグループの名前として "prod" と指定したとします)。
作成したパラメータグループの "Parameters" 以下にそのパラメータと設定内容が一覧で表示されますが、その中の character_set_database と character_set_server の値としてどちらにも utf8 を指定して保存します。これで UTF-8 用のパラメータグループが作成できました。
そして今作成したパラメータグループを指定して新たにデータベースインスタンスを作成します。ウェブコンソールの Instances を選択後に "Launch DB Instance" をクリックして新規にデータベースインスタンスを作成します。
DBの種類や名前、DBサイズなどを指定していった後の "Step 4: Additional Config" の段階になると、作成するデータベースインスタンスのパラメータグループを指定する箇所があります。ここで先程 utf8 を指定して作成したパラメータグループの名前(この例では "prod")をプルダウンから選択します。これで character_set_database と character_set_server の値が latin1 ではなく utf8 に設定されたデータベースインスタンスを作成するよう指定したことになります。後はこのまま進めてデータベースを作成します。
こうして作成したデータベースインスタンスの文字セットを確認するとこのような感じになりました:
なぜかまだ character_set_database の値はまだ latin1 のままですが、character_set_server の値は utf8 に変更できました。ここまで出来てしまえばこの状態から SQL コマンドで
> create database XXXX default character set utf8;
で新たに UTF-8 のデータベースを作成してしまえばいいだけのことです。
ちょっとまだ面倒な所はあるけど Amazon RDS で日本語データベースを作成するためだけに Java 環境を整えた上でコマンドラインツールを導入、という必要はなくなったように思えます。
Amazon RDS はバックアップ付きリレーショナルデータベースサーバーとして気軽に(条件次第では無料枠内でも)使えて便利だったのですが、この日本語環境の構築に難があった、という印象でした。いつの間にこのUIがウェブコンソールに付いたのか不明ですが、これなら利用上のハードルはかなり下がったかな。
データベースサービスである RDS に関しては、その存在は以前から知っていて、MySQL インスタンスをセットアップしてテスト的に利用したことはありました。が、この RDS のデータベースはデフォルトの文字コードが latin1 になっていて※、日本語データを扱うサービスとして使うにはその設定を(一般的には UTF-8 などに)変更する必要がありました。
※正確には character_set_server と character_set_database の設定値が latin1 になっています。
例えば普通のサーバー環境だったり EC2 環境であれば、MySQL のデータベースの文字コードは /etc/my.cnf を直接書き換えることで簡単に変更できます。MySQL インストール時の一連の作業の1つとして認識しているエンジニアも多いでしょうし、なので初期設定値は問題ではないと考える人も多いかもしれません。
ただ今回は Amazon RDS という特殊な環境です。EC2 と違って SSH で直接ログインして /etc/my.cnf を編集して・・ というわけにはいかない状況です。でも日本語データを扱う上では必須な変更です。さてどうするか?
Amazon RDS ではパラメータグループという概念でこの問題を解決しています。/etc/my.cnf を直接編集することは許されていませんが、このパラメータグループの中で利用する文字セットをあらかじめ(UTF-8 などに)指定した上で、データベース作成時にそのパラメータグループを使って作成する、という方法で UTF-8 のデータベースを利用することができるようになります。
しかし、このパラメータグループの作成や編集をするには、これまでは Amazon から無料提供されている Amazon RDS Command Line Toolkit というコマンドラインツールをダウンロード&導入(更に導入の前提として Java 実行環境が必要だったりする)して、このコマンドラインツールからコマンドを実行するしかありませんでした。
要は「RDS で日本語データを扱う」というただそれだけのことが、できないことはないけど色々面倒だったわけでした。
が、最近になって改めて RDS を使った時にこのコマンドラインツールを使わなくても日本語環境を整えることができるようになっていたことに気付きました(いつからだろ??)。設定ファイルを直接書き換えるような方法と比べるとまだちょっと面倒ではありますが、コマンドラインツールはもう必須ではなく、同様の処理がウェブのUIからも可能になっていました。
その設定方法と内容は以下の通りです。Amazon RDS のウェブコンソールから "Parameter Groups" を選択します。標準で "default-mysql.5.x" という名前のパラメータグループがありますが、これを使うと文字化けから逃れれられなくなります。そこで "Create DB Parameter Group" ボタンをクリックして新しい日本語用のパラメータグループを作成します(ここではパラメータグループの名前として "prod" と指定したとします)。
作成したパラメータグループの "Parameters" 以下にそのパラメータと設定内容が一覧で表示されますが、その中の character_set_database と character_set_server の値としてどちらにも utf8 を指定して保存します。これで UTF-8 用のパラメータグループが作成できました。
そして今作成したパラメータグループを指定して新たにデータベースインスタンスを作成します。ウェブコンソールの Instances を選択後に "Launch DB Instance" をクリックして新規にデータベースインスタンスを作成します。
DBの種類や名前、DBサイズなどを指定していった後の "Step 4: Additional Config" の段階になると、作成するデータベースインスタンスのパラメータグループを指定する箇所があります。ここで先程 utf8 を指定して作成したパラメータグループの名前(この例では "prod")をプルダウンから選択します。これで character_set_database と character_set_server の値が latin1 ではなく utf8 に設定されたデータベースインスタンスを作成するよう指定したことになります。後はこのまま進めてデータベースを作成します。
こうして作成したデータベースインスタンスの文字セットを確認するとこのような感じになりました:
なぜかまだ character_set_database の値はまだ latin1 のままですが、character_set_server の値は utf8 に変更できました。ここまで出来てしまえばこの状態から SQL コマンドで
> create database XXXX default character set utf8;
で新たに UTF-8 のデータベースを作成してしまえばいいだけのことです。
ちょっとまだ面倒な所はあるけど Amazon RDS で日本語データベースを作成するためだけに Java 環境を整えた上でコマンドラインツールを導入、という必要はなくなったように思えます。
Amazon RDS はバックアップ付きリレーショナルデータベースサーバーとして気軽に(条件次第では無料枠内でも)使えて便利だったのですが、この日本語環境の構築に難があった、という印象でした。いつの間にこのUIがウェブコンソールに付いたのか不明ですが、これなら利用上のハードルはかなり下がったかな。