AWS App Runner での.NET ワークロード

モジュール 1

モジュール 1: AWS でのコンテナとサーバーレスコンピューティング

 学習モジュール

概要

AWS App Runner は、ウェブアプリケーションや API を開発者が簡単かつ迅速にデプロイできるフルマネージド型サービスです。大規模に、しかも事前のインフラ経験を必要とせずにデプロイすることができます。

学習目標

このモジュールでは、次のことを行います。

  • コンテナとサーバーレスについて学んでください。
  • コンテナとサーバーレスをサポートする AWS コンピューティングサービスを調べてください。
  • AWS App Runner がお客様のワークロードに適しているかどうかを判断する方法を理解してください。

現在よく使われているテーマは、コンテナとサーバーレスの 2 つです。コンテナを使用すると、オンプレミスでもクラウドでも、基盤となるインフラストラクチャを簡単に管理できます。現在、クラウドの全コンテナの約 80% が AWS で稼働しています。サーバーレスはお客様に代わってインフラストラクチャを管理し、チームがビジネスの優先事項に集中できるようにします。AWS はコンテナとサーバーレス向けに複数のサービスを提供しており、いくつかの重要な考慮事項を検討したうえで、ユースケースに適したサービスを選択できます。

 所要時間

30 分

コンテナ

アプリケーションとその設定、ランタイム、依存関係をすべて 1 つのまとまったバンドルにパッケージ化できたらいいと思いませんか? コンテナを使用すると、アプリケーションのコード、構成、依存関係を単一のオブジェクトにパッケージ化できます。これらは、サーバーにインストールされたオペレーティングシステムを共有し、リソースが分離したプロセスとして実行され、環境に関係なく、迅速で信頼性も高く、一貫性のあるデプロイを保証しています。 

コンテナ vs.仮想マシン

コンテナを理解するために、まず仮想マシンを比較できるように説明しましょう。物理サーバーが主流だった時代には、サーバーは単一の環境でした。ある程度のメモリ、ストレージ、ネットワークハードウェアが付属し、特定のオペレーティングシステムを実行して、1 つの組織にサービスを提供していました。その後、仮想化が登場し、コンピューターをソフトウェアでエミュレートすることが可能になりました。これで、「サーバー」は、組織とアプリケーションが必要とするオペレーティングシステムとリソースに合わせて調整された仮想マシン (VM) になるはずです。ハイパーバイザーと呼ばれるソフトウェア層は、仮想マシンを作成、実行、管理し、それらを物理ハードウェアに関連付けることで、高い効率性を実現します。物理サーバーは、複数のテナントに対して複数の VM を実行できるため、インフラストラクチャ全体のコストを削減できます。今日、企業では VM が主流であり、クラウドコンピューティングの基盤となっています。

コンテナには VM と同じ利点がありますが、移植性と効率性に優れています。コンテナは、依存関係、ライブラリ、設定とともにアプリをパッケージ化する方法です。複数のコンテナがホストオペレーティングシステムを共有し、独立したプロセスとして実行されます。VM はハードウェアを仮想化し、通常はギガバイト単位で測定されますが、コンテナはオペレーティングシステムを仮想化し、通常はメガバイト単位で測定されます。これにより、軽量で持ち運びやすく、効率的です。コンテナは、軽量で独立したソフトウェアコンポーネントという共通の理念を持つマイクロサービスに特に適しています。

コンテナはソフトウェアデプロイの単位として設計されているため、VM よりも開発者の作業方法が変わります。開発者は作業の一環としてコンテナを構築し、デプロイします。コンテナと仮想マシンは二者択一ではありません。多くの場合、これらを一緒に使用して、両方の長所を活かすことができます。コンテナをサポートする多くの AWS サービスは、それらを仮想マシン上で実行しています。

コンテナは、サーバーにインストールされたオペレーティングシステムを共有し、リソースが分離したプロセスとして実行され、環境に関係なく、迅速で信頼性も高く、一貫性のあるデプロイを保証しています。ラップトップにローカルにデプロイする場合でも、本番環境にデプロイする場合でも、シークレットと環境設定を除けば、エクスペリエンスは変わりません。

リファレンス:AWS コンテナ

コンテナのタイプ

Docker プラットフォーム

