OpenShift のシークレットを使用して簡単かつ安全にアプリとデータベースを接続する

最近のアプリケーションは、数種類のソース・コードと多数のコンポーネントで構築されるようになっています。こうした傾向の中で重要なのは、マイクロサービスのコンセプトです。マイクロサービスでは、小さな要素 (コンテナー) を単位としてアプリケーションを構成し、プロセスを容易に編成できる何らかのオーケストレーション・ツールを使用して、すべてのタスクが正しい順序で行われるようにします。

環境が変化する場合は尚更のこと、データベースをアプリケーションや Web サイトに接続するのは、実に骨の折れる作業です。さまざまなデータベースおよび作業環境間で、たとえば、開発、テスト、デプロイという目的に合わせて、シームレスに切り換えられるスイッチがあるとしたら、この作業は大幅に楽になるでしょう。ただし、こうした切り替えには簡単ながらもセキュアな方法が必要です。OpenShift シークレットを使用すれば、データベースへの接続を数秒で確立できると同時に、資格情報のプライバシーを確保できます。

RedHat の OpenShift は、アプリケーションのコンテナー化、デプロイ、モニタリングに力を発揮する、ハイブリッド・クラウドおよびエンタープライズ対応の先行的な Kubernetes アプリケーション・プラットフォームとして登場しました。ハイブリッド・クラウド環境全体でソフトウェア更新とライフサイクル管理を自動化する、この自己管理プラットフォームは、クラウドのような開発エクスペリエンスをもたらします。

このチュートリアルでは、OpenShift シークレットを使用するといかに簡単に、アプリをデプロイして別の場所にあるデータベースに安全に接続できるのかを明かにします。この方法では、資格情報が確実に暗号化されるとともに、暗号化された資格情報でもアプリケーションで使用できます。OpenShift は自動的にフレームワークを検出し、数分でアプリケーションをコンテナー化、デプロイ、管理します。このチュートリアルでは、Flask アプリを OpenShift にデプロイし、OpenShift シークレットを使用して Db2 データベースに接続する方法を説明します。

前提条件

このチュートリアルに従うには、環境に以下の前提条件を揃える必要があります。

  • アクティブな IBM Cloud アカウント。まだお持ちでない場合は、IBM Cloud 上でアカウントを作成してください。
  • プロビジョニング済みの OpenShift 4.2 クラスター。ここでクラスターをプロビジョニングすることができます。
  • OpenShift コマンド・ライン・インターフェース (CLI)。ここからダウンロードできます。

所要時間

このチュートリアルの所要時間は約 45 分です。

