AWS RDS
早いもので更新が2週間空いてしまった。
AWSスクリプトを書くことが楽しくなっちゃってアウトプットをサボりました。
botoというPython製のAWSライブラリがあって、
これがまた利用者に優しくAPIリファレンスさえ読めば、
PythonもAWSも理解が乏しい私が簡単にAWSの環境構築スクリプトを組めちゃいました。
さて、本題。
前回はEC2インスタンスを作成して、Webサーバを立ち上げました。
今回はRDSインスタンスを立ち上げて、Webサーバと連携します。
EC2でWebAP構築
↓
RDSでWebAP-DB構築 (今回はここ)
↓
AMIでEC2のイメージ化、複製
↓
ELBで冗長化
↓
ElastiCacheでセッション管理
↓
S3にアクセスログ保存
↓
(できれば)SQSでWebAP連携
では早速RDSを作成しましょう。
(キャプチャは後日こっそりつけときます)
あれ?
2週間の間にEC2インスタンスのOSがRHEL7になってる。。。
- RDS画面へ遷移
AWSのメニューからRDSを選択
- RDS作成開始
[Get Started Now]ボタンやら[Launch DB Instance]ボタンやらをクリック
- DBエンジン選択
DBエンジンは4種類が選べます。(ブログ執筆現在:2015/04/18)
Auroraはまだ東京リージョンでは登場していません。- MySQL
- PostgreSQL
- Oracle Database
- Standard Edition One
- Standard Edition
- Enterprise Edition
- Microsoft SQL Server
- Express
- Web Edition
- Standard Edition
- Enterprise Edition
今回はMySQLを利用します。
- MultiAZ
MultiAZかどうかを選択します。
MultiAZはDBの配置方式として複数のAZに配置するかどうかです。
MultiAZを選択すると、稼働率99.95%以上を保証されます。
99.95%を下回る場合、AWSから返金があります。
※注意:MultiAZは無償枠外です!
私のような無償プレイヤーは要注意です。
でも、本番運用するような場合は必須だと思う。
- 基本設定
- インスタンス設定
- Engineバージョン
- Instanceタイプ
t1.micro以外は無償枠外
-
- ストレージタイプ
-
- ストレージサイズ
- DB設定
DNS等に利用され、データベースでは持たないっぽ
-
- DBユーザ名
- パスワード
- インスタンス設定
- 詳細設定
- ネットワーク設定
- VPC
- SubnetGroup
VPCのSubnetとは別で、複数のSubnetをまとめたもの
-
- Availability Zone
- SecurityGroup
EC2作成時とは別でDBポート番号のみを許可した紐づけるのが望ましい
- DB詳細設定
- DB名
作成する空のデータベース
-
- ポート番号
最初からデフォルト値が入っている
以上の設定で作成されます。
- ネットワーク設定
- 作成中
けっこう時間かかります。。。
- APサーバ作成
DB作成中にDBを利用可能なAPサーバを構築しましょう。
APサーバはDjangoでちょちょいと。。。
ん?
あれ?こうかな。
ダメだな。
あー、これか。
はぁ。。。
あーーーー
ですよねー
だいたいこういう時ってSELINUXですよねー
ちょちょいと、3時間(内、SELINUXに2時間半)で出来ました。
さて、そろそろRDS立ち上がったかな。簡単にやったことを備忘録
# yum install -y gcc python-devel mysql mysql-devel # pip install django mysql-python # django-admin startproject project # cd project # vi project/settings.py databaseの設定追記 # ./manage.py startapp app # vi project/settings.py appを追加 # vi app/models.py Userクラス追加 # ./manage.py makemigrations # ./manage.py makemigrate # vi app/views.py list関数定義 UserテーブルからSelectしたデータにHelloを付けて返す # vi project/urls.py list/とapp.views.listを紐付け # vi /etc/httpd/conf.module.d/10-wsgi.conf 魔法の言葉を追加 # systemctl # setenforce 0 こ、こいつまで遠かった。。。
- DB接続確認
試験用にDBを設定します。# mysql -h <RDS Public DNS> -u <username> -p Password: > show databases; +--------------------+ | Database | +--------------------+ | information_schema | | innodb | | mysql | | newdb | | performance_schema | +--------------------+
newdbがRDS作成時に指定したDB名です。
> use newdb; Database changed > show tables; +----------------------------+ | Tables_in_newdb | +----------------------------+ | app_user | | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | django_admin_log | | django_content_type | | django_migrations | | django_session | +----------------------------+ > desc app_user; +-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(32) | NO | | NULL | | | create_date | date | NO | | NULL | | +-------------+-------------+------+-----+---------+----------------+
Djangoが勝手に色々作ってます。
app_userテーブルにデータを登録して取得します。> insert into app_user values(1, 'fuji', '2015-04-18'); Query OK, 1 row affected (0.00 sec) > select * from app_user; +----+------+-------------+ | id | name | create_date | +----+------+-------------+ | 1 | fuji | 2015-04-18 | +----+------+-------------+ 1 row in set (0.00 sec)
おk
- 接続確認
早速繋いでみましょう。# curl http://<EC2 Instance Public DNS>/django/list/ Hello, fuji
おー、うまくいきました。
今回は
クライアント -> Internet -> Web -> AP -> RDS
というあるある構成をAWS上に作ることができました。次回は今回作ったAPサーバをAMIにイメージ化して複製します。