メインコンテンツまでスキップ

Amazon EC2

Overview

Amazon EC2は、AWS上で仮想マシンを提供するサービス。
正式名称はElastic Compute Cloudで、頭文字を取ってEC2と呼ばれている。 Elasticは英語で”弾力のある、伸縮自在の”という意味を持つ言葉で、仮想マシンの性能や台数などをそのときどきの要求に応じて迅速かつ柔軟に拡張または縮小できるクラウドコンピューティングの特徴を表現している。
なお、仮想マシンの性能や台数を増減することをスケーリングと呼び、スケーリング方法に応じてそれぞれ以下のように表現します。

  1. 性能を高くするスケールアップ
  2. 性能を低くするスケールダウン
  3. 台数を増やすスケールアウト
  4. 台数を減らすスケールイン

Image from Gyazo

さらに、EC2はLinux、Windows、Macなど主要なOSを幅広くサポートしており、要件に応じて必要なOSがインストールされたインスタンスを利用できる。
※別途ライセンスを購入する必要も、OSのインストール作業を行う必要もない また、利用料金はOSのライセンス利用料金を含め、稼働時間単位で発生する従量課金制を採用しているため、初期費用は発生しない。

連携が容易

Image from Gyazo

Image from Gyazo

EC2のインスタンスタイプ

EC2インスタンスの購入オプション

EC2インスタンスには、利用目的に基づいてコストを最適化するために複数の購入オプションがある。
インスタンスが稼働するハードウェアを他AWSアカウントと共用するか否かで以下に区分される

  • 共用ハードウェアを使用するインスタンス
  • ハードウェアを専有するインスタンス

共有ハードウェアを使用するインスタンスの購入オプション

以下の購入オプションは他のAWSアカウントとハードウェアを共有して利用する。

  • オンデマンドインスタンス
    • インスタンスの起動時間に基づいた料金体系で、EC2インスタンスのデフォルトの購入オプション。開発環境など、利用が短期間のシステムに適している。
  • リザーブドインスタンス
    • 1年もしくは3年の長期契約を結ぶことによって、オンデマンドインスタンスよりも低価格で利用できる購入オプション。
    • 1年以上にわたり継続して稼働するシステムに適しています
    • 。リザーブドインスタンスは、1年契約より3年契約、前払い無しより前払い有りの方が割引率が高いです。
    • リザーブドインスタンスには2つの種類があります。
      • スタンダードリザーブドインスタンス(標準RI)
        • 契約の途中でOSやインスタンスタイプを変更できない代わりに、コンバーティブルリザーブドインスタンスと比較して割引率がより高くなっています。
      • コンバーティブルリザーブドインスタンス(コンバーティブルRI)
        • スタンダードリザーブドインスタンスと比べて割引率が低い代わりに、条件が合えば契約の途中でOSやインスタンスタイプを変更できます。

Savings Plans

1年もしくは3年の期間、一定のサービス使用量(1時間あたりの利用料金)を決めて契約することで、オンデマンドインスタンスよりも低価格になる購入オプションです。リザーブドインスタンスは購入時にOSやインスタンスタイプを指定する必要がありますがSavings Plansはそのような指定が不要で、契約途中に変更も可能。
また、Savings PlansはEC2に加えてLambda、Fargateにも割引を適用させるプランもあり、柔軟性の高いオプション。

スポットインスタンス

スポットインスタンスは、AWS内で使用されていないEC2インスタンスを低価格で利用できる購入オプション。
EC2インスタンスの購入オプションの中で、もっとも割引率が高い。 スポットインスタンスの価格は、AZ内の各インスタンスタイプの需要と供給バランスに基づいて決定される。
インスタンスの需要が急増するか供給が不足する場合、インスタンスが中断されるリスクがある。
このため、インスタンスの中断が許容されるシステム(例:並列バッチ処理の一部のインスタンスなど)に向いています。

スポットインスタンスには複数のオプションがある。
その中の「スポットフリート」は必要なインスタンス数を指定することで、指定した数のスポットインスタンスが起動する。
スポットインスタンスが中断されて必要なインスタンス数を下回った場合、自動的にインスタンスを補充してインスタンス数を維持します。補充されるインスタンスにはオンデマンドインスタンスも含まれます。

スポットフリート

スポットフリートはスポットインスタンスのオプションのひとつ。
必要なインスタンス数を指定することで、指定した数のスポットインスタンスが起動する。
スポットインスタンスが中断されて必要なインスタンス数を下回った場合、自動的にインスタンスを補充してインスタンス数を維持する。
補充されるインスタンスにはオンデマンドインスタンスも含まれる。

ハードウェアを専有するインスタンスの購入オプション

以下の購入オプションは、AWSアカウント内でハードウェアを専有して利用します。

ハードウェア専有インスタンス

ハードウェア専有インスタンスは、他のAWSアカウントとは分離された専用ハードウェアでEC2インスタンスを利用できる購入オプションです。物理的なCPUソケット、コア数、ホストIDは確認できません。ハードウェア専有インスタンスは、同AWSアカウントのハードウェア専有インスタンスではないインスタンスと、ハードウェアを共有する可能性があります。

専有ホスト(Dedicated Hosts)

Dedicated Hosts(専有ホスト)は、他のEC2インスタンスとは分離された専用ハードウェアで利用できる購入オプションです。物理的なCPUソケット、コア数、ホストIDを確認できます。Dedicated Hostsのハードウェアには、ユーザーが指定したインスタンスのみ配置されます。
たとえば、CPUソケットや物理コア、仮想マシンごとに割り当てられたソフトウェアライセンスを保有している場合に、Dedicated Hosts契約のインスタンスを利用します。 Dedicated HostsはEC2インスタンスを利用する上で、もっとも購入価格が高いオプションです。