Docker は、アプリケーションをすばやく構築、テスト、デプロイできるソフトウェアプラットフォームです。Docker では、コンテナを「ホストマシン上の他のすべてのプロセスから分離された、マシン上のサンドボックス化されたプロセス」と定義しています。この分離は、Linux に長年使われてきたカーネル名前空間とコントロールグループを活用します。Docker は、これらの機能を親しみやすく使いやすいものにするよう努めてきました。

Docker を使用するメリットには、コードの迅速な配送、アプリケーション操作の標準化、コードのシームレスな移動、リソースの効率的な利用によるコスト削減などがあります。平均して、Docker ユーザーは、平均すると非 Docker ユーザーの 7 倍以上の頻度でソフトウェアを出荷しています。コンテナのデプロイ、トラブルシューティング、ロールバックの操作を標準化できます。ローカルマシンからプロダクションへの移行はシンプルで簡単です。コンテナを使用すると、各サーバーでより多くのコードを実行できるため、コストを節約できます。

最新の .NET アプリケーション (.NET Core 3.1 または .NET 5 以降で記述されている) は Linux 上で実行でき、Docker コンテナと互換性があります。

Docker コンテナをサポートする AWS サービスには、AWS App Runner、Amazon Elastic Container Service (ECS)、Amazon Elastic Kubernetes Service (EKS)、ECS または EKS 上の AWS Fargate、AWS Lambda などがあります。

リファレンス:AWS ドッカー

Linux コンテナ

Docker Linux コンテナは Linux ホスト上で動作します。最新の .NET アプリケーション (.NET Core 3.1 または .NET 5 以降で記述されている) は Linux コンテナで実行できますが、Windows を必要とする従来の.NET Framework アプリケーションは実行できません。

Linux コンテナをサポートする AWS サービスには、AWS App Runner、Amazon Elastic Container Service (ECS)、Amazon Elastic Kubernetes Service (EKS)、ECS または EKS 上の AWS Fargate、AWS Lambda などがあります。

Windows コンテナ

Windows コンテナは、マイクロソフト Windows オペレーティングシステムをサポートしています。Windows コンテナは Linux コンテナインスタンスでは実行できません。その逆も同様です。

Windows コンテナをサポートする AWS サービスには、Amazon Elastic Container Service (ECS)、AWS Fargate 上の Amazon ECS、および Amazon Kubernetes Service (EKS) が含まれます。AWS App Runner は Windows コンテナをサポートしていません。

リファレンス:アマゾン EC2 Windows コンテナ

コンテナのメリット

コンテナには目に見えるメリットが数多くあります。

軽量

コンテナは軽量のソフトウェアパッケージです。ゲスト OS イメージが含まれていないため、仮想マシンよりも大幅に小さくなります。代わりに、コンテナはホストとオペレーティングシステムを共有します。このため、通常、コンテナは仮想マシンよりも起動が速くなります。

標準化およびポータブル

コンテナは、一貫性のあるポータブルなソフトウェア環境を提供します。これにより、デプロイ、問題調査、ロールバックの操作を標準化できます。

シームレスに移動

コンテナはシームレスに移動します。コンテナ化されたアプリケーションは、ローカルマシンから本番環境に、またオンプレミス環境からクラウドに移動できます。コンテナは一貫性とバージョン管理機能により、CI/CD パイプラインの実装を簡素化できます。

より早く出荷

シームレスに移動できる軽量でポータブルなコンテナの複合効果は、俊敏性です。コンテナを使用すると、ソフトウェアの依存関係、環境のセットアップ、環境の違いのトラブルシューティングに費やす時間がなくなるため、開発時間を短縮できます。例えば、Docker ユーザーは、平均すると非 Docker ユーザーの 7 倍以上の頻度でソフトウェアを出荷しています。

コスト削減

コンテナを使用すると、各サーバーインスタンスでより多くのコードを実行できます。これにより、使用率が向上し、コストを節約できます。

参考資料:AWS | ドッカーとは何ですか?AWS | コンテナ

AWS コンテナのメリット

AWS はコンテナの人気のクラウドデスティネーションです。現在、クラウドの全コンテナの約 80% が AWS で稼働しています。コンテナ固有の利点に加えて、AWS でコンテナをホストすると、これらの利点も得られます。 

セキュア

AWS は、セキュリティ、コンプライアンス、ガバナンスのために 200 を超えるサービスと主要機能を提供しています。AWS は、強力なセキュリティ分離と最新のセキュリティアップデートでコンテナを運用します。各コンテナにきめ細かなセキュリティ権限を設定できます。

