Amazon Web Services ブログ

Bob’s Used Books のご紹介 – 新しい現実世界の .NET サンプルアプリケーション

5月3日、AWS を使用する .NET デベロッパーのために、新しいオープンソースサンプルアプリケーション (Bob’s Used Books という名前の架空の e コマースの古本屋) が利用可能になったことを発表いたしました。AWS の .NET アドボカシーおよび開発チームは定期的にお客様と対話しており、その際に、より詳細なサンプルに関するリクエストをいただくことがよくあります。お客様からは、小さなコードスニペットは API の仕組みを説明するのに役立つものの、開発チームがクラウド向けの最新のアプリケーションを構築する方法をより良く理解するためには、より完全で現実的なサンプルを利用する必要があり、チーム自身がそれを希望しているということを伺っています。本日のサンプルアプリケーションのリリースは、これらの要望にお応えしたものです。

Bob’s Used Books は、ASP.NET Core バージョン 6 を使用して構築されたサンプル e コマースアプリケーションであり、典型的なオンプレミスカスタムアプリケーションの初期モダナイゼーションを表しています。モダナイゼーションの第 1 段階を表すこのアプリケーションは、最新のクロスプラットフォーム .NET を使用し、クラウドにおいて Windows システムと Linux システムの両方で実行できるようにしています。多くの .NET デベロッパーは現在、このような業務に携わっており、Toolkit for .NET RefactoringPorting Assistant for .NET など、AWS から無料で入手できるツールを使用して、独自のアプリケーションを .NET Framework から .NET に移植しています。

Bob's Used Books サンプルアプリケーションのホームページ

サンプルアプリケーションの機能
当社の架空の書店をご利用の顧客は、店舗で古本を見て回ったり、探したり、価格、状態、ジャンルなど、選んだ本の詳細を確認したりできます。

Bob's Used Books サンプルアプリケーションの検索結果ページには、8 冊の本とそれらの価格が表示されています。

Bob's Used Books サンプルアプリケーションの本の詳細のページ

実際の e コマースストアと同様に、購入者はショッピングカートに本を追加したり、次回のチェックアウトまで保留にしたり、個人的なほしい物リストに追加したりできます。購入することにしたら、顧客はチェックアウトプロセスを開始できます。このプロセス中、顧客は、サインイン (既存の顧客の場合) またはサインアップするよう促されます。

Bob's Used Books サンプルアプリケーションのチェックアウトのページ

このサンプルアプリケーションでは、書店のスタッフが同じウェブアプリケーションを使用して在庫と顧客の注文を管理します。サインインしようとしているのがスタッフメンバーであるか (スタッフメンバーである場合は管理ポータルを表示できます)、通常の店舗の顧客であるかを判断するために、ロールベースの認証が使用されます。管理ポータルにアクセスしたスタッフは、保留中、処理中、完了済みの注文と、店舗の在庫の状態の概要を表示するダッシュボードビューから開始します。

Bob's Used Books サンプルアプリケーションのスタッフ用ダッシュボードのページ

スタッフは在庫を編集して新しい本を追加したり、表紙画像を設定したり、在庫レベルを調整したりできます。同じダッシュボードから、スタッフは保留中の注文を表示して処理することもできます。

Bob's Used Books サンプルアプリケーションのスタッフ用の注文処理ページ

ここには示されていませんが、私がとてもすばらしいと思うのは、顧客が店舗を通じて本を再販できるシミュレーションワークフローです。このワークフローでは、顧客は申込書を提出し、顧客から購入するかどうかを店舗管理者が評価して決定し、承諾された場合は顧客がその本を店舗に「ポスティング」し、最後に管理者が本を在庫に追加して、顧客に代金を支払います。ただし、これはすべて架空のものであり、実際の金銭的な取引は行われないことに留意してください。

アプリケーションアーキテクチャ
書店のサンプルは、.NET への移植が必要な .NET Framework ベースのアプリケーションとして開始されたわけではありませんが、.NET Framework 開発の時代で典型的に見られた (そして現在でも引き続き使用されている) モノリシック MVC (Model-View-Controller) アプリケーション設計を使用しています。また、単一の Microsoft SQL Server データベースを使用して、在庫、ショッピングカート、ユーザーデータなどを保存します。

Bob's Used Books サンプルアプリケーションの概要のアーキテクチャ

AWS に完全にデプロイされると、アプリケーションは複数のサービスを利用します。これらは、アプリケーションをホストするためのリソースを提供したり、実行中のアプリケーションに設定を提供したり、実行中のコードに便利な機能 (画像を使用した検証など) を提供したりします。

  • Amazon Cognito – 顧客と書店スタッフの認証に使用されます。このアプリケーションは Cognitoホストされた UI を使用してサインインとサインアップの機能を提供します。
  • Amazon Relational Database Service (RDS) – e コマースアプリケーション用に、在庫、顧客、および他の一般的なデータを含む単一の Microsoft SQL Server Express インスタンスを管理します。
  • Amazon Simple Storage Service (Amazon S3) – S3 バケットは本の表紙画像の保存に使用されます。
  • AWS Systems Manager Parameter Store – ランタイム設定データ (表紙画像用の S3 バケットの名前など) や Cognito ユーザープールの詳細が含まれます。
  • AWS Secrets Manager – 基盤となる SQL Server データベースのユーザーとパスワードの詳細を RDS に保持します。
  • Amazon CloudFront – S3 バケット内の表紙画像にアクセスするためのドメインを提供します。つまり、バケットを一般公開する必要はありません。
  • Amazon Rekognition – アップロードされた本の表紙画像に好ましくないコンテンツが含まれていないことを検証するために使用されます。

