Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

初心者向けAWS解説シリーズ~EC2とは何かその1~

本稿は、初心者向けAWS解説シリーズ~AWSとは何か編~の続きになります。
前回の投稿ではAWSの概要を説明し、今回は Amazon Elastic Compute Cloud (Amazon EC2) について掘り下げた内容の第1回目になります。

・目次

EC2とは:
EC2に必要な要素:VPC
EC2構成要素:EC2インスタンス
EC2構成要素:ネットワーク
EC2構成要素:セキュリティグループ

EC2とは

Amazon Elastic Compute Cloud (以下EC2) とは、Amazonが提供している仮想サーバサービスです。EC2を利用することで、OSを乗せた仮想サーバ環境をクラウド上に
すばやく作ることができます。EC2を利用するにあたってまずは、抑えておきたいことを以下の項目で説明します。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/concepts.html
公式ドキュメント:Amazon EC2とは

EC2に必要な要素:VPC

EC2を起動するためには、ネットワークが必要になります。AWSでは、Amazon Virtual Private Cloud (以下、VPC)という仮想ネットワークを構築することができるサービスを提供しています。
VPCは、AWSアカウント内に専用のネットワークを作成できるプライベート仮想ネットワーク空間です。AWSアカウント内に専用のネットワークを作成でき、このネットワーク内にEC2を配置できます。EC2をVPCへ配置することによって、EC2へのアクセス経路や、他サーバとの連携をするための仮想ネットワーク空間が整えられるため、EC2に必要な要素としてVPCをあげました。
また、VPCの特徴として、1つのVPCを論理的なまとまりとして分離でき、複数のVPC間の接続も可能です。インターネットに公開するパブリックなVPCや、VPNなどを使用して接続するプライベートなVPCの構築ができます。
前回の クラウドコンピューティングサービスとオンプレミスにて説明しましたが、オンプレミス環境ではネットワーク環境を構築、データセンター、ハードウェア、回線などが必要になり、準備期間と初期コストが高くなりがちになります。
しかし、AWSでVPCをネットワーク環境として準備すると、数分でネットワークを構築できて初期コストも抑えることができます。

EC2構成要素:EC2インスタンス

EC2インスタンス とはOSを載せた仮想サーバーのことを指します。EC2インスタンスは利用目的別にAWSが準備しているタイプを選択することが可能です。 これを EC2のインスタンスタイプ といいます。用意されているEC2のインスタンスタイプのおおまかな区分けは後述します。

EC2インスタンスの強みとして、仮想サーバの利用目的変更や利用状況に合わせて柔軟にスペックの変更をしやすいことがあります。
たとえば顧客の流量が増えることで、ハードディスクやメモリ不足の対応が必要になった場合、物品の調達→物品の組み込み(ハードディスクがHA構成だった場合はそれに対応した処理等)などの専門的な知識を要する場面がついてまわりますが、EC2インスタンスは画面上で設定するだけでハードディスクやメモリの増設が簡単に行えます。

またEC2インスタンスの強みとして、簡単な画面操作の実施のみで、サーバーの冗長化を実現することが可能です。
その点、オンプレミスでサーバーを冗長化する場合、サーバーの設定だけではなくネットワーク設計も必要になるため、複雑になりがちな設計と多くの時間を必要とする場合が多いです。

EC2インスタンスではOSは何が使えるのか
Linux、Windows Serverなどに対応しています。対応しているOSの種類やバージョンは時期によって異なりますので、公式ドキュメント(2022年12月時点)を参照しましょう。

EC2のインスタンスタイプのおおまかな区分け

https://aws.amazon.com/jp/ec2/instance-types/
公式:Amazon EC2 インスタンスタイプ

公式ドキュメントでは様々なインスタンスタイプの存在が分かります。 ここでは簡単に見方と特徴を記載します。

たとえば、
t3a.microと表記されているインスタンスタイプは、頭から分解して意味を補足すると、
t:低コストでバースト可能な汎用インスタンスタイプです。
3:第3世代です。
a:AMDのCPUを搭載しています。
.micro:サイズはtの仲間達のなかでは小さめです。
となります。少しテクニカルよりの内容になりますので、それぞれのインスタンスタイプのおおまかな特徴別一覧を以下に記載します。

