AWSを駆使したクラウドデータサイエンティストになるための教科書:EC2インスタンスを立ち上げてSSH接続する
EC2インスタンスを立ち上げて実際にSSH接続する方法を紹介します。今回は、練習ということでVPCの設定はEC2インスタンスを作成したときに自動で構築されるデフォルトVPCを使います。
EC2の利用料金
EC2を初めて利用される方は、「EC2というサービスは一体どれだけお金がかかるんだろう?」と疑問に思うかもしれません。特に個人で初めて利用する際は不安になりますよね。
そこでEC2の利用料金について簡単に説明しておきます。
AWSのサービスは利用した分だけ請求される方式
AWSのサービスというのは買い切り方でもサブスクリプション方でもなく、従量課金方です。そのため利用した分だけ料金を支払うため、一律で「EC2インスタンスは××円だよ」とは言えません。
「じゃあ、使ってみないといくらになるかわからないってことか。いきなり初月で1万円とか料金発生したらすごい嫌なんだけど。」
こんな不安を抱いてしまった皆さんのためにAWSサービスを自分の予算にあった形で利用する際のポイントをお伝えしておきます。
利用する月の予算(利用コストの上限)を決めておく。
事前に予算を決めておくことで「いきなり数十万円の請求が来た」みたいな事態は防げます。ただ勉強のためにEC2を立ち上げて動作を確認してみる程度なら無料枠(AWSには新しいユーザーに対して無料クレジットを与えています)で済むでしょうし、EC2を無難な設定で24時間ずっと起動しっぱなしで1か月使い続けてしまったとしてもたいていの場合は5千円以内で済むはずです。AWSが何にどういう単価で課金をしているのかを使い始める前に理解しておく
AWSサービスはそれぞれで何が課金対象なのか、どれくらいの単価なのかが異なります。きちんと各サービスページに書いてあるので利用する前に確認しておくと安心です。例えばEC2ならこのように料金ページがあります。
ただし、なかなか見えにくいコストが発生するケースもあります。例えばSageMakerというサービスはデータサイエンティストがAIモデル開発をする上でよく利用するサービスです。「自分としてはSageMakerを利用していたのに、なぜかEC2の利用料金をかかっている!?」みたいなケースがあるのです。これはSageMakerというサービスがバックエンドでEC2サービスを自動で立ち上げて利用しているためです。このように見えづらいコストが発生する場合もあるので、事前にちゃんと料金体系を把握しておくことが重要です。ある程度利用量が事前に予想がついているならAWSのコスト見積サービスで概算を知っておく
AWSの各サービスはコストを事前に試算できる見積ページを持っている場合があります。例えばEC2インスタンスならこんな感じで見積ページがあります。AWSのBilling and Cost Managementサービスを利用し、予算の設定とアラート設定を行う
これはマストで設定すべきですが、AWSはユーザーの不用意なコスト発生を防ぐためにBilling and Cost Managementサービスを提供しています。このサービスは予算の設定や利用料のモニタリング、コストに異常が発生した場合のアラートなどが含まれます。このサービス自体はほとんどの機能を無料で利用することができます。不用意なコスト発生を防止するため、人的ミスが発生しやすそうなポイントは自動設定を施しておく
AWSのマシンを利用するような多くのサービスはそのマシンを立ち上げている時間に対して課金されます。例えばEC2インスタンスを立ち上げて起動している時間に対して課金されます。そのため、もし使い終わった後にうっかりEC2インスタンスを停止し忘れた、となると自分としては使っていないのに予想外の料金が発生しまったということになります。こうした自体を防ぐためにヒューマンエラーによって課金が発生してしまいそうな動作は自動設定をしておくことが安心です。例えばEC2インスタンスは1日のこの時間になったら自動的に停止するなどです。
EC2の課金モデル
EC2の課金体系は大きく4つにまず分かれます。それがオンデマンド、リザーブド、スポット、Saving planです。プライベートユースならほとんどオンデマンドだと思いますが、ビジネスユースだとリザーブド、スポット、Saving planを選択する機会もあると思いますのでざっくり理解しておきます。
(1) オンデマンドインスタンス
必要なときにインスタンスを起動するプランです。長期契約のような概念はなく使った分だけ課金されます。そのためプライベートで短期間利用する場合、どの程度するかわからない場合、ちょっとしたテストや開発環境としての利用の場合がメインのユースケースとなります。
(2) リザーブドインスタンス
1年または3年の利用契約を前提にした割引価格で利用できるプランです。長期間の安定した利用が見込まれるプロダクション環境のような利用率が高い環境でコストを削減することができます。
(3) スポットインスタンス
AWSの未使用のコンピュートキャパシティを利用することで大幅な割引を受けることができるプランです。オンデマンドやリザーブドではAWS都合でインスタンスを停止されることはありませんが、スポットはあくまでAWSので今空いているマシンを有効活用するために割引で一時的に提供されているものですので、AWSの都合でインスタンスが停止される可能性あります。例えばLLMの学習など非常にコスト効率が重要なバッチ処理や分散型ワークロードを行う際に大量のインスタンスが必要だからスポットインスタンスを利用することがあります。スポット価格は需要と供給に基づいて変動します。
(4) Savings Plans
1年または3年の最低契約期間を設けることで、EC2のインスタンス種別やリージョンに関係なく割引を受けられる柔軟な料金体系です。
課金対象(オンデマンドの場合)
EC2インスタンスを利用する場合、次のようものに課金されます。そのため、ハイスペックなものを選べば、単価があがります。こちらに具体的な課金テーブルがあります。
(1) インスタンスタイプ
立ち上げるEC2インスタンスもあくまでAWSが世界のどこかで保持している物理的なハードウェアです。そのため、どういうスペックのデバイスを借りるのかを選択することができます。EC2インスタンスではこれらをインスタンスタイプとして管理しており、それぞれのインスタンスタイプには異なるvCPUとメモリなどが定義されています。どのインスタンスタイプにするかで料金が異なります。課金は利用した分の時間に対して課金されます。基本的に時間単位で課金されますが、OSやユースケースによって秒単位での課金のケースもあります。詳細はこちらをご覧ください。
例: t2.micro、m5.large、c6g.medium など。
(2) リージョン
AWSのサービスを利用する際、利用するAWSリージョンによって料金が異なります。例えば、 東京リージョンは他のリージョンより若干高めになります。
(3) ストレージ
EBS (Elastic Block Store):
データを保存するためのストレージです。EBSにもいくつかタイプがあり、どれを選択するかによって料金が変わります。
(4) データ転送
実際に立ち上げたEC2インスタンスの通信に対しての課金です。インバウンドデータ(外部からEC2へのデータ)は無料ですが、アウトバウンドデータ(EC2から外部へのデータ)は転送量に応じて課金されます。同じリージョン内でのデータ転送は割安になります。
(5) オプション機能
Elastic IP: EC2インスタンスのパブリックIPは基本的にインスタンスの再起動や停止に応じて変わるDynamic方式です。これを固定したパブリックIPにしたい場合はElastic IPを利用することができますが、こちらはDYなみcIP方式とは異なり有料です。
モニタリング (CloudWatch):詳細なモニタリングには追加料金がかかる場合があります。
EC2インスタンスの立ち上げ
では、実際にEC2インスタンスをまずは立ち上げてみましょう。
ここではすでにAWSアカウントは作成しており、AWSマネジメントコンソールにログインしている状態からスタートします。
AWSマネジメントコンソールから検索窓に「EC2」と入力し、表示されたEC2サービスをクリック
表示された画面(EC2のサービスコンソール)から「インスタンスを起動」を選択
EC2のパラメータ設定画面が表示されるので、項目に従って入力していきます。
名前とタグ:EC2インスタンスの名前です。タグは複数のEC2インスタンスを利用する場合、タグを使って管理しやすくするために利用します。今回は単発のEC2インスタンスのみなのでタグは設定しません。
アプリケーションおよびOSイメージ(Amazonマシンイメージ):EC2インスタンスはあくまで空っぽなAWS所有のデバイスなので、OSなど最低限コンピュータとして利用できるソフトなどをインストールしておく必要があります。AWSではこれをAmazonマシンイメージ(通称AMI)というパッケージで選択することになります。主には自分が使いたいOSで選択すればよいかと思います。
データ分析環境としては、特にこだわりがなければAmazon LinuxやUbuntuを選択すればいいでしょう。
インスタンスタイプ:EC2インスタンスのハードウェア性能であるvCPUやメモリを組み合わせたものです。
データ分析環境として利用するので、通常自分がパソコンを購入する場合と同じように考えましょう。例えばメモリなら8GB、16GBはほしい場合なら、それに相当するインスタンスタイプを選びましょう。ただ、メモリ8GB,16GBというインスタンスタイプは複数あります。そもそもインスタンスタイプのt2とかmicroとかは何なんだろう?そう思ったかと思います。EC2インスタンスタイプはかなり多くの種類があり、それぞれユースケースによって最適化されています。例えば高速な計算処理をしたいなら、「コンピューティング最適化」を謡うインスタンスタイプを選ぶべきですし、さらにGPUを利用した高速化を実現したいなら「高速コンピューティング」のインスタンスタイプを選ぶべきです。このあたりはAWSのEC2のインスタンスタイプの説明ページをみて、最適なものを選びましょう。例えばローカルPCがWindowsPCで13世代のCorei7、メモリは8GBだとして、それと類似の環境が欲しいとします。13世代のCorei7は8コア16スレッドの構成でEC2インスタンスタイプで言えば2vCPUに相当します。メモリは8GBだとしたら、m6i.largeやc6i.largeがふさわしいでしょう。今回は練習なので無料枠のt2.microを使います。
キーペア(ログイン): 「AWSを駆使したクラウドデータサイエンティストになるための教科書:EC2へのアクセスを行う通信「SSH通信」って何?」でも紹介したAWSの公開鍵と秘密鍵です。ここで公開鍵と秘密鍵を発行し、秘密鍵をダウンロードしてEC2インスタンスにSSH接続するローカルデバイスにに保管しておきます。
「新しいキーペアの作成」を選択しキーペアを生成します。「キーペア名」は任意の名前を付け、「キーペアタイプ」はデフォルトのままでOKです。「プライベートキーファイル形式」は今回SSHクライアントにTerra Termと使う予定ですので、.ppkを選択します。「キーペアを作成」ボタンを押すと、自動的に秘密鍵はダウンロードされます。
ネットワーク設定:このEC2インスタンスに関連するネットワークの設定項目です。以前「AWSを駆使したクラウドデータサイエンティストになるための教科書:AWSのネットワーク「VPC」を理解する」で解説した内容をここで実際設定することができます。以下各項目についてみていきます。
ネットワーク:このEC2インスタンスを所属させたいVPCを選択します。特に何も設定を変えなければ、AWSアカウントを作成したときに自動的に作成されているデフォルトVPCが割り当てられます。特に今こだわりがなければデフォルトのままでOKです。
サブネット:このEC2インスタンスが所属するVPCの中で、さらにどのサブネットに所属させたいかを選択します。サブネットもアカウント作成時にVPCと一緒に3つのAZに自動的に作成されており、そのうちどれか1つがデフォルトだと割り当てられます。こちらも特にこだわりがなければデフォルトのままでOKです。
パブリックIPの自動割り当て:前回の記事の中でも解説していますが、デフォルトで割り当てられるサブネットはすべてパブリックサブネットです。そしてデフォルトのパブリックサブネットでは自動的に所属するインスタンスに対してダイナミックなパブリックIP(再起動や起動のたびにかわるIP)が割り当てられる設定になっています。この項目がまさにそれです。設定はそのままでOKです。
ファイアウォール(セキュリティグループ):セキュリティグループの設定です。EC2インスタンス単体での通信のルールを設定します。これまでセキュリティグループを作成したことがない場合は「セキュリティグループを作成」がデフォルトでこのEC2インスタンスの立ち上げと同時に新たなセキュリティグループが作成されます。今回のケースは自身の端末からSSHでEC2インスタンスに接続するものです。「からのSSHトラフィックを許可」の項目にプルダウンがあり、デフォルトでは「任意の場所 0.0.0.0/0」と表示されています。この0.0.0.0/0はCIDR記法ですべての通信(IPアドレス)を意味します。つまりこの選択肢を選択しているということは、このEC2インスタンスに対してのリクエスト通信がインターネット上からあった場合、セキュリティグループはすべてを許可するということになります。
これを自身の今操作しているローカルPCに限定したい場合はプルダウンから「自分のIP」にすることで今EC2のサービスコンソールを操作しているパソコンが所属しているパブリックIP(ルーターのパブリックIP)からの通信のみが許可されるようになります。
もし自分が今操作しているIPアドレス以外からの通信を許可したい場合はカスタムから設定することも可能です。
ここでは練習なのであえて「任意の場所(0.0.0.0/0)」にしますが、本来は「自分のIP」に設定しましょう。
その他、「インターネットからのHTTPSトラフィックを許可」「インターネットからのHTTPトラフィックを許可」は立ち上げるEC2インスタンスをWebサーバー(インターネットからのHTTPリクエストを受け付けて、HTTPレスポンスをするマシン)にしたい場合の設定ですので、今回は不要になります。デフォルトのままにしましょう。
ストレージを設定:EC2インスタンスのストレージ(SSD)を設定します。デフォルトのままでOKです。細かいことはここで説明しませんが、AWSのEBSというストレージサービスを利用することになります。これはストレージに読み書きする速度で性能の違うラインナップがあり、当然高速な読み書きができるほど高額になります。
高度な詳細:いくつかより詳細な設定項目があります。ここではデフォルトのままでOKです。
概要:立ち上げるインスタンスの数を決めることができます。今回設定したEC2インスタンスの仕様に基づき何個のインスタンスを立ち上げるのかということです。デフォルトは1になります。デフォルトのままでOKです。
インスタンスを起動:すべての設定を完了したら、「インスタンスを起動」の選択することでAWSがあなたの仕様に基づくEC2インスタンスを用意してくれます。
立ち上げたEC2インスタンスの確認
お疲れ様です。これでEC2インスタンスを無事立ち上げることができました。立ち上げたEC2を確認するためにはEC2サービスコンソールに戻ることで一覧表示されます(立ち上げが完了した後の画面でインスタンスIDが表示されているはずです。そのIDをクリックすると立ち上げているEC2の内容を確認できます)。
インスタンスへの接続
さて、インスタンスへの接続についてはSSHを用いて接続しますが、インスタンス立ち上げ後の下記のような画面から「インスタンスに接続する」を選択すると、SSHクライアント以外の接続方法もあることがわかります。今回は利用しませんが、例えば「EC2 Instance Connect」はブラウザ上からEC2インスタンスにアクセスすることができます。
Tera Termのインストール
まずは、クライアント側にSSHクライアントアプリケーションを導入する必要があります。HTTPリクエストでは通信をクライアント側のブラウザが実際に行います。SSHリクエストではSSHクライアントアプリケーションが実際に通信を行うのです。今回は「Tera Term」を利用しますが、ここは調べていただくといくつかSSHクライアントはありますので好みで選んでみてください。Tera Termはここのページからダウンロードできます。
Tera TermからSSHで接続する宛先(サーバー)を設定する
Tera Termをインストール出来たら、一度起動します。起動すると以下のように新しい接続を作成する画面がでてきます。ここでSSHで接続する宛先(サーバー)を設定します。
いくつか設定する項目がありますが、理解しておくべきポイントは基本的に2つです。
ホスト:接続したいサーバー側の宛先を設定します。宛先なので、端的にサーバー側のパブリックIPアドレスを入力することができます。またはIPアドレスの代わりにDNS名を入れることもできます。DNSとはDomain Name Systemの略称です。IPアドレスは数字の羅列による住所の表現なので人間にとっては覚えにくいです。そのため、それを人間がわかりやすくするためにIPアドレスとそれに対応する名前を事前に登録しておくことで、名前で宛先に通信を行うことができる仕組みがDNSです。
AWS EC2インスタンスでの確認方法
今回はEC2インスタンス(サーバー)にSSH接続するのでこのインスタンスのDNS名を入力します。EC2インスタンスのDNS名はAWSにログインし、マネジメントコンソールからEC2サービスコンソールに移動し、自分が立ちあげたEC2インスタンスIDをクリックすると「インスタンス概要」が表示されます。そこに「パブリックIPv4 DNS」という項目の値がEC2インスタンスがもつパブリックIPアドレスに対応するDNS名です。こちらはEC2インスタンスを立ち上げたときにAWSが自動的に名前を付与しています。また、前述の通りEC2インスタンスはデフォルトではダイナミックIPなので、停止中はIPアドレスを持ちません。そのため、それに対応するDNS名もないので、停止中は以下のようにDNS名の値がないという表示になっています。
TCPポート番号:サーバー側がSSH通信を受け取るのはSSHサーバーソフトウェアのようなアプリケーションです。IPアドレスはあくまでサーバーまでの住所なので、サーバーという箱の中のどこのアプリケーションが通信を受け取るかを特定するためにポート番号を用いて特定します。一般的にSSH通信のポートは22を開放します。
AWS EC2インスタンスでの確認方法
ポート番号は基本的にSSHに対しては22を開放するものなので改めて確認しなくてもいいのですが、AWS EC2インスタンスではEC2サービスコンソールから立ち上げているEC2インスタンスIDをクリックしインスタンス概要を表示した後、少しスクロールすると「セキュリティ」というタブを発見できると思います。
ここのセキュリティグループのインバウンドルールの中身にポート範囲と記載のある項目の値が解放しているポート番号です。
ホストとポート番号を入力したら「OK」を押します。OKを押すと初回は「登録されていない危険なホストだ」という趣旨のセキュリティ警告が出ると思いますが、無視して「続行」に進むと、以下のように認証方法を選択するようにSSH認証のポップアップが出てきます。
認証にまたいくつか設定項目が出ていますが最低限以下2つを入力することでOKです。
ユーザー名:EC2インスタンスにログインするためのユーザー名です。特にご自身で設定した覚えがない方はAWSのAMIごとにデフォルトのユーザー名があります。
以下は代表的なデフォルトのユーザー名です。デフォルトユーザー名はAWSの公式ドキュメントからも確認できます。
認証方式 RSA/DSA/ECDSA/ED2519鍵を使う:ここでは秘密鍵と公開鍵を利用するので、「RSA/DSA/ECDSA/ED2519鍵を使う」を選択し、先にEC2インスタンスを立ち上げる際に作成し、ダウンロードしておいた秘密鍵ファイルを選択します。「…」を選択することでファイル選択画面に遷移します(もしここで応答なしみたいな表示がでても少し待っていると正常に起動します)。
この2つを設定できたら「OK」を押すと認証・接続が開始されます。
無事接続が完了するとAmazon Linuxの場合、鳥の絵が表示されます。これで接続が完了しました。