AMP for Eコマース・モバイルアプリケーション 第2回：Alibaba Cloud ApsaraDB for MongoDBを使用したバックエンドの作成 

この3部構成のチュートリアルでは、**AMP**を使用して完全に機能する**Eコマースモバイルアプリケーション**を作成する方法を探ります。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/amp-for-e-commerce-part-2-creating-backend-with-alibaba-cloud-apsaradb-for-mongodb_588411)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

[Alibaba Cloud Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.2caf3ebdJHvJbE) 執筆、Sai Sarath Chandra。

本ブログ記事は、記事「[AMP for E-Commerce 第1回](https://www.alibabacloud.com/blog/amp-for-e-commerce-part-1-basic-building-blocks-and-ui-using-amp_587356)」の続きです。Alibaba Cloud [ApsaraDB for MongoDB](https://www.alibabacloud.com/product/apsaradb-for-mongodb?spm=a2c65.11461447.0.0.2caf3ebdJHvJbE)の話に入る前に、概念実証（POC）のバックエンドとしてこれを選んだ理由を説明します。

###リレーショナルデータベースと非リレーショナルデータベース
一般的に、データベースには2つの種類があります。

- リレーショナルデータベース
- 非リレーショナルデータベース

リレーショナルデータベースでは、どのようなデータを管理しようとしているのかを正確に知る必要があります。データベースをモデル化し、そのデータモデルに対応するクエリを作成し、それに応じてフェッチする必要があります。非常に人気のあるリレーショナル・データベースの典型的な例は、MySQLです。MySQLは非常に多くの組織にとって安価なオプションとなっています。リレーショナル・データベースは強力ですが、一定の制限があります。リレーショナルデータベースは、大量のデータを処理するのには不向きであり、変化するデータのニーズに対応するのには向いていません。

デジタル時代には、データの正確な表現がわからない流動的なデータを目にします。データモデルは特定のエンティティに対して変化し続け、それがNoSQLデータモデルの誕生のきっかけとなりました。そんな人気NoSQLデータベースの一つがMongoDBです。NoSQLは今、業界ではかなり話題になっています。主にビジネスを立ち上げたいが、データが何であるかわからないという中小規模の組織に向いています。NoSQLには、あらかじめ定義されたスキーマがありません。開発者としては、あなたがNoSQLを選んだ場合、バックエンドのパフォーマンスを維持するためにDBAの専門知識を持っていることを心配する必要はありません。

###MongoDBのメリット
ここでは、MongoDBと、MySQLのようなリレーショナルデータベースよりもMongoDBを使うことのメリットについて詳しく説明します。

**Mongo DBはスキーマレスである**

リレーショナルデータベースでは、他のデータ操作の前にテーブルのスキーマを定義します。テーブルにデータを挿入するときはいつでも、テーブルのスキーマに準拠していることを確認する必要があります。データのモデルに変更があると思ったら、テーブルスキーマ全体を変更するか、新しいテーブルを作成して正規化する必要があります。しかし、MongoDBではデータは構造体のようなJSONに格納されています。

リレーショナルデータベースでは、データの行で構成されるテーブルを持っていますが、MongoDBでは、ドキュメントとしてデータを構成するコレクションを持っています。典型的なドキュメントは構造体のようなJSON以上のものはありません。MongoDBの興味深い部分は、複数のドキュメントは、複数のデータ型を持つ複数のフィールドを構成することができるということです。最初は、MongoDBを使うには少し戸惑うかもしれませんが、慣れてくると、その柔軟性を楽しむことができます。

**MongoDBの信頼性**
市場に出回っているリレーショナルデータベースが、長年の研究と業界での採用実績に裏打ちされたものであることは誰もが認めるところでしょう。そしてMongoDBはT-mobile、Sony、Surveymonkey、Foursquare、Invisionなどの大企業にも採用されています。


**MongoDBはスケールしやすい（シャーディングとレプリケーション)**
シャーディングとは、データセットを複数の MongoDB サーバーに分割することです。データセットの分割ポイントとなるフィールドを選び、それをシャードキーと呼びます。このシャードキーをもとに、データは複数のサーバーに分散されます。シャーディングにより、MySQLでは実装が難しい水平方向のスケーリングが可能になります。

データセットが本当に巨大化してインデックスがメモリに収まらなくなった場合、アプリケーションの書き込み量が多く、複数のサーバに書き込みを分散させる必要がある場合です。