インスタンス名 特徴
macX. iPhone、iPad、Mac、Apple Watch、Apple TV、Safari 向けのアプリケーション開発に強い
mX. バックエンド処理やキャッシングフリートアプリケーションなどのネットワーク集約型ワークロードに強い
cX. CPUを多く使う計算処理の多いアプリケーション開発に強い
rX. メモリ内の大きいデータセット処理に強い(早く処理できる)
pX. 大規模な開発や、他のインスタンスでは処理しきれない複雑な処理に対して強い
ImX. 大きなデータが存在しているディスクの読み書きが頻繁におきる処理に対して強い
tX. 通常はミニマムな機能のみの提供だが、追加料金によって機能をバーストできる

EC2インスタンスのコスト

ここまでは主に機能重視で説明しましたが、本項目ではコストについて触れていきたいと思います。
EC2インスタンスの料金プランは、大きく分けて3つあります。
それぞれの特徴を記載します。

  • オンデマンドインスタンス:
    サーバーを立ち上げている時間によって料金が発生するプランです。利用期間が明確に決まっていない場合や、短時間のみ利用したい、週末や月に1回だけ使いたい場合に選ぶプランです。

  • リザーブドインスタンス:
    あらかじめ稼働期間を決めておき、先支払いする方式です。常時インスタンスを立ち上げていたい、利用期間が決まっていて、長期間稼働させ続ける必要がある場合に使いやすいプランです。

  • スポットインスタンス:
    スポットインスタンスはかなり特殊で、AWS上にすでに存在し、放置されているインスタンスを格安利用料で使う方式です。通常はインスタンスを利用する場合、自分で設定したインスタンスを稼働させるのですが、スポットインスタンスの場合はAWS側が用意してある中から、まだ誰にも使われておらず、待機しているEC2を利用できるサービスになります。
    しかし、待機していたEC2を別の誰かが使い始めた場合、スポットインスタンスは別の待機しているEC2へ移動します。移動している間はサービス利用が出来ない状態になるため、注意が必要です。
    https://aws.amazon.com/jp/ec2/spot/
    公式:Amazon EC2 スポットインスタンス

EC2構成要素:ネットワーク

EC2のネットワーク構成は、 VPCのネットワークが土台としてあり、そのVPCのネットワーク範囲の中にEC2用のネットワークが作成されます。
EC2が2台以上ある場合や他のAWSサービスと負荷分散をしたい場合に利用するサービスもAWSにはありますので、そちらは、後述のElastic Load Balancerに記載します。
まずはVPCの中にEC2を作成することを具体的な例を踏まえて説明を記載します。
その説明に当たって以下の用語を抑えた上で進みたいと思います。

  • Classless Inter-Domain Routing(以下CIDR):クラスを使わないIPアドレスの割り当てと経路情報の集成を行う技術。
  • サブネットマスク(以下サブネット):IPアドレスのどこからどこまでが、どのネットワークの範囲になるかを表す情報。x.x.x.x/〇〇の〇〇の様に表現される。
  • Elastic Network Interface(以下ENI):仮想ネットワークカードを表すVPC 内の論理ネットワーキングコンポーネント。オンプレミス環境におけるNIC(Network Interface Card)の役割をもつ仮想デバイス。

