注目の記事

Amazon EC2再入門 2015年1月版

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。 半年前に「Amazon EC2再入門 2014年7月版」と銘打ってEC2の記事を書きましたが、AWSらしい頻繁なアップデートによって古くなっている部分もあるので、記事もアップデートしようと思います。 最近EC2関連の重要アップデートが出てきました。嬉しい機能が増えているのですが、昔の知識では使いこなせないので、現時点でのEC2の起動方法について纏めようと思います。

 起動手順

EC2を起動していきましょう。

AWS_Management_Console_ec2

AMIの選択

AMI(Amazon Machine Image)を選択します。

EC2_Management_Console_と_今すぐフォローすべきAWS界隈の素晴らしきエンジニア達__jawsug_|_Developers_IO_と_AMI

AMIの種類

Amazon Machine Image(AMI)には以下のような種類があります。

  • My AMI 自分で作成したAMIです。
  • AWS Marketplace Marketpkaceで公開されているAMIです。
  • Community AMI 他のユーザが公開しているAMIです。

MarketplaceのAMIを使用する場合は、EC2のランニングコスト以外にOSやソフトウェアのコスト *1が掛かります。またMarketplaceで作成したインスタンスのEBSボリュームは、他のインスタンスにアタッチできないので注意が必要です。 自分で作成したAMIは、他のユーザと共有したり、一般に公開したりすることも可能です。

カスタムAMIを共有する際のポイント2つ

OSの種類

好きなOSを選択しましょう。AMIは、CPUアーキテクチャ、ハイパーバイザ、ルートデバイスも考慮して決定しします。 ここでは Amazon Linux AMI 2014.09.2 (HVM) - ami-18869819 を使用します。

CPUアーキテクチャ

 CPUアーキテクチャは64bitと32bitがあります。32bitでは基本的に対応するメモリ量が4GBまでなのでスケールアップに限界があります。32bitのOSで現行世代のインスタンスタイプで使用できるのはWIndows Server(HVM)のみで、32bitのPVでは旧世代のインスタンスしか使用できません。

基本的に64bitのAMIを選択しましょう。

ハイパーバイザ

AWSの仮想化機構はHVM(完全仮想化)とPV(準仮想化)の2種類があります。一昔前はカーネルの対応を行うPVの方が高速と言われましたが、現在ではCPUの仮想化支援機構の充実によりHVMの方が高速になっています。 過去の資産を使用する等の理由が無ければHVMのAMIを使用しましょう。 HVMとPVの速度差の詳細は、以下の記事を参照してください。

EC2をHVMに移行するモチベーション – AWS Advent Calendar 2014:9日目

ルートデバイス

ルートデバイスにはInstance store-Backed と EBS-Backedの2種類が有ります。Instance store-BackedはEC2のインスタンスストア(Ephemeral Disk)にブートイメージにコピーして、そこからOSが起動します。EBS-Backedは起動用EBSをアタッチして、そこからOSが起動します。 起動時間が高速、Stopが可能等の利点が多いので、EBS-BackedのAMIを使用しましょう。

インスタンスタイプの選択

起動するインスタンスのスペック(インスタンスタイプ)を選択します。

choose_instance_type 必要なマシンスペックを選択しましょう。インスタンスタイプには現行世代と旧世代が有り、さらに以下の様に6種類のインスタンスファミリーに分類できます。

  • 汎用
  • コンピューティング最適化
  • メモリ最適化
  • GPU
  • ストレージ最適化
  • マイクロ

各インスタンスファミリーに対応するCPUアーキテクチャ、ハイパーバイザ等をまとめると以下の表になります。

世代 インスタンス ファミリー タイプ CPU Arch HVM 対応 PV 対応 EBS最適化 Placement group対応 Instance Store
現行世代 汎用 T2 64-bit, 32-bit × × × 無し
M3 64-bit △ (m3.xlarge以上) × SSD
コンピューティング 最適化 C4 64-bit *2 無し
C3 64-bit △ (c3.xlarge以上) SSD
GPU G2 64-bit × SSD
メモリ 最適化 R3 64-bit × △ (r3.xlarge以上) SSD
ストレージ 最適化 I2 64-bit × SSD
HS1 64-bit × HDD
旧世代 汎用 M1 64-bit, 32-bit *3 × △ (m1.large以上) × HDD
コンピューティング 最適化 C1 64-bit, 32-bit *4 × △ (c1.xlargeのみ) × HDD
CC1 64-bit × × × HDD
CC2 64-bit × × HDD
メモリ 最適化 M2 64-bit × △ (m2.2xlarge以上) × HDD
CR1 64-bit × × SSD
GPU CG1 *5 64-bit × × HDD
ストレージ 最適化 HI1 64-bit × SSD
マイクロ T1 64-bit, 32-bit × × × 無し

