クラウド・データ用の SQL データベース
このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。
このチュートリアルでは、SQL (リレーショナル) データベース・サービスをプロビジョンする方法について説明します。 管理者は、表を作成し、大きなデータ・セット (都市情報) をデータベースにロードします。 次に、Web アプリケーション「world訴えた」を IBM Cloud® Code Engineにデプロイします。 このアプリを使用すると、通常のユーザーはクラウド・データベースからレコードを検索できます。 このアプリは、Flaskフレームワークを使って Pythonで書かれている。
{: caption="
目標
- SQL データベースをプロビジョンする
- データベース・スキーマ (表) を作成し、データをロードします
- 事前作成されたコンテナー化アプリを Code Engine にデプロイします。
- アプリとデータベース・サービスを接続する (資格情報を共有する)
- クラウド・データベースのモニター、保護、バックアップ & リカバリー
開始前に
このチュートリアルでは、以下が必要です。
- IBM Cloud CLI ( Code Engine プラグインを使用)
git
to clone the source code repository.
これらのツールのインストールを避けるには、IBM Cloudコンソールから Cloud Shellを使用することができます。
ご使用のオペレーティング環境でこれらのツールをダウンロードおよびインストールするための手順は、チュートリアルの概説ガイドに記載されています。
- このチュートリアルの Github リポジトリー を複製し、そのディレクトリーに移動します。 端末で、以下の行を実行します。
git clone https://github.com/IBM-Cloud/cloud-sql-database.git cd cloud-sql-database
- GeoNames にアクセスし、ファイル cities1000.zipをダウンロードして解凍します。 この中には、人口が 1000 人を超える市区町村に関する情報が入っています。 これをデータ・セットとして使用します。
SQL データベースをプロビジョンする
まず Db2 Warehouse on Cloud サービスのインスタンスを作成する。
- IBM Cloud®コンソール にアクセスしてください。 上部ナビゲーション・バーの 「カタログ」 をクリックします。
- 左側ペインの 「データベース」 をクリックして、「Db2 Warehouse」 を選択します。
- 「Flex One」 プランを選択し、提示されたサービス名を 「sqldatabase」 に変更します (後でこの名前を使用します)。 データベースのデプロイメントのリソース・グループとロケーションを選択します。
- 「作成」 をクリックします。 プロビジョニングが開始されます。
- リソース・リストで、データベースの下に新しいインスタンスを見つけ、利用可能になるまで待ちます(ページを更新する必要がある場合もあります)。 Db2 Warehouse on Cloud サービスに関するエントリーをクリックします。
- 「コンソールを開く」 をクリックして、データベース・コンソールを起動します。
表を作成する
サンプル・データをデータを格納する表が必要です。 コンソールを使用して表を作成します。
- Db2 Warehouse on Cloudのコンソールで左上のメニューアイコンをクリックし、ナビゲーションバーで SQLを実行する。
- 「Untitled-1」 タブの横にある 「+」 記号 (「Add a new script」) をクリックします。
- 「ファイルから」 をクリックし、以前にローカル・ディレクトリーに複製した GitHub リポジトリーからファイル
cityschema.txt
を選択して開きます。 - 「すべて実行 (Run all)」 をクリックして、ステートメントを実行します。 成功メッセージが表示されるはずです。
データをロードする
表「cities」が作成されたので、その中にデータをロードします。 これは、ローカルマシンから、あるいはクラウドオブジェクトストレージ(COS)やAmazon S3インターフェースからなど、さまざまな方法で行うことができる。 このチュートリアルでは、マシンからデータをアップロードします。 このプロセスの中で、表の構造とデータ形式をファイル内容に完全に対応するように合わせます。
-
Db2 Warehouse on Cloud のコンソールで、左上のメニュー・アイコンをクリックし、ナビゲーション・バーの 「データ」 をクリックします。
-
「ソース」 として、 「マイ・コンピューター」 の選択を保持します。
-
ファイルの選択] で、[ここにファイルをドラッグ]または[ファイルを参照] をクリックし、このガイドの最初のセクションでダウンロードしたcities1000.txt"ファイルを探して選択します。
-
「次へ」 をクリックして、 「スキーマ」 を選択した 「ターゲット」 の概要に移動します。 スキーマ BLUADMIN を選択し、テーブル CITIES を選択する。 もう一度 「次へ」 をクリックします。
この表は空ですので、既存のデータに追加するか既存のデータを上書きするかは関係ありません。
-
次は、ロード・プロセスでファイル「cities1000.txt」のデータを解釈する方法をカスタマイズします。 まず、このファイルにはデータしか入っていないので、「最初の行をヘッダーとする (Header in first row)」 を無効にします。
-
次に、区切り文字として 「0x09」 と入力します。 これは、ファイル内の値がタブ (タブ文字) で区切られていることを意味します。
-
最後に、日付形式として「YYYY-MM-DD」を選択します。 これで、すべてがこのスクリーンキャプチャのように見えるはずだ。
-
「次へ」 をクリックすると、ロード設定の確認画面が表示されます。 同意して 「ロードの開始 (Begin Load)」 をクリックし、「CITIES」 表へのデータのロードを開始します。 進行状況が表示されます。 データがアップロードされれば、ほんの数秒でロードは完了するはずです。いくつかの統計が表示されます。
-
「表の表示 (View Table)」 」をクリックしてデータを参照します。 スクロールダウンするか、列名をクリックして、ソート順を変更することもできます。
ロードされたデータを SQL を使用して確認する
データがリレーショナル・データベースにロードされました。 エラーはありませんでしたが、いくつかの簡単なテストを実行する必要があります。 組み込みの SQL エディターを使用して、いくつかの SQL ステートメントを入力し、実行します。
-
左のナビゲーションで Run SQL をクリックしてSQLエディターに戻る。 「+」 記号 ( 「新規スクリプトの追加」 ) をクリックし、「新規作成」 をクリックして、新しいエディター・タブを作成します。
組み込みの SQL エディターの代わりに、デスクトップまたは Db2 Warehouse on Cloud のサーバー・マシンで、クラウド・ベースや従来型の SQL ツールを使用することもできます。 接続情報は、左側のナビゲーションの 「管理」 メニューにあります。
-
エディターで、以下の照会を入力またはコピーします。
select count(*) from cities;
照会のテキストを選択し、 「すべて実行」 の横のドロップダウンで 「選択した項目を実行」 を選択します。 結果のセクションには、負荷プロセスによって報告されたのと同じ行数が表示されなければならない。
-
「SQL エディター」で、次のステートメントを新しい行に入力します。
select countrycode, count(name) from cities group by countrycode order by 2 desc;
上記のステートメントのテキストにマークを付けて、 「選択した項目を実行」 ボタンをクリックします。 このステートメントのみが実行され、結果セクションに国別の統計がいくつか返される。
-
最後に、以下のステートメントを同様に実行して、カリフォルニアのサンフランシスコに関する詳細を取得します。
select * from cities where name='San Francisco' and countrycode='US';
アプリケーション・コードをデプロイする
端末に戻ります。 次に、事前作成されたコンテナー・イメージを使用して、アプリケーション・コードをデプロイします。 アプリケーション・コードを変更し、コンテナー・イメージを自分でビルドすることができます。 詳しくは、 GitHub リポジトリーの手順 を参照してください。
-
ログインしていない場合は、
ibmcloud login
またはibmcloud login --sso
を使用してインタラクティブにログインします。 リージョンとリソース・グループを、データベースがプロビジョンされている場所に設定します。 RESOURCE_GROUP および REGION を適宜置き換えます。ibmcloud target -g RESOURCE_GROUP -r REGION
-
sqldatabase という名前の新規 Code Engine プロジェクトを作成します。
ibmcloud ce project create --name sqldatabase
新規プロジェクトをアクティブ・プロジェクトとして選択します。
ibmcloud ce project select --name sqldatabase
-
次に、アプリを worldcities という名前でデプロイする。
ibmcloud ce app create --name worldcities --image icr.io/solution-tutorials/tutorial-cloud-sql-database:latest --min-scale 1
-
最後に、既存の Db2 Warehouse on Cloud データベースとアプリケーションの間のサービス・バインディングを作成します。
ibmcloud ce application bind --name worldcities --service-instance sqldatabase
バインディングが作成されると、新しいアプリ・リビジョンが開始されます。
-
これで、アプリの状況の詳細を確認し、URL を取得することができます。
ibmcloud ce app get --name worldcities
出力で、 URL で始まる行を探します。 表示される URL には、
https://worldcities.unique-subdomain.region.codeengine.appdomain.cloud
のようなパターンが必要です。 リンクをクリックしてアプリにアクセスします。 アプリの詳細を取得するもう 1 つのオプションは、 Code Engine コンソールにアクセスすることです。
セキュリティー、バックアップ & リカバリー、モニタリング
Db2 Warehouse on Cloud は、マネージド・サービスです。 環境の保護、日常的なバックアップおよびシステムのモニタリングは、IBM が行います。 エンタープライズ・プランの 1 つを使用している場合、 アクセスを管理するためのいくつかのオプション と、 拡張データ暗号化 を構成するためのいくつかのオプションがあります。
従来の管理オプションに加えて、 Db2 Warehouse on Cloud サービスは、モニター、ユーザー管理、ユーティリティー、ロード、ストレージ・アクセスなどのための REST API も提供します。
アプリをテストする
ロードしたデータ・セットに基づいて市区町村情報を表示するこのアプリは、最小限に切り詰められています。 このアプリは、1 つの市区町村名 (名前には大/小文字の区別があります) といくつかの事前構成された市区町村を指定できる検索フォームを表示します。 これらは、/search?name=cityname
(検索フォーム) または /city/cityname
(直接指定された市区町村) のいずれかに変換されます。 どちらの要求もバックグラウンドでは同じコード行で処理されます。
cityname
、セキュリティ上の理由から、パラメータ・マーカを使って準備されたSQL文に値として渡される。 行がデータベースから取り出され、HTML テンプレートに渡されてレンダリングされます。
クリーンアップ
チュートリアルで使用したリソースをクリーンアップするには、以下の手順を実行します。
- IBM Cloud® リソース・リストにアクセスします。
- Code Engine セクションで、プロジェクト sqldatabase を見つけます。 3 つのドットをクリックし、 「削除」 を選択して、プロジェクトとそのアプリケーションを削除します。
- 「データベース」 の下でデータベース
sqldatabase
を見つけます。 再度、3 つのドットをクリックし、 「削除」 を選択してデータベースを削除します。
リソースによっては、即時に削除されずに保持される場合があります (デフォルトでは 7 日間)。 リソースを完全に削除して再利用することも、保存期間内に復元することもできます。 リソースの再利用を使用する方法については、この資料を参照してください。
チュートリアルを発展させる
このアプリを機能拡張しますか? 以下にいくつかのアイデアを示します。
- 代替名をワイルドカード検索できるようにする。
- 特定の国および特定の人口値の市区町村のみを検索する。
- CSS スタイルを置換し、テンプレートを拡張して、ページ・レイアウトを変更する。
- フォームベースで新しい都市情報を作成したり、人口など既存のデータを更新できるようにする。