MongoDB は組み込みのレプリケーションシャーディングと自動選択をサポートしています。自動選択を使うと、プライマリデータベースが故障したときに自動的にセカンダリデータベースを引き継ぐように設定できます。MongoDB はレプリカセットを使ってデータの複数のコピーを作ります。レプリカセットの各メンバーは、プロセスのどの時点でもプライマリやセカンダリの役割を持つことができます。読み書きはデフォルトではプライマリレプリカで行われ、その後セカンダリレプリカにレプリケートされます。

レプリケーションとシャーディングにより、Mongo DBは非常に簡単にスケールすることができます。

**ディープクエリ能力、セキュリティ、開発者フレンドリー**
MongoDBは、ドキュメントベースのクエリ言語を使ったドキュメント上での動的なクエリをサポートしており、SQLとほぼ同じくらい強力です。従来のデータベースはSQLのインジェクション攻撃で苦しむことがあるので、セキュリティの観点からは、MongoDBの方が安全です。MongoDBの場合は、ドキュメントの名前に変数データを格納しているため、インジェクション攻撃を受ける可能性ははるかに低くなります。

開発者の視点から見ると、MongoDBはより開発者に優しく、ほとんどの主要な言語に対応したクライアントがよく書かれており、ドキュメントも充実しています。Mongo DBの主な利点は、JavaScriptベースのクエリ言語は、より多くのWeb開発者に適しているということです。アプリケーションのプロトタイピングをより速くし、リリースやビルドの時間を短縮します。

###Alibaba Cloud ApsaraDB for MongoDB
Alibaba Cloud [ApsaraDB for MongoDB](https://www.alibabacloud.com/product/apsaradb-for-mongodb?spm=a2c65.11461447.0.0.2caf3ebdJHvJbE)は、安全で信頼性が高く、弾力的に拡張可能なクラウドデータベースサービスです。現在、ReplicaSetとShardingアーキテクチャをサポートしており、数ステップで迅速に導入することができます。Alibaba Cloud ApsaraDB for MongoDBを使用すると、以下のようなメリットがあります。

**信頼性の高いストレージ**
- Alibaba Cloud Apsara分散ファイルシステムとSSD高性能ストレージをベースに構築します。
- 3ノードのReplicaSetアーキテクチャにより、データの冗長性を確保します。
- 定期的な自動バックアップにより、信頼性の高いデータストレージを確保します。

**弾力的なスケーリング**
- ReplicaSetとShardingの両方のアーキテクチャをサポートしています。
- ReplicaSetとShardingのノードは、リソースを拡張するために必要に応じてアップグレードまたはダウングレードすることができます。
- また、Shardingインスタンスのモンゴーズとシャードの数はいつでもスケールアウトできます。

**プロフェッショナルサービス**
- セキュリティとリソースの弾力性を高めるための専門的なサービスを提供するために、アリババクラウドのシニア技術チームメンバーを利用可能にします。
- ソースコードチームが管理するパフォーマンス、セキュリティ、その他の面で最適化されたカーネル

**費用対効果**
- 前払い費用や長期的なコミットメントがなく、費用対効果に優れています。
- 毎月のサブスクリプションやPay-As-You-Goなどの柔軟な支払いオプションを提供しています。

###ApsaraDB for MongoDBの詳細
**アーキテクチャ**
Alibaba Cloud [ApsaraDB for MongoDB](https://www.alibabacloud.com/product/apsaradb-for-mongodb?spm=a2c65.11461447.0.0.2caf3ebdJHvJbE)は、レプリカセットアーキテクチャとシャーディングアーキテクチャの両方をサポートしています。デフォルトではレプリカセットアーキテクチャで動作する3つのノードの最小値がありますが、1つはプライマリになり、別のものはセカンダリになり、他のものは非表示になります。プライマリファイルは、システムが何らかの理由でセカンダリを選択する場合で、セカンダリが利用できない場合は、システムが非表示のデータベースに切り替えると、サービスが利用可能であることを確認できます。

フラクショナルサービス(shard)とコンフィギュレーションサービス(configserver)は、安定した信頼性の高い3ノードReplicaSetアーキテクチャを採用しています。

**セキュリティ**
アリババクラウドは、すべての製品にセキュリティ対策が施されていることで知られています。[ApsaraDB for MongoDB](https://www.alibabacloud.com/product/apsaradb-for-mongodb?spm=a2c65.11461447.0.0.2caf3ebdJHvJbE)は、内蔵のバックアップ機構とリカバリー機能を提供しており、データの損失を防ぎ、適切な運用でコストを最小限に抑えることができます。

**管理機能**
[ApsaraDB for MongoDB](https://www.alibabacloud.com/product/apsaradb-for-mongodb?spm=a2c65.11461447.0.0.2caf3ebdJHvJbE)には、可視化された運用管理プラットフォームも付属しています。ユースCPUの使用接続などのインスタンス情報を監視したり、その他の情報を視覚的に取得することができます。可視化されたIT管理プラットフォームにより、インスタンスの再起動など、頻度が高くリスクの高い運用を簡素化することができます。ApsaraDB for MongoDBは、データ復旧をワンクリック操作にします。また、データベースカーネルのバージョン管理のためのサブグレードを積極的に行い、不具合を迅速に修復することで、日々のバージョン管理から解放されます。

###Eコマースストアのバックエンド
ここでは、eコマースストアのバックエンドとネットワーキングのための実際のセットアップを作成します。このようなアーキテクチャを作成していきます。参考までに図をご覧ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5313eb41-9a11-6f7a-a2e3-f2b5de276737.png)

MongoDBインスタンスにアクセスするためのAlibaba Cloudからの推奨アーキテクチャです。

まず、Alibaba Cloudの[ECSインスタンス](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.2caf3ebdJHvJbE)を作成して、複数のLinuxコマンドを経由する煩わしさを軽減します。Windows VMを作成し、[ECSインスタンス](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.2caf3ebdJHvJbE)からMongoDBにアクセスします。

インターネットから接続する場合は、以下の認証情報を使用する必要があります。

**IPアドレス/ホスト名**：47.74.237.40 
**ユーザー名**: Administrator
**パスワード** ：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6c72274a-f185-7bf8-a34e-6ebfe4c5b5cc.png)

Remote Desktop プロトコルを使って接続している場合は、接続されている Windows が表示されているはずです。

###MongoDB サービス用の ApsaraDB の作成
ここでは、Alibaba CloudでApsaraDB for MongoDBサービスのバックエンドデータベースを作成します。コンソール上で「Product」→「ApsaraDB for MongoDB」に移動します。

ECSインスタンス（シンガポール）と同じ場所にインスタンスを作成しているこの画面に移動します。インスタンスの作成をクリックします。このデモでは、「レプリカセットインスタンス」を作成しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/39745717-881d-bb6d-3004-eb726d38fc36.png)

インスタンス作成ボタンをクリックすると、以下の画面が表示されます。下の画面が表示されなくても慌てないでください。デフォルトではSubscription (Replica Set)に移動し、すべてのデフォルト値が入力されていることを確認することができます。Pay-As-You-Go (Replica Set)モデルに変更し、接続のVPCモデルを選択する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/109b4d88-b121-0848-800a-340d564a1d90.png)