「10.0.0.0/16」というCIDRを指定したVPCを作成し、VPC内に「10.0.0.0/24」と「10.0.1.0/24」というCIDRを指定したサブネットをそれぞれ作成します。
サブネットのCIDRはVPCのCIDRの範囲内である必要があります。EC2インスタンスを作成する際、配置するサブネットを指定する必要があるため、「10.0.0.0/24」を指定します。すると、インスタンスはサブネット内から払いだされたIPアドレスを持った状態で起動してきます。
仮にIPアドレス「10.0.0.110」で起動してきたとします。このIPアドレスはAWSから自動付与することも、利用者が指定することも可能です。
ここで気をつけたいポイントとして利用者が指定してIPアドレスを固定で割り当てた場合、CIDRの範囲で自動割り当てした時と違い、なんらかの理由でそのIPアドレスが利用出来なくなるとEC2インスタンスが起動出来なくなってしまうことがあります。(この部分についてもENIの冗長化やメイン・サブENIの作成等にて回避方法はありますが、テクニカル過ぎるので今回は割愛します)
そのため、IPアドレスを固定で割り当てなくてはいけない要件がない限り、CIDR指定にすることを個人的にオススメします。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-instance-addressing.html
公式:Amazon EC2 インスタンスの IP アドレス指定

Elastic Load Balancer(以下ELB)

ロードバランサーとは、サーバーへのアクセスを安定させるための装置・仕組みのことです。AWSでは、ELBという名称でロードバランサーサービスを提供しています。EC2で利用可能なELBは用途に応じて種類分けがされているので、それぞれ簡単にご紹介します。

  • Application Load Balancer
    ELBのうち、最新で最も高機能なロードバランサーです。基本的には、Application Load Balancerを使用することが推奨されています。HTTPトラフィックおよびHTTPSトラフィックの負荷分散、柔軟なアプリケーション管理が必要な場合に向いている
    ロードバランサーです。リクエストレベル(レイヤー7)で動作しており、マイクロサービスやコンテナなど、最新のアプリケーションアーキテクチャにも対応しています。

  • Network Load Balancer
    毎秒数百万のリクエスト処理が可能で、高度なパフォーマンスが必要な場合に使用します。突発的なトラフィックや急激に変化するトラフィックにも対応可能です。静的IPアドレスがアプリケーションで必要な場合にも、Network Load Balancerを使用しましょう。接続レベル(レイヤー4)で動作しており、TCP/UDP/TLSのトラフィックの負荷分散にも向いています。

  • Classic Load Balancer
    複数のAmazon EC2インスタンスにおける基本的な負荷分散を行う、基本的なロードバランサーです。EC2 Classicネットワーク内で構築された既存のアプリケーションがある場合は、Classic Load Balancerを使用しなくてはなりません。リクエストレベル(レイヤー7)と接続レベル(レイヤー4)の両方で動作しています。VPCを使用する場合は、Application Load BalancerもしくはNetwork Load Balancer を使用しましょう。

ELBの共通機能
ELBには、どの種類にも次のような機能があります。

  • 複数のサーバーへのトラフィックを分散する
    ELBで複数のサーバーにアクセストラフィックを分散させることで、アクセス集中によるサーバーダウンを防ぎます。それによって、処理速度の向上や、高い可用性の維持が期待できます。

  • メンテナンスや障害対応をしやすくする
    メンテナンスや障害発生時の前に、ELBの設定を行うことにより、メンテナンス対象や障害が発生しているサーバーへのリクエストのみを停止することができ、サービスの全停止を回避することも可能です。(ただし、サーバー構成・サーバー上の適切なアプリケーションの配置や実装が前提です。)これにより対象サーバーはリクエストが無い状態ですので、メンテナンスや障害対応に集中した作業ができます。

  • サーバーのヘルスチェック
    ELBは、常にリクエストをトレースし、接続しているサーバーをモニタリングしています。それによって、リアルタイムにアプリケーションのヘルスチェックが可能です。異常な動作を検知した場合は、そのサーバーを切り離し、トラフィックをほかのサーバーに分散するので、アプリケーションの安定稼働が維持されます。

  • セキュリティ強化、SSLの設定を集中管理
    ELBでは、ロードバランサーと関連するセキュリティグループを作成して、セキュリティを強化できます。 これには、VPCが必要です。またSSLの証明書や設定も集中管理しています。 セキュリティグループについては、後述EC2構成要素:セキュリティグループにて説明します。

EC2構成要素:セキュリティグループ

EC2インスタンスに適用可能なAWS標準のファイアウォール機能であり、EC2インスタンスへのアクセスを許可したり、トラフィックを制御できます。

