Power Unit Inc. | 想像力のない者に翼はない | Computing
17410
page-template,page-template-full_width,page-template-full_width-php,page,page-id-17410,qode-quick-links-1.0,woocommerce-no-js,ajax_fade,page_not_loaded,,side_area_uncovered_from_content,columns-4,qode-theme-ver-16.2,qode-theme-bridge,wpb-js-composer js-comp-ver-5.4.7,vc_responsive
 

Computing

Computing

AWS の最も重要で中核をなすクラウド基盤のサービスです。仮想サーバー、コンテナー機能、それらの管理サービスを含みます。

Amazon Elastic Compute Cloud (Amazon EC2) ... 仮想サーバー

弾力性のあるウェブスケールコンピューティング

Amazon Elastic Compute Cloud (Amazon EC2) とは、クラウド内でサイズ変更が可能なコンピューティング処理能力を提供する従量課金制の仮想サーバー機能です。従来のシステムにおける Windows/Linux サーバーに当たります。

Amazon EC2 では、起動している仮想サーバー(アプリケーション)を「インスタンス」と呼びます。

Amazon EC2 を使用すれば、数分でキャパシティーの増減を行うことができます。数時間、数日かかることはありません。一から数百、または数千のサーバーインスタンスさえ、同時に作動させることができます。もちろん、これはすべてウェブサービス API で制御されるため、お客様のアプリケーションはそのニーズに応じて、自動的に規模の拡大や縮小(オートスケール)を行うことができます。

つまり、従来のようにシステム構築前に処理能力を見積もって、予算を確保して、業者から納入して、自社のデータセンターにサーバーを設置して、ネットワークを設定して、ミドルウェアをセットアップして、アプリケーションをデプロイして、運用時にモニタリングしながらサーバーのキャパシティーの増減を決める(繰り返し作業は)必要がありません。

下の図は、最もシンプルな Web アプリケーションサーバーのアーキテクチャー概念図です。中央にあるオートスケールする部分がコンピューティングの旗艦エンジンとなる Amazon EC2 です。バックエンドには、リレーショナル・データーベース Amazon RDS と、静的なコンテンツ(イメージや動画)のための Amazon S3 があります。フロントエンドにはロードバランシングのための ELB と、最もユーザーに近いところに DNS リゾルブを務める Amazon Route 53 が構えています。

Amazon EC2 Container Service ... Docker(コンテナー)

Dockerでコンテナ化されたアプリケーションを本番環境で実行する

Amazon EC2 Container Service (ECS) とは、Docker を運用するためのサービスです。Docker とは、仮想化技術を使ったアプリケーション実行環境構築のためのオープンソースソフトウェアのツールです。

Amazon ECS は、非常にスケーラブルで高性能なコンテナ管理サービスで、Docker コンテナをサポートし、Amazon EC2  インスタンスのマネージド型クラスターでアプリケーションの実行を容易にします。Amazon ECS を使用すると、自社でクラスター管理インフラストラクチャのインストール、運用、スケールを行う必要がなくなります。

簡単な API 呼び出しを使用して、コンテナ対応アプリケーションの起動と終了、クラスターの状態のクエリ、多くの使い慣れた機能、セキュリティグループ、ロードバランサー(Elastic Load Balancing)、Amazon EBS ボリューム(Amazon EC2 の永続的なファイルシステム)、IAM (アイデンティティとアクセスコントロールなど)のロールの管理などを実行できます。

Amazon ECS を使用することで、リソースニーズと可用性要件に基づいて、クラスター全体のコンテナの配置をスケジューリングできます。ビジネスまたはアプリケーション固有の要件を満たすために、独自のスケジューラーまたはサードパーティ製のスケジューラーを統合することもできます。

Dockerとの互換性