信頼性

AWS は、22 のリージョンに 69 のアベイラビリティーゾーンを含むグローバルインフラストラクチャを提供しているため、コンテナを世界中で運用できます。すべての AWS コンテナサービスにはサービスレベル契約 (SLA) があります。

選択肢

AWS は、マネージドサービスやサーバーレスサービスなど、幅広いコンテナサービスを提供しています。これには、Amazon Elastic Container Registry Service (ECR)、Amazon Elastic Container Service (ECS)、Amazon Elastic Kubernetes Service (EKS)、AWS Fargate、Amazon Elastic Compute Cloud (EC2)、および AWS App Runner が含まれます。

AWS では、既存の .NET および Java アプリケーションのコンテナ化と移行を支援する App2Container ツール (A2C) も提供しています。

AWS への統合

AWS コンテナサービスは、設計により AWS と深く統合されています。これにより、コンテナアプリケーションは、自動スケーリング、ネットワーキング、セキュリティ、モニタリングに AWS のサービスを活用できます。コンテナの俊敏性と、AWS の伸縮自在性とセキュリティを組み合わせることができます。

参考資料:AWS コンテナの詳細

コンテナのユースケース

依頼者の一般的ユースケースは次のとおりです。

マイクロサービス

マイクロサービスは、ソフトウェア開発に対するアーキテクチャ的および組織的なアプローチです。このアプローチでは、ソフトウェアは小さな独立した複数のサービスで構成されます。各サービスは、適切に定義された API を介して通信します。これらのサービスは、小規模の自己完結できるチームが所有します。マイクロサービスアーキテクチャにより、アプリケーションの拡張と開発が容易になります。これにより、イノベーションが可能になり、新機能の市場投入までの時間が短縮されます。コンテナはマイクロサービスの一般的な戦略です。モノリスアプリケーションはマイクロサービス、つまりコンテナ内の独立したコンポーネントに分解できます。

バッチ処理

バッチ処理と抽出-変換-ロード (ETL) ジョブはコンテナに適しています。すぐに開始でき、スケジュールどおりに、またはイベントに応じて実行できます。需要に応じて動的に拡張できます。

機械学習

コンテナを使用することで、トレーニングや推論の機械学習モデルをすばやくスケールし、あらゆるプラットフォームのデータソースと連携動作が可能です。

ハイブリッドアプリケーション

コンテナを使用すると、コードのデプロイ方法を標準化できるため、オンプレミス環境とクラウド環境の間で稼働するアプリケーションのワークフローを簡単に作成できます。 

クラウドへのアプリケーション移行

コンテナは、クラウドへの「リフトアンドシフト」移行に役立ちます。アプリケーション全体をコンテナに簡単にパッケージ化できるため、コードを変更せずにクラウドに移動できます。クラウドの弾力性を利用してコンテナを拡張できます。

リファレンス:AWS | マイクロサービス

サーバーレス

サーバーレステクノロジを使用すると、サーバーについて考えることなくアプリケーションを構築して実行できます。AWS は、コードのホスティング、データの管理、アプリケーションの統合のためのマネージドサービスを提供しており、サーバーを管理する必要がありません。自動スケーリング、組み込みの高可用性、従量課金制の課金モデルが特徴です。 

サーバーレスのメリット

サーバーレステクノロジーにより、インフラストラクチャの管理に煩わされることなく、アプリケーションと顧客に集中できます。

オペレーションのオーバーヘッドを削減する

サーバーレステクノロジーでは、インフラストラクチャ管理、容量プロビジョニング、パッチ適用を行う必要はありません。運用上のオーバーヘッドを排除することで、チームは迅速なリリース、フィードバックの獲得、速やかな市場への繰り返し投入が可能になります。

大規模に採用

サーバーレステクノロジーは、ゼロ需要からピーク需要まで自動的にスケーリングできます。これにより、顧客のニーズに迅速に対応できます。

コストを下げる

サーバーレステクノロジーは、ゼロ需要からピーク需要まで自動的にスケーリングできます。これにより、顧客のニーズにこれまで以上に迅速に適応できます。

より優れたアプリケーションをより簡単に構築

サーバーレステクノロジーには、他の AWS サービスとの統合が組み込まれています。アプリケーションの構成に煩わされることなく、アプリケーションの構築に集中できます。