少し前まではHVM対応の小さいインスタンスタイプが有りませんでしたが、T2インスタンスの発表により無料枠を含めHVM対応インスタンスを使用できます。また、C4インスタンスはEBS最適化が標準で有効になってるので安定したディスクアクセスが期待できます。 同一価格帯のインスタンスタイプでは、旧世代に比べ現行世代の方が高性能でコストパフォーマンスが良いので、現行世代のインスタンスタイプを選択しましょう。ここではc3.largeを選択します。 注意点もあります。2012年以前に作成したAWSアカウントでは東京リージョンにアベイラビリティゾーン(AZ)が3個表示されると思います。その中で1個のAZでは現行世代のインスタンスタイプを使用できません。比較的最近(2013年半ば以降)に作成したAWSアカウントの場合は、現行世代が使用できないAZは表示されないため、意識する必要は有りません。

インスタンスの詳細設定

次はインスタンスの起動設定の詳細を設定します。

configure_instance_detail

設定項目 解説 推奨設定値
Number of Instances 起動するインスタンス数を設定できます。 ここでは1台起動するので"1"を入力します。
Purchasing option Spotインスタンスを利用するか選択できます。Spotインスタンスはリアルタイムで価格が変動します。非常に低価格ですが、高くなる場合も有り、Stopができません。Spotインスタンスを使いこなす為にはコツが必要です。 通常のオンデマンドインすランスを使用するためチェックしません。
Network インスタンスを配置するVPCを選択します。VPCは隔離されたネットワークを作成する事ができます。VPCには最初から用意されているDefault VPCが有ります。また自分でVPCを作成する事ができます。 ここではDefault VPCを選択します。
Subnet 選択したVPC内のsubnetを選択します。Default VPCの場合はAZ毎に1個のPublic Subnetが有ります。自分で作成したVPCではPublic SubnetやPrivate Subnetを自由に設定できます。 ここでは、ap-northeast-1aのsunbetを選択します。
Public IP 自動でパブリックIPを設定するか選択できます。別途Elastic IPでパブリックIPを付与する事も可能です。 ここではチェックして、パブリックIPを付与します。
Placement group Placement group対応インスタンスタイプの場合に表示されます。Placement groupを使用すると低レイテンシーで通信する事が可能になります。 ここでは"No placement group"を選択します。
IAM Role インスタンスに付与されるIAM権限(IAM Role)を設定できます。 必要な場合に設定して下さい。ここでは"None"を選択します。
Shutdown behavior OSをシャットダウンした時の挙動を設定できます。 基本的にStopを選択しましょう。
Enable termination protection 誤ってインスタンスをterminatする事を防止できます。 作業ミス防止の為にチェクをしましょう。
Monitoring CloudWatchのメトリクス採取を通常の5分間隔から1分間隔へ変更できます。 通常はチェックをしないで問題ありません。
Tenancy 使用する物理ハードウェアを専用で使用する事ができます。 通常はShared tenancyを選択します。

Network interfaces

プライベートIPアドレスの指定や追加のネットワークインターフェースの設定が行えます。

Advanced Details

使用するカーネルやRAM Diskの設定、User dataを設定できます。 仮想化タイプがPVの場合は、カーネルやRAM Diskの設定が行えます。HVMの場合には存在しない設定なので、今後は意識することがなくなると思います。 User dataはcloud-initという機能でインスタンス起動時にOSの設定を行えます。cloud-initの詳細は、以下のリンクを参照してください。記述したスクリプトなどの実行ができます。

cloud-initを徹底的に使い倒す – シリーズ –

CloudInit - Official Ubuntu Documentation

なお、WIndows Serverの場合でもスクリプトを実行することが可能です。

ストレージの追加

起動するインスタンスで使用するディスクを設定できます。

EC2_Management_Console_と_今すぐフォローすべきAWS界隈の素晴らしきエンジニア達__jawsug_|_Developers_IO_と_Amazon_Web_Services_ブログ__【AWS発表】さらに大容量で高速なElastic_Block_Store_EBS_ボリューム

ディスクの種類

使用できるディスクの種類は以下になります。

