CDP:クラウドコンポーネント
クラウドコンポーネントとは?
クラウドコンポーネントとはクラウドサービス構成する部品であり、必然的にAWSクラウドデザインパターンの構成要素ともなる。
各パターンは、当然AWSの各種サービス(コンポーネント)を部品として構成されているが、導入部分の下記の解説に関しては他クラウドにも当てはめられるよう、概念的な名称を用いている。
- 解決したい課題
- クラウドでの解決/パターンの説明
つまりクラウドコンポーネントには「抽象的に定義されたコンポーネント」と「実装されたサービス」の2段階が存在することになり、AWSは、その「実装されたサービス」の一つにすぎない。
クラウドコンポーネント一覧
AWSクラウドデザインパターンの各パターン内で使われる、基本的かつ重要なクラウドコンポーネントについて説明しておく。 また、クラウドコンポーネントと、それを実装しているAWSサービスとのマッピングも以下の表にまとめておく。 AWSクラウドデザインパターンを読む前に、この表を確認することでAWSのサービスだけでなく、その上位のクラウドの概念から各パターン理解することができるだろう。
AWSには典型的なクラウドコンポーネントである「仮想サーバ」以外にも、さまざまなコンポーネントが提供されている。 各パターンを理解する前に、まずは個々のクラウドコンポーネントと、それに対応するAWSサービスについて、その特性や機能について理解しておく必要がある。
各コンポーネントの説明
各コンポーネントについて、その概要と機能、特徴を説明する。
なお、以下のコンポーネントはすべてプログラムから操作できるAPIが提供されており、JavaやC#、PHPなどのプログラミング言語を使用して操作することができる。クラウドの利点を生かしたアーキテクチャを具現化する際に、プログラムを使用した運用の自動化や構築手順の再利用は、必要不可欠な要素である。
またこれらのクラウドのコンポーネントはサービスとして提供されており、その費用についても、初期費用がなく、データ量や利用時間など、利用量に応じた従量課金となっている。これもクラウドの利点を生かしたアーキテクチャを実現するための重要な要素となっている。
仮想サーバ - EC2 (Amazon Elastic Compute Cloud)
最も基本的なクラウドコンポーネント。必要なときにすぐに調達でき、従量課金でサーバが利用できる。サーバのスペックは選択する事が可能で、利用用途に応じて、CPUの処理能力やメモリ量を選ぶ事ができる。 OSやミドルウェア、アプリケーションは利用者が自由に選ぶ事ができる。管理者権限もあり、WindowsやLinuxで利用していたソフトウェアや技術をそのままクラウドに持ち込み利用できる。 なお、起動した個々のサーバは、「EC2インスタンス」と呼ばれる。
マシンイメージ - AMI (Amazon Machine Image)
EC2インスタンスを起動する際、その起動時のイメージとなるデータセットの事。AMIにはOSやミドルウェア、アプリケーションのデータが入っており、選択したAMIのデータをもとに、EC2インスタンスが起動する。 Amazonが提供している基本的なAMIを利用することも、自分でAMIを作る事も可能。作成したAMIをもとに、別のEC2インスタンスを起動する事ができる。
仮想ディスク - EBS (Elastic Block Store)
EC2インスタンスにマウント可能なデータ領域を提供するクラウドコンポーネント。EC2インスタンスとは異なる領域に格納されており、EC2インスタンスの障害の影響を受けない。任意のサイズをアロケートすることができ、任意のEC2インスタンスにブロックデバイスとしてマウントできる。このため、OSからはSATAやSCSIのディスクのように取り扱うことができ、任意のファイルシステムでフォーマットする事ができる。
仮想ディスクスナップショット - EBSスナップショット
ある時点のEBSのデータを、まるごとスナップショットとして保存したもの。 作成したEBSスナップショットからは、そのデータをもとに新しいEBSを作成する事ができる。スナップショットは必要なだけ複数取得でき、履歴を持つことが可能。スナップショットは耐久性の高いインターネットストレージであるS3(後述)に保存される。また、差分保存されるため、連続的に取得してもそのサイズ量は差分のみとなる。
固定グローバルIPアドレス - EIP (Elastic IP)
固定のグローバルIPを取得できるサービス。取得したEIPはEC2インスタンスではなく、AWSアカウントにひもづくため、EC2インスタンスのライフサイクルとは関係なく保持する事ができる。従って、あるEC2インスタンスに割り当てたEIPを、別のEC2インスタンスにに割り当てる事ができる。
仮想ネットワークインターフェース - ENI (Elastic Network Interface)
EC2インスタンスに付与できる、仮想のネットワークカード。複数のネットワークカードをEC2インスタンスに付与する事で、例えばWebからのトラフィックを受けるインターフェースと、メンテナンス用に内部から接続するインターフェースを分けるような事ができる。またEIPと同様、あるEC2インスタンスに割り当てたENIを、別のEC2インスタンスへ割り当てる事ができる。
仮想ファイアウォール - Security Group
EC2インスタンスに付与される、ファイアウォール。EC2インスタンスへの通信を制御する事ができ、例えば特定のポートしか通さない設定や、特定の接続元からの通信しか通さないような設定を行える。 Security Groupを使用する事で、AWSクラウド上で典型的な3階層(Web層、AP層、DB層)の構成なども容易に構築できる。
仮想ネットワーク - VPC (Amazon Virtual Private Cloud)
ネットワークのIPアドレス体系を決め、サブネットやルーティング、ネットワークACLといった、オンプレミスで行っていたネットワーキングをそのままAWSクラウド上で行える。作成したVPC上には、EC2インスタンスやELBを配置する事ができる。 インターネットに出るゲートウェイに加えて、VPN接続が可能なゲートウェイを定義できる。BGPで経路交換を行うため、オンプレミスからVPN接続を行うと、AWSクラウドをイントラネットの一部のように利用する事が可能。
オートスケール - Auto Scaling
CPU利用率や通信量、特定の時刻など、あらかじめ条件を設定しておく事で、その条件に合致した際に自動的にEC2インスタンスを起動/停止させる機能。 負荷が高い時だけEC2インスタンスを起動し、負荷が低減したときに停止する事で、EC2インスタンスを効率よく利用できる。
インターネットストレージ - S3 (Amazon Simple Storage Service)
インターネットに接続された、ネットワークネイティブのストレージコンポーネント。PUTやGETといった簡単な操作で、データを出し入れできる。無制限の容量があり、高い可用性、耐久性がある(設計上のデータアベイラビリティは99.999999999%) インターネットからのアクセスはパーミッションで制御することができ、またS3をそのままWebサーバとして公開することも可能。
DNSサーバ - Route53 (Amazon Route53)
DNSサーバのコンポーネント。世界的に分散配置されており、100%稼働のSLAを持つ。 Route53はネットワーク経由で設定変更が可能であり、このコンポーネントを使用してドメインを管理しておくことで、障害発生時や災害時に、バックアップのシステムへ迅速に切り替える事が可能になる。
コンテンツ配信 - CloudFront (Amazon CloudFront)
静的なHTMLや画像、動画をキャッシュし、ユーザーに高速に配信を行うクラウドコンポーネント。 EC2インスタンスやS3にオリジナルコンテンツを配置し、そのフロントエンドとしてCloudFrontを配置する。 エッジサーバと呼ばれるCloudFrontのサーバ群が世界中に配置されており、ユーザーのアクセス元により近いエッジサーバ(キャッシュサーバ)がコンテンツの配信を行う。
分散ロードバランサ - ELB (Elastic Load Balancing)
ネットワーク経由のトラフィックを負荷分散し、複数のEC2インスタンスにトラフィクを振り分けるためのロードバランシングコンポーネント。AWSでは複数データセンターにまたがってEC2インスタンスを配置する事ができるため、ELBも複数データセンターにまたがって負荷分散を行うことができる。またロードバランサ自体も負荷分散するよう設計されており、トラフィックに応じて柔軟に処理能力を向上させる。
キューイング - SQS (Amazon Simple Queue Service)
高い信頼性を持つ、メッセージキューイング機能を持ったコンポーネント。キューに入ったメッセージは複数のストレージに安全に格納される。SQSはアクセスのためのインターフェースが公開されており、ネットワーク経由で利用する事が可能。
ノーティフィケーション - SNS (Amazon Simple Notification Service)
あるイベント発生を起点に、登録してある宛先に対して一斉に通知を送信するコンポーネント。単体のコンポーネントとしてではなく、通常は他のコンポーネントと連携して動作する。例えば管理者のメールアドレスを登録しておき、エラーが発生した時に管理者に一斉に通知する、というように利用できる。 またSNSがイベントを受け取り、通知を送った後にその通知を受けた他のコンポーネントを動作させる、というような連携も可能なため、クラウド上で粗結合のアーキクチャを構築する際に重要となるコンポーネントである。
システム監視 - CloudWatch (Amazon CloudWatch)
CloudWatchは、クラウドコンポーネントの稼働状況やエラー情報を可視化し、統計データを保持するコンポーネントである。例えばEC2インスタンスのCPU利用率やネットワーク負荷、ディスク利用率等、ELBの通信エラー数などを集約する。 従来の監視システムは、システムが異常をきたした時に管理者に通知するのが主な役割であったが、クラウドではシステム監視と連動してサーバを起動・停止したり、ディスクを動的に増やしたりと、よりアクティブなシステム構築をする目的で利用することができるため、CloudWatch自体も、1つのクラウドコンポーネントとして定義する。任意のデータを保持させることもでき、カスタムメトリクスと呼ばれる。
RDBMS - RDS (Amazon Relational Database Service)
サービスとして提供されるRDBMSコンポーネント。EC2インスタンスにRDBをインストールした場合は、DBのインストールやバックアップ作業は今まで通り自前で行う必要があるが、RDSを使用すると、構築済みのRDBをすぐに利用する事ができ、またパッチ当てやバックアップ、リカバリもAWSが行うため、利用者はRDBをサービスとして利用する事ができる。
KVS - SimpleDB (Amazon SimpleDB)
キー項目と値で構成される、スキーマレスのデータストアコンポーネント。リレーショナルデータベースとは異なり、基本的にキー項目と、それに付随する値で構成される。RDBのようにテーブルを構築したり、テーブル間のリレーションを持たせる事はできないが、その代わりにスキーマ定義が不要で、高いスケーラビリティとスループットを誇る。またデータは分散ストレージに格納され、高い信頼性を持つ。
KVS - DynamoDB (Amazon DynamoDB)
DynamoDBは、2012年初頭に発表されたインターネット時代のアプリケーションのために設計された高速でスケーラブルなNoSQLデータストレージのサービスである。Amazon DynamoDBは信頼性、データ耐久性が高いデータベースサービスであり、そのデータ容量は実質上無制限であり、アクセス性能(読込性能、書込性能)を自在にコントロールできるという特徴を持っている。データは、SSD(Solid State Drive)に保存され、どのような規模であっても高速なパフォーマンスを提供できる。またデータは分散ストレージに格納され、高い信頼性を持つ。
インメモリキャッシュ - ElastiCach (Amazon ElastiCache)
インメモリでキャッシュ情報を保持するコンポーネント。データはすべてメモリ上に置かれるため、信頼性は高くないが、高速なデータの格納と取得ができる。 RDBの検索結果や、頻繁にアクセスされる情報を格納することが多い。
メール送信 - SES (Amazon Simple Email Service)
メールの送信処理を提供するコンポーネント。送信システムが冗長化されており、高い信頼性を誇る。自前でメール送信サーバを構築する場合と比べて、すでに信頼のあるメール送信システムを利用できるため、メールの到達率(Derivability)が高い。またISPや各スパムリストと連携して、メールのリジェクト数やバウンス数を取得できるため、特に大量のメールを送信する際に、より品質の高いメールを送る際の参考情報とすることができる。
分散処理クラスタ - EMR (Amazon Elastic Map Reduce)
ログ解析や画像処理など、大量のデータに対して、並列で処理を行うためのクラスタコンポーネント。構築済みのApache Hadoopを利用することができる。
スタックデプロイメント - CloudFormation
テンプレートに従って、複数のクラウドコンポーネントを一度に構築・破棄するためのコンポーネント。JSON形式のCloudFormationのテンプレートファイルに、構築したいクラウドコンポーネントの情報を記述しておくことで、同一の構成を持ったシステムを容易に構築することができる。