リファレンス:AWS | サーバーレス

サーバーレスのユースケース

サーバーレステクノロジーは、次のような一般的なユースケースに適しています。

ウェブアプリケーション

Web API やマイクロサービスを含む Web アプリケーションは、サーバーレステクノロジで簡単に作成できます。サーバーレスコンピューティングサービスは、ウェブトラフィックに合わせて自動スケーリングされます。

データ処理

Amazon Simple Storage Service (S3)、Amazon DynamoDB、Amazon Relational Database Service Proxy (RDS Proxy)、Amazon Aurora Serverless などのサーバーレスデータテクノロジーを使用すると、ほぼすべての規模でデータを処理できます。

バッチ処理

サーバーレステクノロジは、スケジュールに従って、またはイベントに応じてバッチタスクを実行できます。

イベントの取り込み

サーバーレス機能を実行して、受信した非構造化データを処理、インデックス化、分析し、機械学習サービスを適用できます。

コンテナ用 AWS コンピュートサービス

コンテナとサーバーレスについて理解できたので、コンテナをサポートする AWS コンピューティングサービスについて考えてみましょう。その中にはサーバーレスもサポートしているものもあります。これらのサービスはすべて Docker Linux コンテナーをサポートしており、一部は Windows コンテナーもサポートしています。コンテナ用の AWS サービスとツールの完全なリストは、AWS コンテナページで確認できます。これらのサービスについて細部まで知る必要はありませんが、それぞれのサービスの違いを理解しておく必要があります。

コンテナレジストリ:Amazon ECR

Amazon Elastic Container Registry (ECR) を使用すると、コンテナソフトウェアを公開または私的にに保存、共有してデプロイできます。通常は、コンテナを ECR にプッシュします。ECR では、AWS App Runner、Amazon ECS、Amazon EKS などの AWS コンテナコンピューティングサービスのすぐ近くにあります。

コンテナオーケストレーション:Amazon ECS、Amazon EKS、AWS Fargate

これらのサービスはコンテナをホストし、オーケストレーションも行います。つまり、コンテナのプロビジョニング、デプロイ、ネットワーク、スケーリング、可用性、ライフサイクル管理を自動化します。

Amazon Elastic Container Service (Amazon ECS) は、コンテナ化されたアプリケーションのデプロイ、管理、スケールを容易にするフルマネージド型のコンテナオーケストレーションサービスです。安全性が高く、信頼性が高く、スケーラブルなコンテナを ECS で実行できます。

Amazon Elastic Kubernetes Service (Amazon EKS) は、クラウドまたはオンプレミスで Kubernetes アプリケーションを実行、スケールするマネージドコンテナサービスです。Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動的に行うためのオープンソースシステムです。Amazon EKS は Kubernetes を起動、実行、スケールするための最も信頼できる方法です。

AWS Fargate コンテナ向けサーバーレスコンピューティングAmazon ECS と Amazon EKS はどちらもサーバーレス形式で利用でき、AWS Fargate と組み合わせると異なる価格モデルになります。

クラウドでコンテナを管理することに加えて、Amazon ECS と Amazon EKS はどちらも、Amazon ECS Anywhere または Amazon EKS Anywhere サービスを介して、オンプレミスでコンテナアプリケーションを管理することもできます。

サーバーレス関数:AWS Lambda

AWS Lambda は、関数を実行するためのサーバーレスのイベント駆動型サービスです。コンテナをサポートしています。

サーバーレベルの制御:Amazon EC2 および EC2 スポットインスタンス

これらのオプションは、インフラストラクチャの詳細を最も細かく制御できますが、AWS でコンテナを実行する方法としては最も管理が行き届きません。

Amazon Elastic Compute Cloud (Amazon EC2) は、安全でサイズ変更可能なコンピューティング性能をクラウド内で提供するウェブサービスです。EC2 上でサーバーレベルの制御でコンテナを実行できます。そのためには、EC2 インスタンスを割り当て、そのインスタンスに Docker をインストールします。

アプリケーションが耐障害性を備えている場合は、最大 90% の割引価格で入手できる Amazon EC2 スポットインスタンスで実行できます。スポットインスタンスを利用することで、AWS クラウドで使用されていない EC2 キャパシティを活用できます。スポットインスタンスを使用するには、アプリケーションが中断可能である必要があります。データ分析、バッチジョブ、バックグラウンド処理、またはオプションタスクにはスポットインスタンスを検討してください。

