EC2のEBSボリュームからインスタンスを起動できるようになりました
これは実に画期的なことですよ!具体的な話は週末にでもまとめようと思いますが、とりあえずのまとめを今回は業務としてのブログのほうに書かせていただいているので、よければご覧くださいませ。
これは実に画期的なことですよ!具体的な話は週末にでもまとめようと思いますが、とりあえずのまとめを今回は業務としてのブログのほうに書かせていただいているので、よければご覧くださいませ。
※この記事は、Amazon Relational Database Service Developer GuideのAPI Version 2009-10-16版をもとにしています。
Amazon Relational Database Service(以下RDS)は、MySQL 5.1が稼働するサーバーをEC2インスタンスライクに利用することができるサービス。Amazon Web Servicesのアカウントがあれば、Webから申し込みをするだけで、初期費用なしで利用を開始することが可能。
mysqlコマンドで、データベースインスタンスのDNS名(FQDN)およびポート番号を指定する。データベースインスタンスのバックアップには、自動バックアップとデータベーススナップショットの2種類がある。自動バックアップはあらかじめ指定した時間帯に自動的にバックアップがとられ、バックアップデータが一定期間だけ保管される。バックアップデータが保管されている間はいつでもリカバリすることができる。データベーススナップショットは、ユーザーが自分で作成するもので、いつでもリストアすることができ、スナップショットはユーザーが削除するまで保管され続ける。
どちらの場合も、バックアップ時に数分間のI/Oフリーズが発生する(原文:A brief I/O freeze (typically lasting a few minutes) will occur during both automated and user-initiated backup operations.)。
自動バックアップは、毎日、あらかじめ指定された2時間のバックアップ時間帯(backup window)のどこかでバックアップを自動作成し、保持期限(retention period)の間だけバックアップを保管する。自動バックアップは、新しいデータベースインスタンスを起動した際はデフォルトで有効となる。
自動バックアップを有効にするには、データベースインスタンスのbackup-retention-periodパラメータをゼロ以外の値に設定する。データベースインスタンスの起動後もパラメータの変更は可能。パラメータの値がゼロ以外の値に変更されると、最初のバックアップはただちに行われる。パラメータをゼロに変更すると自動バックアップはオフになり、そのデータベースインスタンスのすべての自動バックアップされたデータは削除される。
自動バックアップを行うバックアップ時間帯はpreferred-backup-windowパラメータで設定する。バックアップ時間帯が設定されていない場合は、システムは自動的に時間帯を設定する(us-east-1リージョンで稼働している場合はUTCの午前3時〜午前5時となる)。バックアップ時間帯の変更はただちに反映されるが、最低でも現在時刻より10分先でなければならない。また、インスタンスの週次メンテナンス時間帯と重なることはできない。
日毎の自動バックアップに加えて、データベースチェンジログも保管される。これにより、最大で直近5分前までの状態に復元することができる。
データベースインスタンスのバックアップはすべて単一の場所(availability zone)に格納される。何らかの理由でデータベースインスタンスが利用不能になると、データベースインスタンスはfailed状態になる。そうなった場合、rds-restore-db-instance-to-point-in-timeコマンドを使い、直近のバックアップを使ってデータベースインスタンスを復元することができる。
データベーススナップショットはユーザーの指示によって作成される。スナップショットはユーザーが削除しない限り残る。
データベーススナップショットを作成するにはrds-create-db-snapshotコマンドを使い、リストアにはrds-restore-db-instance-from-snapshotコマンドを使う。保管されているスナップショットの一覧はrds-describe-db-snapshotsコマンドで表示することができる。
RDSを利用するには、Java 1.5とAmazon RDS Command Line Toolkitが必要。
ダウンロードしたAmazon RDS Command Line Toolkitのzipファイルを展開し、任意のディレクトリに配置する。
$ mv RDSCli-1.0.001 ~/apps
環境変数AWS_RDS_HOMEに、Amazon RDS Command Line Toolkitのディレクトリパスを設定する(必要に応じてシェルの設定ファイルにも記述する)。
$ export AWS_RDS_HOME=$HOME/apps/RDSCli-1.0.001
AWS_RDS_HOME以下のbinディレクトリを環境変数PATHに加える。
$ export PATH=$PATH:$AWS_RDS_HOME/bin
UNIXの場合はbinディレクトリ内のスクリプトに実行権限を与える。
$ chmod +x $AWS_RDS_HOME/bin/*
APIを利用するためにAmazon Web Servicesアカウントの情報を記述したファイルを作成する。雛形として$AWS_RDS_HOME/credential-file-path.templateが用意されているので、これをコピーして使う。
$ cp $AWS_RDS_HOME/credential-file-path.template $AWS_RDS_HOME/credential-file-path
ファイルには、以下のようにAWSアクセスキーIDとAWSシークレットアクセスキーを記述する。
AWSAccessKeyId=アクセスキーID
AWSSecretKey=シークレットアクセスキー
編集したファイルの権限を変更し、他のユーザーに見られないようにする。
$ chmod 600 $AWS_RDS_HOME/credential-file-path
環境変数AWS_CREDENTIAL_FILEに、ファイルのパスを設定する(必要に応じてシェルの設定ファイルにも記述する)。
$ export AWS_CREDENTIAL_FILE=$AWS_RDS_HOME/credential-file-path
RDSにアクセスできるか確認するために、データベースインスタンスの一覧を表示する。
$ rds-describe-db-instances --headers
最初はデータベースインスタンスが起動していないため、何も表示されない。この時、以下のように表示された場合は、AWSアカウントのほうでRDSの利用申請がされていないので、先にRDSにサインアップしておく。
$ rds-describe-db-instances --headers
rds-describe-db-instances: Refused: Subscription to Amazon RDS Service, ProductCode AmazonRDS, required.
AWSRequestId:95477738-c2c8-11de-807a-79c03c55f7d4
データベースインスタンスを作成するには、rds-create-db-instanceコマンドを利用する。
$ rds-create-db-instance --db-instance-identifier myinstance \
--allocated-storage 5 \
--db-instance-class db.m1.small \
--engine MySQL5.1 \
--master-username juno \
--master-user-password testtest \
--db-name MyDatabase \
--headers
--db-instance-identifierはデータベースインスタンス識別用の名前--allocated-storageは割り当てるストレージ容量(5〜1024GB)--db-instance-classは利用するマシン(db.m1.small, db.m1.large, db.m1.xlarge, db.m2.2xlarge, db.m2.4xlarge)--engine は利用するエンジン--master-usernameと--master-user-passwordはマスターユーザーのログイン情報--db-nameは作成するデータベース名作成に成功すると、以下のように表示される。
DBINSTANCE DBInstanceId Class Engine Storage Master Username Status Backup Retention
DBINSTANCE myinstance db.m1.small mysql5.1 5 juno creating 1
SECGROUP Name Status
SECGROUP default active
PARAMGRP Group Name Apply Status
PARAMGRP default.mysql5.1 in-sync
データベースインスタンスの状態を表示するには、rds-describe-db-instancesコマンドを利用する。
$ rds-describe-db-instances --headers
DBINSTANCE DBInstanceId Class Engine Storage Master Username Status AZ Backup Retention
DBINSTANCE myinstance db.m1.small mysql5.1 5 juno creating us-east-1d 1
SECGROUP default active
PARAMGRP default.mysql5.1 in-sync
上記の場合はStatusがcreatingなので、データベースインスタンスはまだ利用可能にはなっていない。サービスイン直後でリクエストが殺到していたせいかもしれないが、インスタンスが利用可能になるまでに20分〜30分ほどかかった。
データベースインスタンスへのアクセスを許可するネットワークを設定するには、rds-authorize-db-security-group-ingressコマンドを利用する。
ネットワークアクセス許可の設定はデータベースセキュリティグループに対して行う必要がある。データベースインスタンスの起動時に特に指定をしなかった場合はdefaultというデータベースセキュリティグループが割り当てられているので、このdefaultグループに対してCIDRでアクセス許可を設定する。
$ rds-authorize-db-security-group-ingress default --cidr-ip xxx.xxx.xx.x/xx --headers
SECGROUP Name Description
SECGROUP default default
IP-RANGE IP Range Status
IP-RANGE xxx.xxx.xx.x/xx authorized
以下のようにデータベースインスタンスの状態がavailableとなり、FQDNが表示されたら、データベースへの接続が可能となる。
$ rds-describe-db-instances --headers
DBINSTANCE DBInstanceId Created Class Engine Storage Master Username Status Endpoint Address Port AZ Backup Retention
DBINSTANCE myinstance 2009-10-27T08:25:08.887Z db.m1.small mysql5.1 5 juno available myinstance.cowx10gz0tao.us-east-1.rds.amazonaws.com 3306 us-east-1d 1
SECGROUP Name Status
SECGROUP default active
PARAMGRP Group Name Apply Status
PARAMGRP default.mysql5.1 in-sync
試しに、mysqlコマンドを使ってローカルマシンから接続する。
$ mysql -h myinstance.cowx10gz0tao.us-east-1.rds.amazonaws.com -P 3306 -u juno -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 65
Server version: 5.1.38-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select version();
+------------+
| version() |
+------------+
| 5.1.38-log |
+------------+
1 row in set (0.18 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| MyDatabase |
| innodb |
| mysql |
| tmp |
+--------------------+
5 rows in set (0.19 sec)
上記の通り、通常のMySQLサーバーと同様に操作することができる。
データベースインスタンスを削除する場合は、rds-delete-db-instanceコマンドを利用する。
$ rds-delete-db-instance myinstance --skip-final-snapshot true --headers
Once you begin deleting this database, it will no longer be able to accept
connections.
Are you sure you want to delete this database? [Ny]y
削除確認が行われ、yを入力するとデータベースインスタンスの削除が開始される。
まだ、読んでいる途中なので感想というわけではないのだけど、インターネット黎明期のエピソードとして、こんな話が書かれている。
これは初のインターネットワームと言われるソフトウェアで、コーネル大学の大学院生、ロバート・タッパン・モーリス・ジュニア(当時23歳)が作ったものだった。彼はニューヨーク州イサカの端末から、まず、MITのコンピューターをワームに感染させた。ワームは感染したマシンにあるアドレスブックを次々にチェックし、インターネット上にある他のコンピューターをみつける。動作はシンプル。自分のコピーを他のマシンに送り、そのマシンですでに動いていたソフトウェアと一緒に自分のコピーを走らせる。これをくり返すだけである。
このワームは、わずか1日の間に当時インターネットに接続されていたコンピューターの5%から10%に感染したと言われている。
(中略)
こんなことをなぜしたのかと尋ねられたモーリスは、インターネットに接続されたマシンの台数を数えたかったと答えた(パソコン通信サービスでは会員数が正確に把握できたが、シンプルなインターネットにはそのようなメカニズムがなかった)。解析してみると、モーリスのプログラムはそのような機能となっていた。ただ、ちょっと間抜けな作りになっていたのだ。きちんと作られていればホストの動作速度が落ちることはなく、注意を集めることもなかっただろう。そうすれば、数日あるいは数ヶ月もインストールされた状態が続き、「存在確認」メッセージをモーリスが指定したマシンに送るなど、さまざまな活動を行い、デジタル的集計が行えたはずであった。
(中略)
モーリスの行動に対しては、コンピューター研究者のコンセンサスとして、一定の処罰に値するが「前途を閉ざすほど厳しい」ものとすべきではないとした。モーリスに対して下された処罰は、まさしくそのようなものだった。モーリスが正式に謝罪したほか、刑事裁判では、3年間の保護観察、400時間の労働奉仕、10,050ドルの罰金が言い渡された。しかしキャリアが失われることはなく、その後モーリスはハーバードに移り、1995年に友人と起業したドットコムスタートアップを1998年、ヤフーに4,900万ドルで売却する。博士号も取得し、現在はMIT教授として活躍している。
ロバート・モーリス、ベンチャー、4,900万ドルで売却、ヤフー…ってViawebをポール・グレアムと設立したロバート・モリスじゃねえか。
Robert Tappan Morris – Wikipediaを読んでみると、
He is best known for creating the Morris Worm in 1988, considered the first computer worm on the Internet.
ビンゴ!