docomo MEC® docomo MEC® docomo MEC®
お問い合わせ ドキュメント ログインページ サイトマップ
検索
お問い合わせ ドキュメント ログインページ サイトマップ
  • Compute E
  • Compute D
  • Compute O
  • MECダイレクト
  • docomo MECポータルへのログイン方法
  • 用語集
  • 改訂履歴
Compute E
Compute D
Compute O
MECダイレクト
docomo MECポータルへのログイン方法
用語集
改訂履歴

›チュートリアル

  • Compute Dとは
  • 関連サービス
  • ご利用開始までの流れ

  • ファーストステップガイド
  • 管理画面への接続・ログイン
  • インスタンスの起動
  • インスタンスへの接続・ログイン
  • リモートストレージサービスの利用
  • コマンドライン実行環境の設定
  • コマンドライン操作方法
  • 日本語キーボード設定方法
  • インスタンスのHA構成の作成方法
  • MECダイレクト接続手順

  • Apache Web Serverの構築方法
  • Windows Serverの構築方法
  • リレーショナルデータベースの構築方法
  • GPUの使用方法
  • 顔認識アプリの作成
  • トラブルシューティング

  • APIアクセス
  • コンピュート

    • 概要
    • インスタンス
    • イメージ
    • キーペア
    • サーバーグループ

    ボリューム

    • ボリューム
    • スナップショット

    ネットワーク

    • ネットワークトポロジー
    • ネットワーク
    • ルーター
    • セキュリティーグループ
    • Floating IP

    Orchestration

    • Stacks

リレーショナルデータベースの構築方法

はじめに

本マニュアルでは、Ubuntu 20.04にてMySQLを用いてリレーショナルデータベースの構築を行い、インターネット上にAPIを公開するまでの流れを説明します。

前提知識

 以下ドキュメントを先にご覧ください。
  • 「インスタンスの起動」
  • 「インスタンスへの接続・ログイン」

ライブラリ

使用するライブラリは以下の通りです。

  • MySQL 8.0.31
  • Python3.8.10
  • Flask 2.2.2
  • Flask-Cors 3.0.10
  • mysql-connector-python 8.0.32
 

操作手順

MySQLの環境構築

ここでは MySQL をインストールし、初期設定を行います。
  1. Ubuntu 20.04のインスタンスを作成します。手順については「インスタンスの起動」をご参照ください。
  2. ※ セキュリティグループの設定にて、5000番ポートの受信を許可してください。
    ※ Floating IP を割り当ててください。
  3. 作成したインスタンスにコンソールでログインします。
  4. ファイアウォールの設定を行います。以下のコマンドにてファイアウォールを有効化し、5000番ポートの受信を許可します。
  5. $ sudo ufw enable
    $ sudo ufw allow 5000
    $ sudo ufw reload
  6. 以下コマンドを実行し、パッケージを最新の状態に更新します。
  7. $ sudo apt update
  8. MySQL のインストールを行います。
  9. $ sudo apt install mysql-server
  10. MySQL にログインします。
  11. $ sudo mysql

  12. ルートユーザーのパスワードを変更します。
  13. mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'パスワード';
  14. パスワードの変更が完了したら、一度 MySQL からログアウトします。
  15. mysql> quit
  16. インストール時点の MySQL にはセキュリティ上の問題点があります。それらを改善するため、以下コマンドを入力します。
  17. $ sudo mysql_secure_installation
  18. ルートユーザーのパスワードを要求されるので、6.で設定したパスワードを入力します。
  19. パスワードポリシーを設定するかどうかを質問されますので、「y」を入力します。
  20. ここでは STRONG を選択するため、「2」を入力します。
  21. パスワードを変更するかどうか質問されますが既に変更済みですので、ここでは「n」を入力します。
  22. 以降の質問には全て「y」を入力します。これにより MySQL のセキュリティ上の問題点を解決します。
  23. 以下のコマンドを実行し、再び MySQL にログインします。コマンド実行後、パスワードを聞かれますので、入力してください。
  24. $ sudo mysql -p
  25. 次のコマンドを実行し、手動操作用のユーザーを作成します。
  26. mysql> CREATE USER 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';
  27. 手動操作用のユーザーに、CREATE・INSERT・SELECTの権限を付与します。
  28. mysql> GRANT CREATE, INSERT, SELECT ON *.* TO 'ユーザー名'@'localhost';
  29. flask 側から利用するためのユーザーを作成します。ユーザー名は任意ですが、ここでは「flask_user」とします。
  30. mysql> CREATE USER 'flask_user'@'localhost' IDENTIFIED BY 'パスワード';
    mysql> GRANT SELECT ON *.* TO 'flask_user'@'localhost';

    ※ 17. 及び18.では本チュートリアルで使用する最低限の権限のみ付与しています。他の権限が必要な場合は追加で付与して下さい。

  31. 一度ログアウトします。
  32. mysql> quit
  33. 新たに作成したユーザーでログイン出来ることを確認します。
  34. $ mysql -u ユーザー名 -p