Type Volume Type 解説
Root EBSを参照して下さい。 EBS-Backed AMIの場合に表示されます。ルートデバイス(EBS)の設定を行います。
Instance Store - 各インスタンスタイプのInstance Storeによって、有無、個数、HDDかSSDが変わります。Instance StoreはStopすると内容が消えます。 通常はSWAPファイル用に使用することが多いです。
EBS General Purpose(SSD) 標準のタイプです。通称"gp2"です。SSDを使用しており、IOPSがサイズ(GB)の3倍に設定されます。ディスクサイズは最大1TBです。IOPSはバーストが可能で2015年1月31日時点で最大3,000IOPSになります。 re:Invent 2015でアナウンスされましたが、今後ディスクサイズは最大16TB、IOPSは最大10,000IOPS、スループットは160MB/sに拡張できるようになります。
Provisioned IOPS(SSD) IOPSを指定する事ができるタイプです。SSDを使用しており、IOPSをサイズ(GB)の30倍まで指定でき、最大1TB/4000IOPSまで設定できます。ただし、IOPSの設定値にも料金が発生します。 re:Invent 2015でアナウンスされましたが、今後ディスクサイズは最大16TB、IOPSは最大20,000IOPS、スループットは320MB/sに拡張できるようになります。
Magnetic  以前の標準タイプです。1GBあたりのコストが最も安くなりますが、磁気ディスクを異様しているため低速です。

ここでは"Volume Typr"やサイズ以外にデバイスのパスや"Delete on Termination"、"Encrypted"が設定可能ですが、デフォルトの設定のままとします。 ストレージの設定はGeneral Purpose(gp2)でVolumeを作成する事を推奨します。gp2を使用することでインスタンスの起動が高速化されるなどの効果があります。 ただし、サイズを小さくし過ぎるとIOPSのバースト制限を超えた場合にディスクIOが遅くなるので注意して下さい。

ストレージのオプション

ストレージのオプションには、以下のものがあります。

  • Delete on Termination インスタンスをTerminateした時にEBSを削除するかのオプションです。
  • Encrypted EBSを暗号化するかのオプションです。なお、ルートデバイスは暗号化できません。

タグの設定

インスタンスのメタ情報としてタグを設定できます。

tag_instance Nameタグにはインスタンスの名称を記述します。タグの利用方法として、コストをカテゴライズする事もできます。

セキュリティグループの設定

起動するインスタンスに設定する仮想ファイアウォール(セキュリティグループ)を設定します。

configure_security_group ここではSSHで接続する設定を行います。"Source"でMy IPを選択すると現在接続しているパブリックIPからのみ接続を許可する設定になります。 SSH等のように管理用通信はMy IPの設定で接続元を制限する事を推奨します。

起動設定の確認

設定した内容を確認します。

review_instance_launch

内容に誤りが無ければ"Launch"をクリックします。

キーペアの設定

最後にインスタンスにSSHでログインする時のキーペアを選択します。

select_keypair

ここでは既存のキーペアを選択します。新規でキーペアを作成する事も可能です。

インスタンスへのログイン

インスタンスのPublic DNSを確認します。

public_dns_ec2

Amazon Linuxの場合はec2-userでログインするので、以下のコマンドでログインします。

ssh -i <keypair> ec2-user@<Public DNS>

login_ec2_instance

ようやくログインができました。

まとめ

今回は入門編のため、User dataやネットワーク設定の詳細を割愛していますが、それでもこれだけの設定をする必要が有ります。単にインスタンスを起動するだけであれば、デフォルト値を設定するだけで簡単に設定ができます。しかし、AWSを使いこなす為には設定内容を理解する必要があります。 2014年6月に新しいEBSにタイプ"General Purpose"が、2014年7月にT2インスタンスが発表になり推奨すべき設定内容が変わってきていますので、インスタンスの起動時の設定を見直すと良いと思います。

最後に

6ヶ月前に書いたEC2再入門でしたが、頻繁なアップデートがあるAWSのメインサービスなので少しずつ古くなってきました。記事を書いて1年経つと情報が古い可能性がある旨を自動で表示してくれるのですが1年では遅いと思うので、今後の半年でアップデート記事を書いていきたいと思います。

次はRDSのまとめ記事をAuroraが普通に使えるようになったら書いてみようかな。

参考資料

Amazon Elastic Compute Cloud User Guide

【AWS発表】新しいSSDベースのElastic Block Storage

【AWS発表】バースト可能な性能を持つ新しい低コストEC2インスタンス

【AWS発表】さらに大容量で高速なElastic Block Store(EBS)ボリューム

【AWS発表】新しいC4インスタンスが利用可能に

脚注

  1. OSやソフトウェアの費用が発生しない場合もあります。
  2. C4インスタンスは標準でEBS最適化が有効
  3. m1.medium以下は64-bit, 32-bitに対応。m1.large以上は64-bitのみ。
  4. c1.medium以下は64-bit, 32-bitに対応。c1.large以上は64-bitのみ。
  5. 東京リージョンは未対応。