Amazon ECS は Docker をサポートしており、Amazon EC2 インスタンスのクラスター全体で Docker コンテナを実行、管理できます。Amazon ECS が管理するクラスターの各インスタンスは Docker デーモンを実行します。そのため、コンテナとしてローカルでパッケージングしたアプリケーションはすべて、設定を変更しなくても Amazon ECS でデプロイおよび実行できます。

Amazon EC2 Container Registry ... Docker レジストリー

Docker イメージの保存と共有を行うサービス

Docker イメージとは、アプリケーション実行環境すべてをパッケージングしたもののことを指します。これを利用することで、AWS だけでなく、オンプレミス環境や他のクラウドへのシステムの移行も容易になります。

Amazon EC2 Container Registry (ECR) のメリット 

Amazon EC2 Container Registry (ECR) は、完全マネージド型の Docker コンテナレジストリです。このレジストリを使うと、開発者は Docker コンテナイメージを簡単に保存、管理、デプロイできます。

Amazon ECR は Amazon EC2 Container Service (ECS) に統合されているため、開発から本番までのワークフローを簡略化できます。Amazon ECR を使用すると、自前のコンテナリポジトリの運用や、基盤となるインフラストラクチャのスケーリングの検討は不要になります。Amazon ECR は非常に可用性が高くスケーラブルなアーキテクチャでイメージをホストするため、コンテナをアプリケーションに確実にデプロイすることが可能です。

AWS Identity and Access Management (IAM) に統合すると、各リポジトリをリソースレベルで制御できます。Amazon ECR に前払い料金などの義務はありません。リポジトリに保存したデータ量とインターネットに送信されたデータ量に対してのみ料金が発生します。

AWS Elastic Beanstalk

AWS Elastic Beanstalk は、Java、.NET、PHP、Node.js、Python、Ruby、Go および Docker を使用して開発されたウェブアプリケーションやサービスを、Apache、Nginx、Passenger、IIS などの使い慣れた Web サーバーでデプロイおよびスケーリングするための、使いやすい PaaS です。

お客様はコードをアップロードするだけで、AWS Elastic Beanstalk が、EC2 と S3 の生成、キャパシティのプロビジョニング、ロードバランシング(ELB)、Auto Scaling からアプリケーションの状態モニタリングまで、デプロイを自動的に処理します。同時に、お客様のアプリケーションが稼動している AWS リソースの完全なコントロールを維持でき、いつでも基本的なリソースにアクセスすることができます。

例えば、Java で開発している場合、Eclipse に AWS Toolkit for Eclipse を導入し、開発した Web アプリケーションをデプロイすると、Apache Tomcat が起動した EC2 に配置され、数分以内でサービスを提供できます。

AWS Elastic Beanstalk は、次のような開発プラットフォームをサポートしています。

  • Apache Tomcat for Java
  • Apache HTTP Server for PHP
  • Apache HTTP Server for Python
  • Nginx or Apache HTTP Server for Node.js
  • Passenger for Ruby
  • Microsoft IIS for .NET
AWS Lambda ... イベントドリブン型コンピューティング

AWS Lambda は、クライアントからのリクエスト発生などのタイミングで任意のプログラムを動かすイベントドリブン型のサービスです。Amazon EC2 のように、常時稼働しておく仮想サーバ機能ではないので、運用コストも安価で、他の様々な AWS サービスと組み合わせて利用できます。

AWS Lambda を使用すれば、サーバーのプロビジョニング(事前準備)や管理なしで任意のコードを実行できます。課金は実際に使用したコンピューティング時間に対してのみ発生し、コードが実行されていないときには料金も発生しません。

AWS Lambda を使用すれば、実質どのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずに実行できます。コードさえアップロードすれば、高可用性を実現しながらコードを実行およびスケーリングするために必要なことは、すべて AWS Lambda により行われます。コードは、他の AWS サービスから自動的にトリガーするよう設定することも、ウェブやモバイルアプリケーションから直接呼び出すよう設定することもできます。