データベースの構築

 ここでは、簡易なデータベースを構築していきます。操作を始める前に、MySQL に前章15.で作成した手動操作用のユーザーでログインしてください。
  1. 以下のコマンドを実行し、データベースを作成します。名称は任意ですが、ここでは「testdb」として進めます。
  2. mysql> CREATE DATABASE testdb;
  3. データベースの作成を確認します。一覧に1.で作成したデータベースが含まれていれば問題ありません。
  4. mysql> SHOW databases;

  5. 作成したデータベースを選択し、操作可能な状態にします。
  6. mysql> USE testdb;
  7. ID と名前のみをデータとして保持するシンプルなテーブルを作成します。名称は任意ですが、ここでは「users」として進めます。
  8. mysql> CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name TEXT);
  9. テーブルの作成を確認します。
  10. mysql> SHOW tables;

  11. テストのため、データを一件追加します。
  12. mysql> INSERT INTO users(name) VALUES('sample_user1’);
  13. データの追加を確認します。
  14. mysql> SELECT * FROM users;

APIの作成と公開

ここでは、作成したデータベースをインターネット上から利用できるように、flask を利用して REST API を公開します。
※ セキュリティ上、データベースは公開せず、APIを介して操作するようにしてください。
 
  1. もし MySQL にログイン状態であればログアウトし、venv のインストールを行います。
  2. $ sudo apt install python3-venv

    ※ venv は python の仮想環境を作成するためのライブラリです。これにより、システムの python に影響を与えずに環境構築を進めることができ、失敗時の復旧が容易になります。

  3. 作業用のフォルダを作成し、移動します。
  4. $ mkdir work
    $ cd work
  5. venv によって仮想環境を作成し、仮想環境をアクティブにします。
  6. $ python3 -m venv venv
    $ source venv/bin/activate

  7. 仮想環境内に必要なライブラリをインストールします。
  8. $ pip install flask flask_cors mysql_connector_python
  9. 以下のプログラムを作成します。下記URLからダウンロードすることもできます。 'password' の箇所に MySQL にて flask_user に設定したパスワードを入力してください。
  10. $ wget https://www.mec.docomo.ne.jp/assets/advanced-tutorial/main.py
    from flask import Flask, request, jsonify
    from flask_cors import CORS
    import mysql.connector
     
    app = Flask(__name__)
    CORS(app)
     
    # MySQLの接続情報を入力します
    connection = mysql.connector.connect(
        host = 'localhost',
        port = 3306,
        user = 'flask_user',
        password = 'password',# ここにパスワードを入力してください
        database = 'testdb',
    )
     
    # ルートで待ち受けします
    @app.route('/', methods=['GET'])
    def select_all():
        connection.ping(reconnect=True)
        cursor = connection.cursor()
        cursor.execute('SELECT * FROM users')# ここにリクエストの内容を入力してください
        response = cursor.fetchall()
        results = []
        for item in response:
            id = item[0]
            name = item[1]
            results.append(dict(index=id, name=name))
    # 結果をjsonにして返します
        return jsonify(results=results)
     
    if __name__ == "__main__":
        app.run(host="0.0.0.0") # flaskアプリを起動します
  11. 以下のコマンドを実行し、バックグラウンドで flask を実行します。起動後、エンターキーを一度押下すると制御が戻ります。
  12. $ nohup python3 main.py &
  13. まずはローカルで動作を確認します。以下コマンドを実行し、下図のような応答が得られれば成功です。
  14. $ curl http://localhost:5000

  15. 次に外部からのアクセス確認を行います。まず、当該仮想マシンに割り当てた Floating IP を確認します。
  16. Compute D 外の PC からブラウザ等を使用し「http://<8.で確認したIPアドレス>:5000」にアクセスします。以下のように応答が表示されれば成功です。
  17. 以下コマンドを実行し、バックグラウンドで実行中のプロセスを確認します。COMMAND 欄を確認し、python で実行したプロセスのプロセス番号(PID)を確認します。
  18. $ ps u

  19. API のバックグラウンド実行を終了したい場合、以下コマンドを実行します。
  20. $ kill -KILL <10.で確認したプロセス番号>
← Windows Serverの構築方法 GPUの使用方法 →
  • はじめに
    • 前提知識
    • ライブラリ
  • 操作手順
    • MySQLの環境構築
    • データベースの構築
    • APIの作成と公開
  • ※「docomo MEC」は株式会社NTTドコモの登録商標です。
  • ※「docomo MEC」「MECダイレクト」は株式会社NTTドコモが提供元であり、NTTコミュニケーションズ株式会社が代理人として保有する契約締結権限、および包括的な業務受託にもとづき販売しています。
docomo
© NTT DOCOMO, INC. All Rights Reserved