Code Engine を使用したサーバーレス Web アプリケーションおよび API
このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。
このチュートリアルでは、Object Storage でバケットを使用してサーバーレス Web アプリケーションを作成し、IBM Cloud Code Engine および IBM Cloudant を JSON 文書データベースとして使用してアプリケーション・バックエンドを実装します。
静的 Web サイトは、パフォーマンスとセキュリティーに最適です。 これらのアーキテクチャー・モデルは、JavaScript、API、およびマークアップに関連して ジャムスタック と呼ばれることがあります。 このチュートリアルでは、Object Storageでホストされる静的 Web サイトを作成します。 この Web サイトには、JavaScript を使用してエントリーを取得したり新規エントリーを追加したりするための API にアクセスするゲストブックがあります。 バッキング・データベースと対話するための API は、サーバーレス・アプローチを使用して実装されます。 これは、バックエンド・アプリまたはマイクロサービスとして IBM Cloud Code Engineにデプロイされます。 バックエンドは必要な場合にのみ実行されるため、使用時に課金されます。
目標
- サーバーレス・バックエンドとデータベースをデプロイする
- REST API をサーバーレス・アプリとして公開する
- 静的 Web サイトをホスティングする
このチュートリアルに示すアプリケーションは、ユーザーがメッセージを投稿できる単純なゲストブック Web サイトです。
{: caption="図
- ユーザーは、Object Storage のバケットでホストされるアプリケーションにアクセスします。
- Web アプリケーションがバックエンド API を呼び出します。
- バックエンド API を使用するアプリが Code Engineにデプロイされます。
- バックエンドは、IBM Cloudant を使用して、ゲストブック・エントリーを保管および取得します。
Guestbook データベースの作成
まず、IBM Cloudant サービス・インスタンスを作成します。 IBM Cloudant は、完全に管理された JSON 文書データベースです。 Apache CouchDB に基づいて構築されており、Apache CouchDB と互換性があります。
- カタログで、「サービス」 の下の 「データベース」 カテゴリーに移動します。 「IBM Cloudant」 タイルをクリックします。 新規ダイアログで、以下のようにします。
-
「マルチテナント」 でリージョンを選択します。
-
「Cloudant インスタンスの構成 (Configure Cloudant instance)」 の下で、このサービスを表す固有の 名前 (
<yourinitials>-guestbook-dbなど) を選択します。 -
リソース・グループを選択します。
-
認証方式として IAM を選択します。
-
「ライト」 プランを選択します。 アカウントに既に「ライト」プランが存在する場合は、他のサービス・プランを選択します。
-
「作成」 をクリックします。
-
- IBM Cloud リソース・リストに戻り、「サービス」 で、作成した IBM Cloudant インスタンスをクリックして、インスタンスの全詳細ページを開きます。 注: 場合によってはサービスの状況が
Activeに変わるまで待つ必要があります。 - 「ダッシュボードの起動 (Launch Dashboard)」 をクリックして、新しいブラウザー・タブでダッシュボードを開きます。
- 右上の 「データベースの作成 (Create Database)」 をクリックします。
guestbookを名前として入力し、 パーティショニングでは 「非パーティショニング」 を選択します。 **「作成」**をクリックしてデータベースを作成します。
サーバーレス・バックエンドの作成
このセクションでは、Code Engineを使用してサーバーレス・バックエンド・アプリを作成します。 サーバーレス・アプリは、実行時間に対してのみ課金されます。これは、ゲストブックなどのアクセス頻度の低いソリューションに適しています。
Code Engine プロジェクトの作成
- IBM Cloud Code Engine 「概要」 ページにナビゲートします。
- 左側のペインで、プロジェクト をクリックし、次に 作成 をクリックして
- ロケーションを選択します。
- プロジェクト名として
<yourinitials>-guestbookを使用し、以前と同じリソース・グループを選択します。 - 「作成」 をクリックします。
- プロジェクトの
statusが 「アクティブ」 に変わるまで待ちます。
- プロジェクト名をクリックして、プロジェクト・ダッシュボードに入ります。
バックエンド・アプリの作成とデプロイ
- プロジェクト・ダッシュボード内で、アプリケーション をクリックし、次に 作成 をクリックします。
- 新規ダイアログで、名前として
guestbook-backendと入力します。 - コンテナー・イメージ を選択したままにし、
icr.io/solution-tutorials/tutorial-serverless-api-webapp:latestを イメージ参照 として使用します。 既存のコンテナー・イメージを使用しています。 - インスタンス・リソース の下で、CPU およびメモリー に
0.25 vCPU / 0.5 GBを選択します。 このタイプのアプリケーションには、あまり多くのリソースは必要ありません。 - 最小インスタンス数を 1に増やし、 最大インスタンス数を 2に減らします。 最小数を 1 にすると、初期テスト中のアプリの応答性が向上します。 後でゼロに戻すことができます。
- 作成 をクリックして、ゲストブックの新規バックエンド・アプリをデプロイします。 サービス・バインディングを作成する次のステップがないと、デプロイメントはコード・エラーで失敗することに注意してください。
- データベースへのサービス・バインディングを作成します。
- サービスバインドタブをクリックします。
- 「作成」 をクリックします。
- IBM Cloud サービス・インスタンス をクリックし、ドロップダウンからデータベースを選択します。
- 「役割」 を 「ライター」 のままにします。
- 追加 をクリックします。
- プロビジョニングが緑色で準備完了と報告されるまで待ちます。 アプリケーションのテスト をクリックし、次に アプリケーション URL をクリックします。 バックエンド・アプリは、
healthyというページをロードして返す必要があります。 アプリケーション URL は次の部分で必要になるため、覚えておくかコピーしてください。
事前作成されたコンテナー・イメージを使用する代わりに、自分でイメージを作成することもできます。 これは、Code Engineの支援、またはその以外でも行うことができます。 事前に作成されたコンテナー・イメージを使用していない場合、および プライベート・コンテナー・レジストリーを使用している場合は、追加の手順が必要になることがあります。 https://github.com/IBM-Cloud/serverless-guestbook/tree/ceは https://github.com/IBM-Cloud/serverless-guestbook/tree/ce で見つかります
Web アプリのデプロイ
IBM Cloudant データベースを使用する guestbook JavaScript アプリケーションのファイルを含む静的 Web サイト・ホスティングを使用して構成された Object Storage バケットを作成します。
以下のようにして、Object Storage インスタンスを作成します。
- カタログから Object Storage を選択します。
- インフラストラクチャーの場合は IBM Cloud を選択し、プランの場合は 標準 を選択します。
- インスタンスを表す固有のサービス名 (
<yourinitials>-guestbook-cosなど) を選択します。 - リソース・グループを選択します。
- 作成 をクリックします。
静的 Web サイト・ホスティングを構成したバケットを以下のようにして作成します。
- 「バケットの作成」 をクリックします。
- バケットのカスタマイズ をクリックします。
- すべての IBM アカウントで固有のバケット名を入力してください。
<yourinitials>-guestbookを試行してください。 - 「回復力」に 「リージョン (Regional)」 を選択します。
- IBM Cloudant インスタンスと整合性のある 所在地 を選択します。
- ストレージ・クラス をデフォルトのままにする
- 静的 Web サイト・ホスティング までスクロールダウンし、追加 + をクリックします。
- ルーティング・ルール (個別) を選択したままにして、索引文書 index.html を追加します。
- 「パブリック・アクセス」をクリックして 「オン」 にします。
- 保存 をクリックします。
- 一番下までスクロールし、「バケットの作成」 をクリックします。
https://github.com/IBM-Cloud/serverless-guestbook/tree/ce の docs ディレクトリーにあるファイルをバケットにコピーします。
-
新しいタブで https://github.com/IBM-Cloud/serverless-guestbook/tree/ce を開きます。
-
「Code」 、「Download ZIP」 の順にクリックし、zip ファイルをダウンロードします。
-
ファイルを unzip し、unzip されたファイルの
docsディレクトリーに移動します。 -
Guestbook.js を編集します。API URL の値を前のセクションのアプリケーション URL に置き換えます。
URI の末尾がスラッシュ (
/) でないことを確認してください。 そうでない場合、アプリは機能しません。 -
バケットの 「オブジェクト」 ビューを開き、guestbook.js ファイルおよび index.html ファイルを COS バケットにドラッグ・アンド・ドロップします。
-
バケットの 構成 タブにナビゲートします。 エンドポイントのセクションで、 静的ウェブサイトホスティングエンドポイントのセクションを見つけます。 パブリックエンドポイントをブラウザのタブにコピーします。
-
ゲストブック・ページが表示されます。
-
ゲストブックに新規エントリーを追加します。
リソースを削除する
作成したバケットおよび Object Storage サービスを削除するには、以下のようにします。
- Object Storage のバケットのオブジェクトに移動します
- タイトル行のボックスにチェック・マークを付け、バケット内のすべてのオブジェクトを選択します
- 「オブジェクトの削除」 をクリックします
- バケット・オブジェクト・ページの右上の 「アクション」 メニューで、「バケットの削除」 を選択します
- Object Storageの右上にある Actionsメニュー でDelete Instance を選択します
作成された IBM Cloudant サービスを削除するには、以下のようにします。
- リソース・リスト にナビゲートします。
- データベースの下にある
<yourinitials>-guestbook-dbサービスの隣にあるアクションメニューをクリックします - 「削除」 をクリックします。
アプリケーションおよびプロジェクト Code Engineを削除するには、以下のようにします。
- Code Engine ランディング・ページにナビゲートします。
- 左側のペインで、プロジェクト をクリックします。
- プロジェクトのリストで、ゲストブック・プロジェクトを確認し、削除 をクリックします。
リソースによっては、即時に削除されずに保持される場合があります (デフォルトでは 7 日間)。 リソースを完全に削除して再利用することも、保存期間内に復元することもできます。 リソースの再利用を使用する方法については、この資料を参照してください。