EC2インスタンス起動時にセキュリティグループを指定しなかった場合、インスタンスは自動的に以下のデフォルトのセキュリティグループで起動されます。

  • インバウンド:未設定の場合通信はすべて遮断し、許可した通信のみを通過させます。 *デフォルトですべて拒否
  • アウトバウンド:自動的にデフォルトのセキュリティグループが適用されます。 *デフォルトですべて許可

重複した制限は緩い方が優先される。許可されたインバウンドに対する応答(戻りのトラヒック)はアウトバウンドで制限があっても、通過されます。
たとえばですが、EC2インスタンスにWEBサーバの役割のみを持たせて(名前解決等は考慮しない)、HTTP通信のみ許可したセキュリティグループを作りたいとします。 そのインバウンドのルールに

  • すべての通信を許可する
  • HTTPの通信のみ許可する

と2つのルールを割り当てたとします。この場合 すべての通信を許可するルール が許可する範囲が広く緩いルールとなり優先されるため、HTTPの通信のみを許可したい場合は、許可する範囲が広く緩いルールである すべての通信を許可するルール を削除する必要があります。

  • すべての通信を許可する<削除>
  • HTTPの通信のみ許可する<そのまま残す>

これでHTTP通信のみを許可したセキュリティグループは完成です。

EC2インスタンスに持たせたい役割や機能の代表的な使い方に対してどういったセキュリティグループが必要になるかの例を公式ドキュメントにて案内されていますのでそちらもご参照下さい。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/security-group-rules-reference.html
公式:さまざまなユースケースのセキュリティグループのルール

EC2のセキュリティとしてセキュリティグループがある様に、「EC2に必要な要素:VPC」にもセキュリティがあります。それがネットワークアクセスコントロールリスト (以下NACL)です。
個人の所感になってしまいますが、ネットワークACLでもセキュリティグループでも実現できる要件の場合、ネットワークACLでは全トラフィックを許可して、セキュリティグループで細かい設定をすることが多いです。その理由をそれぞれの機能で比較して考えてみましょう。

セキュリティグループとNACLの比較

セキュリティグループの特徴

  • EC2インスタンス単位で設定する。最低1つ以上で複数のセキュリティグループを紐づけ可能。
  • EC2インスタンスごとにファイヤーウォールを設定する、ステートフル。
  • EC2インスタンスごとなので、紐づけたEC2インスタンスから影響範囲が見えやすい。
  • ステートフルなので、行きの通信と戻りの通信が発生するプロトコルでも、ワンセットのルール設定で考えることができる。
  • 同一サブネット内で完結する通信も通信制御ができる。
  • セキュリティグループIDを使って管理することが可能なことで、柔軟に設定できる。

NACLの特徴

  • AWSではサブネットは必ず1つのネットワークACLと紐付ける必要がある。
  • サブネットごとにファイヤーウォールを設定する、ステートレス。
  • サブネットごとなので、VPC配下のサービス全体の通信に影響する。
  • ステートレスなので、行きの通信と戻りの通信が発生するプロトコルの場合、行きと戻りそれぞれの通信を意識して設定する必要がある。
  • サブネット単位なので、同一サブネット内で完結する通信制御はできない。
  • CIDR単位でのトラフィック制御なので、管理する側に要求する技術レベルが高い。

特徴を比較してまとめると、

  • セキュリティグループはNACLより細かな設定が可能で、比較的NACLに比べて影響範囲の特定など見やすい部分がある。
  • NACLはセキュリティグループより大きな範囲で設定が可能で、広い範囲であったり厳密な通信制御を要求する場合に使える。

となります。EC2インスタンスに直接紐づくのはセキュリティグループですが、NACLもセグメント単位でEC2インスタンスを守る存在ですので、セキュリティそれぞれの違いをおさえておくと役にたつかもしれません。

終わりに

今回は、今回はAmazon Elastic Compute Cloud (Amazon EC2)について取り上げました。
次回も、引き続きAmazon Elastic Compute Cloud (Amazon EC2)について掘り下げて解説します。