アプリケーションは、単一のリレーショナルデータベースを使用する代わりに目的別データベースを採用する、モノリスを分解してマイクロサービスを使用する (後者については、AWS は Microservice Extractor for .NET を提供しています) など、将来のさらなるモダナイゼーションの機会をもたらすための出発点です。AWS の .NET 開発、アドボカシー、およびソリューションアーキテクトのチームは、今後数か月間で、このサンプルを使用してモダナイゼーションを実現できる場面を説明する新しいコンテンツの機会に強い喜びを感じています。また、サンプルはオープンソースであるため、モダナイゼーションに関して .NET 開発コミュニティがそれをどのように変化させていくのかにも注目しています。

アプリケーションの実行
AWS のソリューションアーキテクトであり、私の同僚でもある Brad Webber が、このサンプルについて私たちが公開する予定である技術ブログシリーズの最初の記事を執筆しました。これらは、新しい .NET on AWS ブログチャネルでご覧いただけます。Brad の最初の記事では、アプリケーションを自分のマシンで実行またはデバッグする方法と、アプリケーションを AWS クラウドに完全にデプロイする方法について詳しく説明しています。

アプリケーションは、クラウドの外部で実行する場合、データベースのニーズに合わせて SQL Server Express の localdb インスタンスを使用します。つまり、現在、実行またはデバッグするには Windows マシンを使用する必要があります。Visual Studio、Visual Studio Code、または JetBrains Rider (すべて Windows) からアクセスできる起動プロファイルを使用して、アプリケーションの実行方法を選択します (例: クラウドリソースを使用しない、一部のクラウドリソースを使用する)。

  • [Local] (ローカル) – この起動プロファイルを選択すると、アプリケーションは完全にマシン上で実行され、クラウドリソースを使用せず、AWS アカウントも必要ありません。これにより、クラウドリソースの料金が課金されることなく、コードについて調べたり、実験したりできます。
  • [Integrated] (統合) – このプロファイルを使用しても、アプリケーションは Windows マシン上でローカルに実行され、localdb データベースインスタンスを使用し続けますが、S3 バケット、Rekognition、Cognito などの一部の AWS リソースも使用するようになります。このプロファイルを使用すると、AWS SDK for .NET と、NuGet で当社が配布しているさまざまな拡張ライブラリを使用して、お客様のアプリケーションコード内における AWS のサービスの利用方法を学習できます (アプリケーションを開発する際に使用できるすべての使用可能なライブラリの完全なリストについては、GitHub の .NET on AWS リポジトリを参照してください)。このプロファイルを使用する際にアプリケーションが必要とするクラウドリソースを設定できるように、サンプルリポジトリには AWS Cloud Development Kit (AWS CDK) プロジェクトが用意されています。これにより、これらのリソースをオンデマンドで簡単に設定および削除できます。

AWS へのサンプルのデプロイ
アプリケーション全体を AWS クラウド (今回のケースでは Amazon Relational Database Service (RDS) の SQL Server Express データベースインスタンスを使用して Amazon Elastic Compute Cloud (Amazon EC2) の仮想マシン) にデプロイすることもできます。デプロイは AWS 無料利用枠と互換性のあるリソースを使用しますが、無料利用枠の制限を超えると料金がかかる可能性があることに注意してください。localdb に依存していることにより Windows を必要とする独自のマシンでアプリケーションを実行するのとは異なり、macOS や Linux を実行しているマシンを含め、どのマシンからでも AWS にアプリケーションをデプロイできます。繰り返しになりますが、すぐに使用を開始できるように CDK プロジェクトがリポジトリに含まれています。これらのステップについては Brad のブログ記事で詳しく説明されていますので、ここでは繰り返しません。

クラウドで仮想マシンを使用することは、オンプレミスサーバーの設定と似ているため、オンプレミスアプリケーションをモダナイズするための最初の一歩となることがよくあります。このことに鑑みて、Amazon EC2 をすぐにデプロイできるようにサポートしています。将来的には、AWS App RunnerAmazon Elastic Container Service (Amazon ECS)Amazon Elastic Kubernetes Service (EKS) などの AWS 上のコンテナサービスにアプリケーションをデプロイする方法を示すコンテンツを追加する予定です。

次のステップ
Bob’s Used Books のサンプルアプリケーションが GitHub で公開されました。AWS で作業している .NET デベロッパーで、より奥深く、より現実的なサンプルをお探しの場合は、リポジトリのクローンを作成してアプリケーションを試してみることをお勧めします。また、当社では、お客様がこのアプリケーションを使用して、どのようなモダナイゼーションジャーニーに乗り出すかについても関心を抱いています。状況を知ることで、当社が今後、サンプル用にコンテンツを作成する際に参考にさせていただきます。リポジトリの issues セクションでぜひお知らせください。また、サンプルに対するコントリビューションも歓迎しています。

原文はこちらです。