bekkou68 の日記

Gogengo! や IT 技術など。

Amazon EC2 インスタンスと RDS インスタンスをつくって連携する手順

はじめに

Amazon EC2 インスタンスと RDS インスタンスをつくって連携する手順のメモです。



このエントリのゴール

Amazon EC2 でアプリインスタンスAmazon RDS で DBインスタンスをそれぞれつくり、お互いに連携することです。staging と production それぞれの設定を記載しています。



前提

  • Amazon EC2 のアカウントを持っている
  • プロジェクト名は myproject とします。適宜おきかえてください

1. Amazon RDS で DBインスタンスをつくる

AWS Management Console を開き、RDS を選択します。

1.1. パラメータグループ・セキュリティグループをつくる(2014 年 7 月 16 日 更新)

まずはパラメータグループをつくります。Navigation > DB Parameter Groups > Create を選択し以下のとおり入力します。

  • DB Parameter Group Family: mysql5.5
  • DB Parameter Group Name: myproject
  • DB Parameter Group Description: 任意

つくったパラメータグループを選択し、以下のパラメタを設定します(Viewingフォームでインクリメンタル検索してくれるので便利です)。

スロークエリに関する設定(参考)。

  • slow_query_log: 1(0 or 1。1 を指定するとスロークエリがテーブルに吐かれます。use mysq; select * from slow_log limit 5; 等で中身を見られます)
  • long_query_time: 0.5 くらい

文字コードの設定。

  • character_set_client: utf8
  • character_set_database: utf8
  • character_set_server: utf8

Amazon EC2 のセキュリティグループを作成します。

  • Name: myproject
  • Description: 任意

次に RDS のセキュリティグループをつくります。Navigation > DB Security Groups > Create を選択し以下のとおり入力します。

  • Name: myproject
  • Description: 任意

つくった EC2 のセキュリティグループを選択し、以下のカラムを追加します。

  • Connection Type: EC2 Security Group # EC2 のアプリインスタンスと DBインスタンスとを内部で通信できるようにする
  • EC2 Security Group: <つくったセキュリティグループ>
1.2. DBインスタンスをつくる

パラメータグループ・セキュリティグループをもとに DBインスタンスをつくります。Navigation > DB Instances > Launch DB Instance を選択してください。

「ENGINE SELECTION」で MySQL を選択してください。

「DB INSTANCE DETAILS」で以下の項目を入力して continueボタンを押してください。

  • License Model: General Public License
  • DB Engine Version: MySQL 5.5.27 (default) # 適宜 ex. default にして最新にしておく
  • DB Instance Class: 任意 # ex. staging: db.t1.micro, production: db.t1.small
  • Multi-AZ Development ※A: No # ex. staging は No、production は Yes
  • Auto Minor Version Upgrade ※B: No
  • Allocated Storage: 10 # ex. staging は10、production は 100
  • Use Provisioning IOPS: チェックなし
  • DB Instance Identifier: myproject-[staging|production]
  • Master Username: XXXX # ex. root
  • Master Password: XXXX # 任意

以下、補足。

  • ※A
    • Multi-AZ にするとマスターが落ちた時にスレーブをマスターへ自動で昇格してくれる
    • また、スレーブの数を自動で増やしてくれる
  • ※B
    • MySQL のマイナーバージョンがあがったら自動でアップグレードするかどうか
    • Yes にするとアップグレードのたびにサービスが数分程度止まることがあるので No にした
    • ただ、マイナーバージョンを 10 ほどアップデートしていないと、強制的に maintenance window のタイミングでアップデートされるようだ

「ADDITIONAL CONFIGURATION」で以下の項目を入力して continueボタンを押してください。

  • Database Name: myproject_[staging|production]
  • Database Port: 3306
  • Availability Zone: 任意
    • Multi-AZ Development を Yes にすると選択できないようだ
    • 後ほどつくるアプリインスタンスの Availability Zone と同じにすると通信が高速になる
  • Parameter Group: <つくったパラメータグループ>
  • DB Security Group: <つくったセキュリティグループ>

「MANAGEMENT OPTIONS」で以下の項目を入力して continueボタンを押してください。環境別に記載します。

  • staging
    • Enabled Automatic Backups: No
    • Mainteinance Window: No Preference
  • production
    • Enabled Automatic Backups: Yes
    • Backup Retention Period: 1 days
    • Backup Window: No Preference
    • Mainteinance Window: No Preference

確認画面で確認し、OKならば launchボタンを押します。DBインスタンスの Status が available になれば完了です。10分くらいかかったのでゆっくり待ちましょう。



2. Amazon EC2 でアプリインスタンスをつくる

AWS Management Console の EC2 を選択します。画面右上の region から適宜選択します。

メニュー INSTANCES > Instances を選択します。

Launch Instanceボタンを押して classic wizard を選択し continueボタンを押します。

CHOOSE AN AMI で Amazon Linux AMI 2012.09.1 64bit を選択します。

INSTANCE DETAILS で以下のとおりに入力して continueボタンを押します。

続いて Advanced Instance Options が表示されるが特に何もせず continueボタンを押します。

さらに Storage Device Configuration でも何もせず continueボタンを押します。

タグも追加せず continueボタンを押します。

CREATE KEY PAIR で以下の項目を入力して createボタンを押します。

  • product name: ex. myproject_production # 鍵の名前になる
  • group name: サービス名
  • description: 任意

Choose one or more of your existing Security Groups で、以下を Add Rule します。

  • New Rule: HTTP で Source はそのまま
  • New Rule: SSH で Source はそのまま

確認画面で確認して Launch ボタンを押します。こちらのインスタンスも作成まで時間がかかるのでしばらく待ちます。つくり終わったら SSH接続できることを確認します。

$ ssh -i <つくった pem> ec2-user@<アプリインスタンスの Public DNS>

また、SSH接続している状態で DB接続もできることを確認します。

$ mysql -u<ユーザ名> -h<DBインスタンスの Public DNS> -p

念のためセキュリティグループの外、たとえばローカルからつながらないことも確認しておきましょう。



Route53

各アプリインスタンスは Route53 でわかりやすいドメインをふっておくと SSHログインする際に便利です。



Parameter Group の更新

Multi-AZ が有効になっている前提とする。
Parameter Group を更新したい場合は、値を更新して Save したのち、Instance Action > Modify を選択。Apply Immediately にチェックをつけて Continue。しばらくすると AWS Console のイベントログに "Updated parameter slow_query_log to 1 with apply method immediate" といったような表示がされる。



最後に

これで完成です! あとは Nginx を入れるなど好きなようにカスタマイズしましょう。



関連エントリ

Amazon ELB を作成し Amazon EC2 への負荷を分散する設定


(2017 年 7 月 10 日 最終更新)