EC2のインスタンスを停止しても勝手に新しくインスタンスが起動すること

EC2のインスタンスを停止しても勝手に新しくインスタンスが作られて起動してしまうようになった。 調べていくとよくわからず設定していたAuto Scalingが原因
参考URL

EC2のデフォルトユーザについて

元々のec2-userは使うべきではない(アプリケーション用の新しいuserを作成する)
だが、以下の場合だとそのままでもいいかもしれない

そのままでもいいかもパターン

  • sshで接続されるのが自分のみ

グループで使うパターン

  • ユーザごとに分けるべき

EC2に別のパッケージマネージャーを入れる

AWSリファレンス(homebrew)

ソフトウェアのコンパイルはすべての Amazon EC2 インスタンスで必要なタスクではないため、そのようなツールはデフォルトでインストールされていません。 ただし、「Development Tools」という名前のパッケージグループで利用でき、$ yum groupinstall コマンドでインスタンスに簡単に追加されます。

EC2のソフトウェア コンパイル事情

AWS参考URL

EC2ではソフトウェアのコンパイルまでの責務は持っていない。
そのためmake gcc autoconfなどのビルドツールをインストールしないといけない。
しかし、AWSではデフォルトで必要な開発ツール(make gcc autoconf)をインストールできる準備はされており、コマンド一発でインストールできる

% sudo yum groupinstall "Development Tools"

Amazon Linux 2 OSとは

参考URL

Amazon EC2上のOS人気は以下

  1. Amazon Linux
  2. Ubuntu
  3. Debian

Amazon Linux 2 とくに AWSの多くのサービスを容易に統合できる点が最大の特徴

  • AWSのサービスを運用するために必要なパッケージや設定が事前に入っており、多くのAWSサービスと容易に統合できる。
  • AWSサポートに加入することで、AWSだけでなく、Amazon Linuxのインストールや使用についてもサポートを受けることができる。
  • Amazon EC2でのパフォーマンスが向上するように最適化されたカーネルと新しいバージョンのツールチェーンが付属されている
  • デフォルトでSSHキーペアの使用およびリモートルートログインの無効化によるリモートアクセス制限の設定がされています。

Extrasとは

Extrasは最新のアプリケーションソフトウェア更新をインストールできるようにする Amazon Linux 2のメカニズム

# 使用可能なトピックのリストを表示する
$ amazon-linux-extras list

# トピックを有効にし、パッケージの特定のバージョンをインストールする
$ sudo amazon-linux-extras install topic=version topic=version

注意 amazon Extrasに入っていないパッケージに関してはyumからinstallする

ポート開放

EC2のポートを開放するには

AWSには標準で「セキュリティグループ」という機能がありますので特別な理由がない限りはこちらを使用してください。

後者はファイヤウォールの設定方法を覚える必要があります。またどちらの場合も、設定変更時に機器の再起動が必要になるケースもあるため必ずしも手軽とはいえません。

インスタンスの料金について

リージョンによってEC2の料金が変わる

Swap

EC2ではボリュームをSwapするなという概念がある。
だが実際には作ればいい話。 volumeをマウントすれば問題はない。

EC2のオートスケーリングについて

はい、EC2とLambdaはスケーリングの方法や考慮点が大きく異なります。以下にそれぞれの特徴や違いを挙げてみます。

EC2(Elastic Compute Cloud)

  1. 手動スケーリング: 事前にインスタンスのタイプや数を選択する必要があります。トラフィックの増加を予想して、前もってインスタンスを追加する必要がある場合があります。

  2. Auto Scaling: EC2ではAuto Scaling Groups (ASG)を使用して、トラフィックの増減に応じて自動的にインスタンスの数を増減させることができます。しかし、設定や監視が必要。

  3. 継続的なコスト: EC2インスタンスは実行中であればコストがかかります。停止していない限り、インスタンスは課金されます。

インスタンスメタデータを取得する

インスタンスメタデータを取得する唯一の方法は、リンクローカルアドレス169.254.169.254を使用する。

curl http://169.254.269.254/latest/meta-data/

この章での単語説明

スロットリング

「スロットリング」とは、AWS Lambdaのリソースや制限に達したときに新しいリクエストや関数の実行を一時的に制限または拒否することを指す。
具体的には、同時実行数の上限に達した場合、Lambdaは新しい関数の実行リクエストをスロットルします。

以下はスロットリングに関連する主な点です

同時実行数の上限: AWS Lambdaにはデフォルトでの同時実行数の上限が設定されており、これはリージョンによっても変動します。この制限に達した場合、新しいLambda関数の実行はスロットルされます。

再試行: イベントソースがAWSサービスの場合(例: Amazon S3, Amazon DynamoDB Streamsなど)、スロットルされたイベントはLambdaサービスによって自動的に再試行されます。

拡張可能な制限: AWS Lambdaの同時実行数の上限は、AWSサポートに連絡して増やすことができます。ただし、無制限に増やすことはできないため、要件に応じて適切に調整する必要があります。

エラーメッセージ: Lambda関数がスロットルされると、ThrottledReasonという名前のエラーメッセージがCloudWatch Logsに記録されます。

スロットリングは、システムが過負荷になるのを防ぐための重要なメカニズムです。Lambda関数が頻繁にスロットルされる場合、アーキテクチャの調整やリミットの増加リクエストを検討することが必要です。

踏み台サーバー: (Bastion)サーバー

踏み台サーバーを利用することでセキュアに運用を行うことができる。

  • 踏み台サーバーを経由することで、誰がいつ、どのリソースにアクセスしているか管理できるようになる。
  • 踏み台サーバーを経由していないアクセスに関しては不正なアクセスとすることもできる