More Related Content Similar to 20120303 jaws summit-rds-public Similar to 20120303 jaws summit-rds-public (20) More from Yasuhiro Horiuchi More from Yasuhiro Horiuchi (20) 20120303 jaws summit-rds-public1. JAWS
SUMMIT
2012
∼Amazon
RDS
を極める∼
2012年3月3日
堀内 康弘( @horiuchi)
テクニカルエバンジェリスト
Thursday, March 22, 12
2. Agenda
RDSとは
RDSデモ
RDSの機能
RDSの事例
RDSのTips
§ パラメータチューニング
まとめ
Copyright © 2011 Amazon Web Services
Thursday, March 22, 12
4. AWSプラットフォーム
サービス
データ
ベース
ネットワーク
&インフラ
【仮想サーバ】
Amazon EC2
エッジ
データセンター ロケーション
4
Thursday, March 22, 12
5. AWSプラットフォーム
【モバイルSDK】
AWS SDK for Android
【分散処理】
【メール配信】 & iOS
Amzon Elastic Amazon SES
MapReduce
サービス 【コンテナ管理】
AWS Elastic
【キューサービス】Amazon 【プッシュサービス】Amazon Beanstalk
SQS SNS
【デプロイ管理】
データ 【RDBMS】 【NoSQL】 CloudFormation
ベース Amazon RDS Amazon SimpleDB
【仮想ディスク】 【ロードバランサー】
Amazon Elastic Block Amazon Elastic Load 【名前解決】
store Balancing Amazon
Route 53
ネットワーク
&インフラ
【仮想サーバ】 【ストレージ】 【コンテンツ配信】
Amazon EC2 Amazon S3 CloudFront
【仮想ネットワーク】
Amazon VPC
エッジ
データセンター ロケーション
4
Thursday, March 22, 12
6. Amazon RDSとは?
RDBMS in the Cloud
§ MySQL, Oracle
メンテナンスレス
スケーラブルで柔軟
Thursday, March 22, 12
7. Amazon RDSとは?- 詳細 -
2009年に登場したクラウド上RDBMSサービス
設定と運用が容易な”データベース in クラウド”
EC2同様、管理の容易なDBサーバを数分で起動
自動バックアップ、パッチ更新、レプリケーションおよびリー
ドレプリカはAWSにお任せ
既存MySQL/Oracleアプリケーションとツールが利用可能
時間単位の従量課金 (DBインスタンスのクラスとリージョン
で価格は変動)
6
Thursday, March 22, 12
11. 自社構築 vs RDS
ラックへ設 電源とNW
HWの購入
置 を設定
Thursday, March 22, 12
12. 自社構築 vs RDS
OS
ラックへ設 電源とNW
HWの購入 インストー
置 を設定
ル
Thursday, March 22, 12
13. 自社構築 vs RDS
OS
ラックへ設 電源とNW
HWの購入 インストー
置 を設定
ル
基本設定
Thursday, March 22, 12
14. 自社構築 vs RDS
OS
ラックへ設 電源とNW
HWの購入 インストー
置 を設定
ル
RDBMS
基本設定 インストー
ル
Thursday, March 22, 12
15. 自社構築 vs RDS
OS
ラックへ設 電源とNW
HWの購入 インストー
置 を設定
ル
RDBMS RDBMS
基本設定 インストー レプリケー
ル ション設定
Thursday, March 22, 12
16. 自社構築 vs RDS
OS
ラックへ設 電源とNW
HWの購入 インストー
置 を設定
ル
RDBMS RDBMS
インストー レプリケー RDBMS
基本設定
稼働確認
ル ション設定
Thursday, March 22, 12
19. 自社構築 vs RDS
RDSだと
RDSのオプ
ションを選んで
起動!
Thursday, March 22, 12
20. 自社構築 vs RDS
RDSだと
RDSのオプ
アプリケーションを
ションを選んで 書く!!
起動!
Thursday, March 22, 12
23. RDSの起動
GUIから
コマンドラインから
SDKから
Thursday, March 22, 12
24. RDSの起動
GUIから
コマンドラインから
SDKから
Thursday, March 22, 12
27. ライセンス指定
DBバージョンを指定
DBタイプを指定
マルチAZオプション指定
マイナーバージョン自動更新
DBサイズ
Thursday, March 22, 12
28. データベース名
ポート番号
アベイラビリティゾーン
DBパラメーターグループ
DBセキュリティグループ
Thursday, March 22, 12
29. 自動バックアップ期間
日時バックアップ時刻
メンテナンス時刻
Thursday, March 22, 12
32. RDSの起動
GUIから
コマンドラインから
SDKから
Thursday, March 22, 12
33. RDSコマンドライン
RDS Command Line Tools
§ http://aws.amazon.com/developertools/2928
§ 最新版は1.6.001 (API 2012-01-15)
Javaベース
§ AWS_RDS_HOME/JAVA_HOME設定
キーの提供
§ アクセスキーのペア
§ X.509の証明書
Thursday, March 22, 12
34. RDSコマンドライン
rds-authorize-db-security-group-ingress rds-describe-db-snapshots
rds-create-db-instance rds-describe-engine-default-parameters
rds-create-db-instance-read-replica rds-describe-events
rds-create-db-parameter-group rds-describe-orderable-db-instance-options
rds-create-db-security-group rds-describe-reserved-db-instances
rds-create-db-snapshot rds-describe-reserved-db-instances-offerings
rds-delete-db-instance rds-modify-db-instance
rds-delete-db-parameter-group rds-modify-db-parameter-group
rds-delete-db-security-group rds-purchase-reserved-db-instances-offering
rds-delete-db-snapshot rds-reboot-db-instance
rds-describe-db-engine-versions rds-reset-db-parameter-group
rds-describe-db-instances rds-restore-db-instance-from-db-snapshot
rds-describe-db-parameter-groups rds-restore-db-instance-to-point-in-time
rds-describe-db-parameters rds-revoke-db-security-group-ingress
rds-describe-db-security-groups rds-version
Thursday, March 22, 12
35. コマンドラインからRDSを起動する
rds-create-db-instance yourdb
--allocated-storage 5
--db-instance-class db.m1.small
--engine mysql
--master-username admin
--master-user-password admin
--availability-zone ap-northeast-1a
--db-name hogedb
--db-security-groups default
--engine-version 5.5.8
--multi-az false
--region ap-northeast-1
Thursday, March 22, 12
36. RDSの起動
GUIから
コマンドラインから
SDKから
Thursday, March 22, 12
37. RDSのSDK
RDSの起動やメンテナンス等をSDKから
行うことが出来る
§ Java
§ .NET
§ PHP
§ など
Thursday, March 22, 12
38. Javaから起動する
public static void main(String[] args) throws IOException {
AmazonRDS client = new AmazonRDSClient(…);
client.setEndpoint("rds.ap-northeast-1.amazonaws.com");
CreateDBInstanceRequest req = new CreateDBInstanceRequest();
req.setDBInstanceIdentifier(“mydb");
req.setDBName(“mydb");
req.setMultiAZ(Boolean.FALSE); //マルチAZ設定
req.setDBInstanceClass(“db.m1.small”); //m1.smallを利用
req.setAllocatedStorage(new Integer(5)); // 5GB
req.setDBSecurityGroups(Arrays.asList("default"));
req.setEngine(“MySQL”); //MySQL 5.5.8を利用
req.setEngineVersion("5.5.8");
req.setMasterUsername("admin");
req.setMasterUserPassword("admin");
req.setAvailabilityZone(“ap-northeast-1a”);//AZを指定
//DBを作成する
DBInstance result = client.createDBInstance(req);
}
Thursday, March 22, 12
39. RDSのエンドポイント
Region Endpoint Protocol
US East (Northern Virginia) Region rds.us-east-1.amazonaws.com HTTPS
US West (Oregon) Region rds.us-west-2.amazonaws.com HTTPS
US West (Northern California) Region rds.us-west-1.amazonaws.com HTTPS
EU (Ireland) Region rds.eu-west-1.amazonaws.com HTTPS
Asia Pacific (Singapore) Region rds.ap-southeast-1.amazonaws.com HTTPS
Asia Pacific (Tokyo) Region rds.ap-northeast-1.amazonaws.com HTTPS
Thursday, March 22, 12
41. RDS(MySQL) の全体アーキテクチャ
アベイラビリティゾーンA アベイラビリティゾーンB
自動バック
自動バック データ同期
アップ
アップ 自動フェイルオーバー
非同期レプリケーション
スナップ
スナップ
ショット
ショット
29
Thursday, March 22, 12
42. RDS(MySQL) アーキテクチャ
アベイラビリティゾーンA アベイラビリティゾーンB
自動バック
自動バック データ同期
アップ
アップ 自動フェイルオーバー
非同期レプリケーション
マルチAZデプロイメント
スナップ
スナップ
ショット
ショット (マルチAZ)
30
Thursday, March 22, 12
43. マルチAZデプロイメントとは(マルチAZ)
ワンクリックで適用可能な耐障害性を高めるソリューション
§ 高い技術力を持つDBAが行っていた設計をそのままサービ
ス化
同期レプリケーション+自動フェイルオーバ
§ アプリ側での対処は必要なし
フェイルオーバのタイミング
§ パッチ適用などのメンテナンス計画停止
§ インスタンスやハードウェア障害
31
Thursday, March 22, 12
44. RDS(MySQL) アーキテクチャ
アベイラビリティゾーンA アベイラビリティゾーンB
自動バック
自動バック データ同期
アップ
アップ 自動フェイルオーバー
非同期レプリケーション
リードレプリカ
スナップ
スナップ
ショット
ショット
32
Thursday, March 22, 12
45. リードレプリカとは?
特定DBインスタンスの読み込み用のコピー
想定ユースケース
§ リードのスケーリング、ビジネスレポート
§ マルチAZの耐障害性の代替の機能ではない
マルチAZとは異なり、MySQL本来の非同期レプリケーションをそのま
ま使う
最大5台まで設定可能
マルチAZとリードレプリカを併用はもちろん可能
33
Thursday, March 22, 12
46. RDS(MySQL) アーキテクチャ
アベイラビリティゾーンA アベイラビリティゾーンB
自動バックアップ機能
自動バック
自動バック データ同期
アップ
アップ 自動フェイルオーバー
非同期レプリケーション
スナップ
スナップ
ショット
ショット
34
Thursday, March 22, 12
47. 自動バックアップ機能
RDS標準装備
1日1回+トランザクションログ
保存期間は最大8日間
§ それ以降はスナップショット保存
5分前までの任意の期間に復元可能
35
Thursday, March 22, 12
48. スケールアップ機能
マネージメントコンソールからスケールアップ可能
§ 一度停止が必要 (Multi-AZを有効にしていれば停止時間を少なくきる)
コマンドラインからも勿論可能
§ 例:rds-modify-db-instance hogedb -c db.m1.large --apply-immediately
CPUは1ECUから26ECUまで
メモリは1.7GBから68GBまで
ディスクは5GBから1TBまで
§ 大量書き込みなどスケールアウトでの対処が難しい場合にスケールアップで対処
可能
§ 増量できても削減できないので注意が必要
36
Thursday, March 22, 12
51. スケールアップ機能
・DBインスタンスのタイプ
・割り当てたストレージ量
・マルチAZ
・パラメータグループ
など自由に変更可能
Thursday, March 22, 12
53. Oracle
RDSとは
2011年Q2ロウンチ
§ Oracle
Database
11g
Release
2
Oracle
Database
SE1,
SE,
EE
+
オプションパック
ライセンス持ち込み(BYOL)
か
従量課金(時間単位)
初期はシングルインスタンスでレプリケーションなどはす
ぐに機能追加の予定
OracleVMのハードパーティショニングで稼働
40
Thursday, March 22, 12
54. RDSのOracleサポート
ライセンス持ち込み(BYOL)
§ RDS部分についてはAWSプレミアムサポート (インフラ部分含
む)
§ AWSがパッチとアップグレードを管理
§ Oracleデータベースに関してはOracleサポートIDを使った
Oracle社のサポート
従量課金ライセンス
§ RDS部分およびOracleに関してもAWSプレミアムサポートでカ
バー
41
Thursday, March 22, 12
58. Amazon RDSプライシング
Oracleの標準価格
AWSライセンス BYOL
(ライセンス持込)
45
Thursday, March 22, 12
59. RDSプライシング注意点
マルチAZでは価格は2倍になる
ストレージで$0.12/GB
IOで$0.12/100万リクエスト
バックアップ用ストレージは無料
RDS用リザーブドインスタンスもご提供
§ 1年間、3年間のコミットによる価格を大幅削減
46
Thursday, March 22, 12
60. Oracle RDSプライシング
複数ライセンスオプションが今後利用可能に
§ 既存のOracleライセンス
§ OracleまたはOracleパートナーから新規にOracleライセンス
を購入
§ Amazonからの従量課金制での利用
Amazon RDSの2つのプライシングモデル
§ オンデマンドな時間単位の従量課金モデル
§ Amazon RDS リザーブドインスタンス
47
Thursday, March 22, 12
63. 大規模事例 – gumi様
ソーシャルゲーム提供
AWS上で開発・運用
特にRDSを積極的にお使いいただいている
Thursday, March 22, 12
64. Gumiさんのサーバー構成
ELB
App
App
サーバ
App c1.xlarge
サーバ
サーバ - 60台
Cache KVS
KVS
サーバ サーバ 同期
サーバ
m1.large
m1.large RDS
- 4台
- 8台 x 2 - マルチAZ
ゾーンA ゾーンB
Thursday, March 22, 12
65. gumi事例: AWS運用モデル
複数のゲームをAWSで運用(全体で25億PV/月)
§ 最大ゲーム1本で6000万PV/日
§ ゲーム毎に、ELB+EC2+RDSの同じセットを再利用
人気ゲーム ゲームA ゲームB ゲームC
ELB ELB ELB
ELB
App
App
App
App App サーApp
サーApp App
App サー
サー
サー サー
サー
App サー サー バ
バ バ ババ
App
サーバ バ バ
App
サーバ バ バ Cach KVS
サーバ KVS
e サー
サー
Cach KVS
KVS Cach KVS サー
e サー KVS バ
サー e サー
サー バ
サー サー バ
ババ バ
バ バ
バ
Cache KVS
サーバ KVS
サーバ
サーバ
Thursday, March 22, 12
66. gumi事例: AWS運用モデル
複数のゲームをAWSで運用(全体で25億PV/月)
§ 最大ゲーム1本で6000万PV/日
§ ゲーム毎に、ELB+EC2+RDSの同じセットを再利用
人気ゲーム ゲームA ゲームB ゲームC
ELB ELB ELB
ELB
App
App
App
App App サーApp
サーApp App
App サー
サー
サー サー
サー
App サー サー バ
バ バ ババ
App
サーバ バ バ
App
サーバ バ バ Cach KVS
サーバ KVS
e サー
サー
Cach KVS
KVS Cach KVS サー
e サー KVS バ
サー e サー
サー バ
サー サー バ
ババ バ
バ バ
バ
Cache KVS
サーバ KVS
サーバ
サーバ
インフラエンジニアは1名!
(~2011/8、今は3名!)
Thursday, March 22, 12
67. gumi事例: AWS運用モデル
ゲームのライフサイクルにあわせて、
サーバー台数、サーバースペックを調整
開発時
ELB
ELB
App
サーバ
App App
App
サーバ サーバ
App
サーバ
サーバ
c1.xlarge
- 60台
1台にまとめて Cache KVS
KVS
サーバ サーバ 同期
個人毎に m1.large
サーバ
- 4台 m1.large RDS
- 8台 x 2 - マルチAZ
ゾーンA ゾーンB
Thursday, March 22, 12
68. gumi事例: AWS運用モデル
ゲームのライフサイクルにあわせて、
サーバー台数、サーバースペックを調整
開発時 申請時
ELB
ELB
App
サーバ
App App
App
サーバ サーバ
App
サーバ
サーバ
c1.xlarge
- 60台
1台にまとめて Cache KVS
KVS
サーバ サーバ 同期
個人毎に m1.large
サーバ
- 4台 m1.large RDS
- 8台 x 2 - マルチAZ
ゾーンA ゾーンB
最小構成に
Thursday, March 22, 12
69. gumi事例: AWS運用モデル
ゲームのライフサイクルにあわせて、
サーバー台数、サーバースペックを調整
開発時 申請時 公開時
ELB
ELB
App
サーバ
App App
App
サーバ サーバ
App
サーバ
サーバ
c1.xlarge
- 60台
1台にまとめて Cache KVS
KVS
サーバ サーバ 同期
個人毎に m1.large
サーバ
- 4台 m1.large RDS
- 8台 x 2 - マルチAZ
ゾーンA ゾーンB
最小構成に
Appサーバーを8台
DBをマルチAZに(m1.large)
Thursday, March 22, 12
70. gumi事例: ピーク時のさばき方
突発的な対応が必要なときは、EC2、RDSのス
ペックを上げて、時間をかせぐ
ELB
App
App m1.large
サーバ
App
サーバ
サーバ
メモリ 7.5GB
CPU 4ECU
Cache KVS
KVS
サーバ サーバ
サーバ
Thursday, March 22, 12
71. gumi事例: ピーク時のさばき方
突発的な対応が必要なときは、EC2、RDSのス
ペックを上げて、時間をかせぐ
ELB
App
App m1.large m2.4xlarge
サーバ
App
サーバ
サーバ
メモリ 7.5GB メモリ 68GB
CPU 4ECU CPU 26ECU
Cache KVS
KVS
サーバ サーバ
サーバ
Thursday, March 22, 12
72. gumi事例: バックアップの仕組み
データベース部分
§ RDSのポイントインタイムリカバリを利用(8日分)
• 5分前以前の何時の時点にも戻せる
§ 8日前以前の分については、
手動スナップショットを利用する
Thursday, March 22, 12
73. gumi事例: モニタリング
CloudWatch + SNS
§ CloudWatch + SNSで負荷やディスク残量を
監視
§ ディスクク容量が少なくなるとメールで通知
Thursday, March 22, 12
74. Gumiさんの事例からわかる事
非常にスケールが必要なアプリケーションでもRDSは有効
§ スケールアップ
§ スケールアウト(リードレプリカ)
DBの管理コストを劇的に削減し、アプリケーションを構築
する部分にリソースを集中できる
RDSの柔軟さを活用する事で、ピークにもあわてず対応で
きる
Thursday, March 22, 12
76. RDSのTips
DBセキュリティグループ
RDSへのデータの移行
パラメーターチューニング
タイムゾーンに関して
メトリクス
マルチAZに関しての考え方
いつRDSを使うべきか
Thursday, March 22, 12
77. DBセキュリティグループ
RDS専用のセキュリティグループ
§ EC2のセキュリティグループを許可する
• または
§ CIDRで許可する
Thursday, March 22, 12
78. DBセキュリティグループ
RDS専用のセキュリティグループ
§ EC2のセキュリティグループを許可する
• または
§ CIDRで許可する
rds-create-db-security-group hoge --db-security-group-description "foo"
rds-authorize-db-security-group-ingress hoge -g bar -o $ACCOUNT_ID
-o:アカウントID
-g:EC2セキュリティグループ名
rds-revoke-db-security-group-ingress hoge -o $ACCOUNT_ID -g bar
Thursday, March 22, 12
79. RDSへのデータの移行
MySQLを使った一例
§ mysqldump
• 少量データの場合直接インポート
§ mysqlimportでバルクインポート
• フラットなファイルで複数に分割、圧縮
• RDSを一旦停止、スナップショット作成
• スナップショットから新DB作成
• 自動バックアップを一旦停止
• mysqlimportでのデータのロード
• 自動バックアップ復旧
• サービス再開
Thursday, March 22, 12
80. パラメータチューニング
ManagementConsoleからは出来ない
DBパラメータグループを作成して、パラメータをチューニン
グする
§ RDSコマンドを使う必要がある
• rds-create-db-parameter-group
• rds-modify-db-parameter-group
//Slow queryを取得するよう変更した例
rds-modify-db-parameter-group group1
-p "name=slow_query_log, value=ON, method=immediate"
-p "name=long_query_time, value=1, method=immediate"
-p "name=min_examined_row_limit, value=100, method=immediate"
Thursday, March 22, 12
81. パラメータチューニング(2)
$ rds-describe-db-parameters group1 --source user
DBPARAMETER long_query_time engine-default integer dynamic true
DBPARAMETER min_examined_row_limit engine-default integer dynamic true
DBPARAMETER slow_query_log engine-default boolean dynamic true
$ rds-describe-db-parameters group1 --source user
DBPARAMETER long_query_time 1 user integer dynamic true
DBPARAMETER min_examined_row_limit 100 user integer dynamic true
DBPARAMETER slow_query_log 1 user boolean dynamic true
Thursday, March 22, 12
82. パラメータチューニング(3)
注意点
§ チューニング出来る項目と出来ない項目がある
• タイムゾーンは変更不可・・・
§ rds-describe-db-parametersを使ってチェック
§ または、ManagementConsoleでチェック
Thursday, March 22, 12
83. タイムゾーンに関して
rds-describe-db-parametersで見てみると、
タイムゾーンは変更不可能な設定項目
§ アプリケーション側でJSTなど適切なタイムゾー
ンを指定する必要あり
§ init_connectパラメータによる、タイムゾーンの
設定は現状保証されない
Thursday, March 22, 12
84. メトリクスと監視
CloudWatchにてRDSメトリクスを監視
メトリクス名 説明
BinLogDiskUsage マスターのバイナリログサイズ
CPUUtilization CPU利用量
DatabaseConnections DBのコネクション数
FreeableMemory 使えるメモリ量
FreeStorageSpace 使えるディスクスペース
ReadIOPS 読み込みの平均IOPS
ReadLatency 読み込みのレイテンシ
ReadThroughput 読み込みスループット
ReplicaLag リードレプリカのタイムラグ
SwapUsage DBで使用しているスワップ
WriteIOPS 書き込みの平均IOPS
WriteLatency 書き込みのレイテンシ
WriteThroughput 書き込みスループット
Thursday, March 22, 12
85. メトリクスと監視(2)
Amazon RDS Eventsでも監視可能
§ ManagementConsoleで監視
§ rds-describe-events
Thursday, March 22, 12
86. MultiAZにおけるリードレプリカの更新停止
に関して(MySQL)
MultiAZ環境でフェイルオーバしたタイミングでリー
ドレプリカの更新の伝播が停止する可能性がある
§ 常にそうなるわけではない
非同期のMySQLレプリケーション
§ binlogがディスクにフラッシュされていない状況下で、
フェイルオーバした場合に稀に発生
§ レプリケーションのコストとの兼ね合い
Thursday, March 22, 12
87. MultiAZにおけるリードレプリカの更新停止
に関して(MySQL)(2)
対応策1
§ rds-modify-db-parameter-groupで
• binlogの同期:sync_binlog=1
• 2PCコミット:innodb_support_xa=1
• http://dev.mysql.com/doc/refman/5.1/en/binary-log.html
対応策2
§ 問題が発生した場合に、リードレプリカを再度作り直す
Thursday, March 22, 12
88. マルチAZに対しての考え方
良く聞く声:マルチAZでマスターをWebアプリと同一の
AZに割り当てたい
マインドシフトが必要
§ マルチAZでWebアプリが構築されていれば、RDSのマスター
がどちらにあるかは意識しなくてよい
§ マルチAZでの複数DCが利用できるものを最大限に活かして
Webアプリのコンポーネントを分散して配置するのが重要
Thursday, March 22, 12
89. いつRDSを使うべきか
RDSの代替案
§ Amazon SimpleDB
§ EC2上でMySQLやOracleを展開
vs SimpleDB
§ シンプルなクエリ、堅牢性・管理不要を追及したい場合
はSimpleDB
§ 既存MySQLの知識やツールを使いたい場合はRDS
Thursday, March 22, 12
90. いつRDSを使うべきか(2)
vs EC2上のMySQLやOracle
§ 完全に自分でコントロールしたい場合、RDSの提供範
囲外のものが欲しい場合はEC2
§ RDSの機能セットや管理機能が必要十分で、運用保守
の手間を下げたい場合はRDS
http://aws.amazon.com/running_databases/
Thursday, March 22, 12
92. Amazon RDSまとめ
RDBMS in the Cloud
§ MySQL, Oracle
メンテナンスレス
スケーラブルで柔軟
Thursday, March 22, 12
93. 参考文献
RDSのDBインスタンスサイズガイド
§ http://aws.amazon.com/articles/Amazon-RDS/2936
RDSのDBパラメータガイド
§ http://aws.amazon.com/articles/Amazon-RDS/2935
RDSモニタリングガイド
§ http://aws.amazon.com/articles/Amazon-RDS/2934
RDSへのデータインポートガイド
§ MySQL編:http://aws.amazon.com/articles/Amazon-RDS/2933
§ Oracle編:http://aws.amazon.com/articles/Amazon-RDS/
4173109646282306
75
Thursday, March 22, 12
95. ご参加ありがとう
ございました
Copyright © 2011 Amazon Web Services
Thursday, March 22, 12