VPCID と VSwitchID はデフォルトの設定と一緒に自動的に入力されているのがわかります。もし設定に VPCID/VSwitchID がない場合は、ECS インスタンスや MongoDB インスタンスが同じリージョンにないということになります。パスワードを指定して、将来データベースにログインするときに使うパスワードを覚えておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/2c634159-6577-9940-a77f-937290ddc0b1.png)

すべての手順を正しく実行したら、Alibaba Cloud上にMongoDBサービスがアクティブになっているはずです。以下のインスタンスが「Singapore」リージョンで実行されているのがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/7139afd7-7a46-1a7a-9645-57728bdb4813.png)

インスタンス ID をクリックすると、イントラネットとパブリック IP 接続プロトコルが表示される画面に移動します。アクセスする前に、"ホワイトリストを設定するとアドレスが表示されます "をクリックして、ECSインスタンスのIPアドレスをホワイトリストにする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6f0c3167-c52d-17fe-420a-2112a428a54d.png)

クリックすると、ここに移動します。[ECSイントラネットIPのインポート]をクリックする必要があります。これにより、ECSインスタンスのイントラネットIPアドレスが自動的に検出されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/62237574-c2c0-e06c-2471-026bdfe59fff.png)

そうすると、イントラネットの接続の詳細が表示されるので、この詳細をイントラネット接続に使用します。接続には接続文字列URIを使用します。次のチュートリアルでも同じものを使用します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d2e6c6e1-3a65-e57e-36e9-0da31435bb6d.png)


###次のステップ
シンプルなExpressベースのノードAPIを作成して、データベースのデータをクエリし、AMPサイトで提供されているオープンソースのテンプレートを活用して構築されたEコマースアプリを提供します。全体の統合は[次のチュートリアル](https://www.alibabacloud.com/blog/amp-for-e-commerce-part-3-integrating-the-entire-application-with-alibaba-cloud-apsaradb-for-mongodb_589989?spm=a2c65.11461447.0.0.2caf3ebdJHvJbE)で行いますので、ぜひチェックしてみてください。

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*