シンプルなウェブアプリケーション:AWS Lightsail

AWS Lightsail は、固定月額料金で実行したいシンプルなコンテナ化されたアプリケーションに適しています。小規模な Web サイトとデータベースを所有する学生、中小企業、およびスタートアップ企業にとって、クラウドで立ち上げて運用するのに適しています。 

フルマネージド:AWS App Runner

ついに、このコースのトピックである AWS App Runner にたどり着きました。App Runner は、コンテナ化されたウェブアプリケーションや API を開発者が簡単かつ迅速にデプロイできるフルマネージド型サービスです。大規模に、しかも事前のインフラ経験を必要とせずにデプロイすることができます。App Runner はサーバーレスでもあり、コンテナとサーバーレスの利点を同時に活用できます。App Runner は、Linux コンテナ上で最新の .NET ワークロードを実行できます。

AWS コンピュートサービスの選択

コンテナ向けの AWS コンピューティングサービスの見学ができたので、AWS App Runner と他のサービスがアプリケーションに適しているかどうかを判断するのに役立ついくつかの重要な質問を見てみましょう。表 1 は、AWS サービスに関する考慮事項を示しています。

表 1: AWS コンテナコンピューティングサービスの決定表

コンテナは初めてですか、それともコンテナの経験がありますか?

コンテナの初心者であれば、AWS App Runner を検討してください。これは最も高度なサービスオプションであり、事前のインフラストラクチャの経験は必要ありません。

Windows コンテナが必要ですか?

従来の.NET Framework アプリケーションをコンテナーで実行する場合、使用できるのは Windows コンテナーに限定されます。Windows コンテナをサポートする AWS のサービスは、Amazon ECS、AWS Fargate を使用する Amazon ECS、および Amazon EKS です。最新の.NET を実行している場合は、Linux コンテナと、コンテナをサポートする任意の AWS コンピューティングサービスを使用できます。

コンテナオーケストレーションは現在必要ですか、それとも将来のニーズですか?

単一コンテナのアプリケーションと、オーケストレーションが必要なコンテナの組み合わせには大きな違いがあります。コンテナの配置が複雑で、生涯管理が必要な場合は、Amazon ECS または Amazon EKS を検討してください。 

サーバーレスはあなたにぴったりですか?

アプリケーションがサーバーレスのユースケースに適合し、インフラストラクチャとサーバーレス支払いモデルを AWS に任せることに抵抗がない場合は、AWS Lambda、AWS App Runner、または AWS Fargate のオプションを検討してください。

  1. アプリケーションがイベント駆動型関数で構成されている場合は、AWS Lambda を使用できます。
  2. オーケストレーションが必要な場合は、Amazon ECS または Amazon EKS で AWS Fargate を使用する必要があります。
  3. 完全マネージド型のサービスを希望する場合は、AWS App Runner を選択してください。

重要なポイント

これで、コンテナとサーバーレス、およびそれぞれの利点についての基本的な理解ができたはずです。さまざまな AWS コンピューティングサービスとその違いについて学びました。また、ワークロードに適した AWS コンピューティングサービスを決定するためにどの質問をすべきかについても学びました。

まとめ

このモジュールでは、最初にコンテナについて学習しました。コンテナが仮想マシンとどのように異なるか、Docker Linux コンテナとWindows コンテナの違いについてです。軽量で、標準化されており、持ち運びが簡単で、シームレスに移動でき、より速く出荷でき、費用を節約できます。AWS のコンテナは安全で信頼性が高く、さまざまなコンテナサービスによってサポートされており、AWS と緊密に統合されています。

次に、サーバーレステクノロジについて学びました。サーバーレステクノロジを使用すると、サーバーについて考えることなくアプリケーションを構築できます。利点としては、運用上のオーバーヘッドの排除、自動スケーリング、コストの削減、他の AWS サービスとの組み込み統合によるアプリケーションのより簡単な構築などがあります。ユースケースは、ウェブアプリケーション、データ処理、バッチ処理、イベント取り込みです。

コンテナ用の AWS コンピューティングサービスと、コンピューティングサービスの選択方法について学びました。AWS App Runner は、コンテナをホストするための完全マネージド型サービスであり、サーバーレスでもあることを学びました。

このページは役に立ちましたか?