前提
EC2について学んだことを書いていきます。
本題
キーペアとは
EC2インスタンスへログインするために使用する秘密鍵、公開鍵のペアのこと。
作成したEC2インスタンスに誰でもログインできたら困るため、キーペアというのを作成し、ログインの管理をする。
公開鍵で暗号化したデータは秘密鍵でしか開けることができない。
秘密鍵は拡張子が.pem形式のファイルとなっている。
ダウンロードして厳重に管理し、外部からアクセスできない場所に保管する。
インスタンスメタデータ/ユーザーデータとは
インスタンスメタデータ
例えば、
ruby/python/bashなどのプログラムの作成時に、EC2インスタンス自身のIPアドレスや所属しているサブネットなどの情報を直接書いてはいませんか?
これではプログラムを使い回せないので、効率的な方法をとりたい。
EC2インスタンスに埋め込まれている自分の情報
EC2インスタンスには自身の情報が埋め込まれており、EC2が起動中の場合、このようなcurlコマンドで自身の情報を取得できる。
curl http://169.254.169.254/latest/meta-data/
例えば、使用しているAIMのIDやローカルのIPアドレス、所属しているサブネットIDなどが取得できる。
このシェルをコピーして、chmodで実行件を与えて実行するとインスタンスメタデータの一覧が出てくる。
ユーザーデータ
インスタンス起動時に一回だけ実行するスクリプト
インスタンス起動時にソフトウェアを最新化するなど、スタートアッププログラムのようなものがあれば便利。
インスタンス起動時に一回だけ実行するスクリプトがユーザーデータ。
基本的に再起動ではないことに注意が必要。
rootユーザーで実行される。
インタラクティブではない。
Cloud-init
クラウド系インスタンスの初期構築を手助けするオープンソースのアプリケーション
AmazonLinuxにはデフォルトで/etc/cloud/配下に設定ファイルが存在し、インスタンス作成時にどういった動きをするか指定できる。
プレイスメントグループとは
複数のEC2を論理的にグルーピングすること。
例えば、高度な演算処理を実現するために、複数のコンピューターを統合して処理する方法がある。
こういったものを実現するためにはコンピューター同士の通信に遅れがあることは致命的。
AWSの場合、物理ホスト上でEC2が起動され、他のアカウントと共有になるため、クラスター処理に向いていない。
こういった場合にプレイスメントグループ機能が役立つ。
AZやリージョンを跨ぐことはできない。
あくまでも同じAZ内で有効。
クラスター
HPC(ハイパフォーマンスコンピューティング)などの複数のコンピューターを統合して高度な演算処理に向いている。
この塊をクラスターといい、これに所属しているコンピューター1つ1つをノードと呼ぶ。
AWSでは拡張ネットワークサービスの使用を推奨している。
例えば、ENA(Elastic Network Interface)。
EC2のネットワーク速度をあげることができる。
AmazonLinuxではデフォルトでENAモジュールが入っており、AWS CLIコマンドで有効かされているか確認できる。
これによりさらにノード同士のネットワーク遅延を低く抑えることができる。
基本的には同じAMIで使用すること。
パーティション
グルーピングを個別のラックでグループ化するといったもので、このようなハード障害を防止することができる。
スプレット
個々のEC2を独立したラックに配置する。これがスプレット。
1つのAZにつきEC2を7つまで。
1つのリージョンにつきAZを3つまで。
合計21個のEC2を配置できる。
Dedicatedホスト/インスタンスとは
AWSの物理サーバーのリソースを占有できること。
通常AWSの物理サーバーは他のアカウントと共有している。
これはコンプライアンス違反になる可能性がある。
例えば、HTPAA(医療データを電子化する際のルール)
大きくいうと2つ。
Dedicatedホスト、またはDedicatedインスタンス
両方、専用のAWSホストサーバーを確保できるという点
他のアカウントとの共有はないということは一緒。
DedicatedホストとDedicatedインスタンスの違い
ライセンスの持ち込みにある。
Dedicated hostはクラウドが盛り上がり始めた頃の課題で、オンプレからクラウドに移行するのにハードルだったライセンス移行の問題をクリアする目的があったためと思われる。
※1つのリージョンでタイプを問わずDedicatedインスタンスが1つでも稼働している場合、1時間あたりの追加料金おおよそ1時間につき2ドルのコストが余計にかかる。