手順

  1. IBM Cloud 上で Db2 データベースを作成します。

    • Catalog (カタログ)」をクリックし、左側のナビゲーションからサービスを選択します。
    • データベースのチェックボックスをオンにして、Db2 を選択します。
    • Db2 データベースのライト・プラン・インスタンスを作成し、必要に応じて場所と名前を変更します。
    • Create (作成)」をクリックします。

      Db2 を作成する画面のスクリーンショット

  2. Db2 データベースの資格情報を作成します。

    • Service credentials (サービス資格情報)」、「New credentials (新しい資格情報)」の順にクリックします。
    • 作成した資格情報を展開し、データベースの URL をメモします。

      Db2 資格情報を示す画面のスクリーンショット

    • 省略可: データベース内の変更を追跡するために、コンソールを開きます。

  3. OpenShift プロジェクトを作成します。

    • ターミナルから OpenShift Client (oc) クラスターにログインし、新しいプロジェクトを作成します。

      oc new-project flask-db-project
      
    • または、OpenShift Client Web コンソールで開発者モードに切り換えて開発者関連のビューを表示し、プロジェクトを作成します。

      OpenShift プロジェクトを作成する画面のスクリーンショット

  4. OpenShift シークレットを作成します。

    • ターミナルで、データベース資格情報を格納するシークレットを作成し、暗号化します。このシークレットには、後で環境変数を使用してアクセスします。シークレットの名前とキーが dbcred となっていることを確認してください。アプリケーションはこのキー名で環境変数にアクセスします。

      oc create secret generic dbcred --from-literal=dbcred="your db2 ssldsn value"
      

      入力例: oc create secret generic dbced --from-literal=dbcre="DATABASE=*;HOSTNAME=*;PORT=50001;PROTOCOL=TCPIP;UID=*;PWD=*;"

    • または Web コンソールで、詳細検索を使用して「secret」でサービスをフィルタリングし、「secret」というキー値を作成します。

      OpenShift シークレットを作成する画面のスクリーンショット

  5. Flask アプリをデプロイして、アプリを Db2 データベースに接続します。

    • アプリを作成するために、「Add (追加)」をクリックし、「From Catalog (カタログから)」を選択します。

      Flask アプリをデプロイする画面のスクリーンショット

    • Languages (言語)」を選択し、「Python」をクリックします。Python アプリを選択してから、「Create application (アプリケーションを作成)」をクリックします。

      Python アプリを選択する画面のスクリーンショット

    • GitHub リポジトリーの URL https://github.com/mostafa3m/Flask-db-oc.git を該当するフィールドに追加し、「Show Advanced Option (拡張オプションを表示)」をクリックします。「Context Dir (コンテキスト・ディレクトリー)」フィールドに「/flask-app」を追加します。アプリの名前を選択してから「Deployment Configuration (デプロイメント構成)」をクリックします。

      GitHub リポジトリーを追加する画面のスクリーンショット

    • 「Deployment Configuration (デプロイメント構成)」で、「Add from config map or secret (構成マップまたはシークレットから追加)」をクリックし、シークレットの値を追加します。

    • 名前に「dbcred 」を追加し、「dbcred 」リソースと「dbcred 」キーを選択します。
    • 空の環境変数を削除してから「Create (作成)」をクリックします。

      空の環境変数を削除する画面のスクリーンショット

  6. ビルドとデプロイのプロセスをモニタリングします。

    • 完了するまでビルド・プロセスとデプロイ・プロセスをモニタリングできます。
    • アプリのルートが URL になっていることにも注目してください。

      アプリのルート URL を示す画面のスクリーンショット

  7. アプリが正常に機能して Db2 データベースに接続できることを確認します。

    省略可: 変更を観察したい場合は、Db2 コンソールを開きます。Db2 ライト・プランではスキーマが 1 つ提供されて、そこでテーブルを作成できます。スキーマの名前はサービス資格情報に含まれるユーザー名と同じです。そのスキーマで変更を観察してください。

    アプリが完全にデプロイされるまで待ちます。デプロイが完了したら、ルート・セクション内に示されているアプリケーション URL をクリックします。

    アプリには 4 つの URL があります。

    • メイン URL: アプリ公開ルート 。 この URL を使用して、アプリがオンラインであることを確認します。また、Db2 データベース内に値テーブルを作成するためにも使用します。

    • 名前挿入 URL: アプリ公開ルート /insertname。 この URL を使用して、Db2 データベース内に作成したテーブルに名前を挿入します。

      サンプル・アプリ URL を示す画面のスクリーンショット

    • テーブル・コンテンツ URL: アプリ公開ルート /db2
      この URL を使用して、値テーブル内のデータを表示します。

    • テーブル削除 URL: アプリ公開ルート /deletetable
      この URL を使用して、Db2 データベースから値テーブルを削除します。

      サンプル・アプリ URL を示す画面のスクリーンショット

まとめ

このチュートリアルでは、数分でアプリケーションをデプロイして、アプリケーションを IBM Cloud 上の Db2 データベースに接続できる簡単な方法を紹介しました。この方法では、OpenShift が自動的にアプリケーションを識別、コンテナー化、ビルド、デプロイしてくれます。

このチュートリアルを通して、数種類のソース・コードでアプリケーションをビルドして、他のサービスに安全に接続する方法を把握できたはずです。OpenShift シークレットを使用すれば、機密データ (この例では Db2 資格情報) が公開されるリスクを恐れる必要がなくなります。

OpenShift Learning Portal で Red Hat OpenShift の詳細を調べてください。Get Started with OpenShift で試してみることもできます。OpenShift on IBM Cloud の詳細については、IBM Developer 上の Red Hat OpenShift on IBM Cloud ページをご覧ください。