AWS Lambda ではコードを自動的に実行します。サーバーのプロビジョニングや管理は必要ありません。必要なのは、コードを書いて Lambda にアップロードすることのみです。

AWS Lambda では、毎回のトリガーに対応してコードを実行することにより、自動的にアプリケーションをスケールします。コードは並行して実行され、トリガーごとに個別に処理され、ワークロードのサイズに合わせて正確にスケールされます。

AWS Lambda では、コードが実行される 100 ms ごと、およびコードがトリガーされた回数に対して課金されます。コードが実行されていないときは、料金がまったく発生しません。

Auto Scaling

Auto Scaling では、お客様のアプリケーションの需要曲線に従い、事前に Amazon EC2 のパフォーマンスを手動でプロビジョニングする必要性を軽減します。たとえば、お客様の Amazon EC2 のグループのロードアベレージが高いときに新たな Amazon EC2 インスタンスを Auto Scaling Group に追加するための条件を設定できます。同様に、CPU の利用率が低いときに同じ数のインスタンスを少なくする条件を設定することができます。

負荷の変化を予測できる場合には、Auto Scaling でスケジュールを設定し、スケーリングアクティビティを計画できます。スケーリングアクティビティをトリガーする際のアラームを送信するには Amazon CloudWatch を使用でき、Auto Scaling Group 内のインスタンスにトラフィックを分散するには Elastic Load Balancing を使用できます。

Auto Scaling によって、Amazon EC2 のグループを最適化された利用環境で実行することができます。

下の図では、Amazon EC2 Web/App が Auto Scaling するようになっています。Amazon CloudWatch は常に Elastic Load Balancing (ELB) の下で動作している EC2 インスタンスの状態を監視し、ある特定の条件、例えば、負荷が高くなった場合にアラームを起動します。EC2 インスタンスは Auto Scaling 可能なので、負荷が増大した時は、EC2 の AMI(仮想サーバーのマシンイメージ)を EC2 のグループに自動的に追加します。

Elastic Load Balancing (ELB) ... 負荷分散 - ロードバランシング

Elastic Load Balancing は、受信アプリケーショントラフィックを複数の Amazon EC2 インスタンス間で、自動的に分散します。アプリケーションの耐障害性を実現し、アプリケーショントラフィックのルーティングに必要な負荷分散能力をシームレスに提供します。

Elastic Load Balancing (ELB) では、高可用性、自動スケーリング、および強固なセキュリティを特徴とした 2 つのタイプのロードバランサーを提供します。ELB は AWS の機能の分類上では「ネットワーク」に含まれますが、便宜上、本項目「コンピューティング」で解説します。

Classic Load Balancer は、アプリケーションまたはネットワークレベルのいずれかの情報に基づいてトラフィックをルーティングします。Application Load Balancer は、リクエストのコンテンツを含む高度なアプリケーションレベルの情報に基づいてトラフィックをルーティングします。

Classic Load Balancer は、複数の EC2 インスタンス間でのシンプルなトラフィックの負荷分散に最適です。一方、Application Load Balancer は、高度なルーティング機能、マイクロサービス、およびコンテナベースのアーキテクチャが必要なアプリケーションに最適です。Application Load Balancer では、トラフィックを複数のサービスにルーティングしたり、同じ EC2 インスタンスの複数のポート間で負荷分散したりする機能を提供します。

ちなみに ELB は AWS が単障害点の回避とロードアベレージを保証するので、ELB を冗長化したりスケールする必要はありません。

下の図では、上部の ELB は、最もシンプルな EC2 インスタンスの一つ Web サーバー(リバースプロキシー) Nginx を負荷分散するためのもので Classic Load Balancer にあたります。この ELB はインターネットに公開されます。中間部分の ELB は、アプリケーション依存であり、異なる特徴の EC2 インスタンスに応じて負荷分散するためのもので Application Load Blancer です。この ELB はクラウド内部に閉じた環境でしか見えないようになっています。