SSH を使用してプライマリノードに接続する - Amazon EMR

SSH を使用してプライマリノードに接続する

Secure Shell (SSH) とは、リモートコンピュータとの安全な接続を確立するために使用できるネットワークプロトコルです。接続後、ローカルコンピュータ上のターミナルは、リモートコンピュータで実行されているかのように動作します。ローカルで発行したコマンドがリモートコンピュータで実行され、リモートコンピュータからのコマンドの出力はターミナルウィンドウに表示されます。

AWS で SSH を使用するときは、クラウドで実行される仮想サーバーである EC2 インスタンスに接続しています。Amazon EMR で作業するときの SSH の最も一般的な用途は、クラスターのプライマリノードとして動作する EC2 インスタンスへの接続です。

SSH を使用してプライマリノードに接続すると、クラスターをモニタリングし、操作できます。例えば、プライマリノードで Linux コマンドを発行したり、Hive や Pig などのアプリケーションをインタラクティブに実行したりできます。また、ディレクトリのブラウズやログファイルの読み取りなども可能です。SSH 接続にトンネルを作成して、プライマリノードでホストされるウェブインターフェイスを表示することもできます。詳細については、「Amazon EMR クラスターでホストされているウェブインターフェイスを表示する」を参照してください。

SSH を使用してプライマリノードに接続するには、プライマリノードのパブリック DNS 名が必要です。また、プライマリノードに関連付けられるセキュリティグループには、SSH 接続元のクライアントを含むソースからの SSH (TCP ポート 22) トラフィックを許可するインバウンドルールがある必要があります。クライアントからの SSH 接続を許可するルールの追加が必要になる場合があります。セキュリティグループのルールの変更に関する詳細については、「Amazon EC2 Linux インスタンス用ユーザーガイド」の「セキュリティグループを使用してネットワークトラフィックを制御する」と「セキュリティグループにルールを追加する」を参照してください。

プライマリノードのパブリック DNS 名を取得する

プライマリパブリック DNS 名は、Amazon EMR コンソールと AWS CLI を使用して取得できます。

注記

Amazon EMR コンソールは、再設計され、使いやすくなりました。古いコンソールと新しいコンソールエクスペリエンスの違いについては、「コンソールの新機能」を参照してください。

New console
新しいコンソールを使用してプライマリノードのパブリック DNS 名を取得するには
  1. AWS Management Consoleにサインインし、Amazon EMR コンソール (https://console.aws.amazon.com/emr) を開きます。

  2. 左側のナビゲーションペインの [EMR on EC2][クラスター] を選択し、パブリック DNS 名を取得するクラスターを選択します。

  3. クラスターの詳細ページの [概要] セクションに表示される [プライマリノードのパブリック DNS] 値を書き留めます。

Old console
古いコンソールを使用してプライマリノードのパブリック DNS 名を取得するには
  1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

  2. [Cluster List] ページで、クラスターのリンクを選択します。

  3. [クラスターの詳細] ページの [概要] セクションに表示される [マスターパブリック DNS] 値を書き留めます。

    注記

    [SSH] リンクを選択して、プライマリノードへの SSH 接続を作成する手順を表示することもできます。

CLI
AWS CLI を使用して、プライマリノードのパブリック DNS 名を取得するには
  1. クラスター識別子を取得するには、次のコマンドを入力します。

    aws emr list-clusters

    出力には、クラスター ID を含むクラスターのリストが表示されます。接続しているクラスターのクラスター ID を書き留めます。

    "Status": { "Timeline": { "ReadyDateTime": 1408040782.374, "CreationDateTime": 1408040501.213 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "NormalizedInstanceHours": 4, "Id": "j-2AL4XXXXXX5T9", "Name": "My cluster"
  2. クラスターのパブリック DNS 名を含むクラスターインスタンスのリストを表示するには、次のいずれかのコマンドを入力します。j-2AL4XXXXXX5T9 の部分を、前のコマンドで返されたクラスター ID に置き換えてください。

    aws emr list-instances --cluster-id j-2AL4XXXXXX5T9

    または:

    aws emr describe-cluster --cluster-id j-2AL4XXXXXX5T9

    出力には、DNS 名と IP アドレスを含むクラスターインスタンスのリストが表示されます。PublicDnsName の値を書き留めます。

    "Status": { "Timeline": { "ReadyDateTime": 1408040779.263, "CreationDateTime": 1408040515.535 }, "State": "RUNNING", "StateChangeReason": {} }, "Ec2InstanceId": "i-e89b45e7", "PublicDnsName": "ec2-###-##-##-###.us-west-2.compute.amazonaws.com" "PrivateDnsName": "ip-###-##-##-###.us-west-2.compute.internal", "PublicIpAddress": "##.###.###.##", "Id": "ci-12XXXXXXXXFMH", "PrivateIpAddress": "###.##.#.###"

詳細については、「AWS CLI の Amazon EMR コマンド」を参照してください。

Linux、Unix、または Mac OS X で SSH と Amazon EC2 プライベートキーを使用してプライマリノードに接続する

プライベートキーファイルで認証された SSH 接続を作成するには、クラスター起動時に Amazon EC2 キーペアのプライベートキーを指定する必要があります。キーペアへのアクセスに関する詳細は、「Amazon EC2 Linux インスタンス用ユーザーガイド」の「Amazon EC2 のキーペア」を参照してください。

Linux コンピュータには、デフォルトで SSH クライアントが含まれている可能性があります。たとえば、ほとんどの Linux、Unix、および Mac OS オペレーティングシステムには OpenSSH がインストールされています。SSH クライアントがあるかどうかを確認するには、コマンドラインで ssh と入力します。ご使用のコンピュータでこのコマンドが認識されない場合、プライマリノードに接続するために SSH クライアントをインストールします。OpenSSH プロジェクトが、SSH ツールの完全なスイートの無料実装を提供しています。詳細については、OpenSSH のウェブサイトを参照してください。

次の手順は、Linux、Unix、および Mac OS X で、Amazon EMR プライマリノードへの SSH 接続を開く方法です。

キーペアのプライベートキーのファイルアクセス許可を設定するには

Amazon EC2 キーペアのプライベートキーを使用して SSH 接続を作成する前に、キー所有者のみがファイルへのアクセス権限を持つように .pem ファイルに対するアクセス許可を設定しておく必要があります。これは、ターミナルまたは AWS CLI を使用して SSH 接続を作成するために必要です。

  1. インバウンド SSH トラフィックを許可していることを確認します。手順については、「接続する前に: インバウンドトラフィックを承認する」を参照してください。

  2. .pem ファイルを見つけます。この手順では、ファイル名が mykeypair.pem であり、現在のユーザーのホームディレクトリに保存されていることを想定しています。

  3. 次のコマンドを入力してアクセス許可を設定します。~/mykeypair.pem の部分を、キーペアのプライベートキーファイルの完全修飾パスとファイル名に置き換えてください。例えば、「C:/Users/<username>/.ssh/mykeypair.pem」と入力します。

    chmod 400 ~/mykeypair.pem

    .pem ファイルに対するアクセス許可を設定していない場合、キーファイルが保護されておらず、キーが拒否されることを示すエラーが表示されます。接続するためにキーペアのプライベートキーファイルに対するアクセス許可を設定する必要があるのは、このファイルを最初に使用するときだけです。

ターミナルを使用してプライマリノードに接続するには
  1. ターミナルウィンドウを開きます。Mac OS X で、[Applications] > [Utilities] > [Terminal] を選択します。他の Linux ディストリビューションでは、ターミナルは通常、[Applications] > [Accessories] > [Terminal] にあります。

  2. プライマリノードへの接続を確立するには、次のコマンドを入力します。ec2-###-##-##-###.compute-1.amazonaws.com はクラスターのプライマリパブリック DNS 名に、~/mykeypair.pem.pem ファイルの完全修飾パスとファイル名に置き換えます。例えば、「C:/Users/<username>/.ssh/mykeypair.pem」と入力します。

    ssh hadoop@ec2-###-##-##-###.compute-1.amazonaws.com -i ~/mykeypair.pem
    重要

    Amazon EMR プライマリノードに接続するときは、ログイン名 hadoop を使用する必要があります。このログイン名を使用しない場合、Server refused our key のようなエラーが表示されることがあります。

  3. 警告は、接続先ホストの正当性を検証できないことを示しています。yes を入力して、操作を続けます。

  4. プライマリノードに対する操作が終了したら、次のコマンドを入力して SSH 接続を閉じます。

    exit

SSH を使用したプライマリノードへの接続に問題がある場合は、「インスタンスへの接続に関するトラブルシューティング」を参照してください。

Windows で SSH を使用してプライマリノードに接続する

Windows ユーザーは、PuTTY などの SSH クライアントを使用して、プライマリノードに接続できます。Amazon EMR プライマリノードに接続する前に、PuTTY と PuTTYgen をダウンロードしてインストールしてください。これらのツールは、PuTTY のダウンロードページからダウンロードできます。

PuTTY は、Amazon EC2 によって生成されるキーペアのプライベートキーファイルの形式 (.pem) をネイティブでサポートしていません。PuTTYgen を使用して、キーファイルを必要な PuTTY 形式 (.ppk) に変換します。PuTTY を使用してプライマリノードへの接続を試みる前に、キーをこの形式 (.ppk) に変換する必要があります。

キーの変換について詳しくは、「Amazon EC2 Linux インスタンス用ユーザーガイド」の「PuTTYgen を使用してプライベートキーを変換する」を参照してください。

PuTTY を使用してプライマリノードに接続するには
  1. インバウンド SSH トラフィックを許可していることを確認します。手順については、「接続する前に: インバウンドトラフィックを承認する」を参照してください。

  2. putty.exe を開きます。Windows のプログラムの一覧から PuTTY を起動することもできます。

  3. 必要に応じて、[Category] リストで、[Session] を選択します。

  4. [Host Name (or IP address)] に、「hadoop@MasterPublicDNS」と入力します。たとえば、hadoop@ec2-###-##-##-###.compute-1.amazonaws.com です。

  5. [Category] リストで、[Connection]、[SSH] の順に選択し、[Auth] を選択します。

  6. [Private key file for authentication] では、[Browse] をクリックし、以前に生成した .ppk ファイルを選択します。

  7. [Open] を選択し、[Yes] をクリックして PuTTY のセキュリティ警告を閉じます。

    重要

    プライマリノードにログインするときに、ユーザー名の入力を求められた場合は、「hadoop」と入力します。

  8. プライマリノードに対する操作が終了したら、PuTTY を閉じることで SSH 接続を閉じることができます。

    注記

    SSH 接続のタイムアウト防止には、[Category] リストで [Connection] をクリックし、[Enable TCP_keepalives] オプションを選択します。PuTTY にアクティブな SSH セッションがある場合は、PuTTY のタイトルバーのコンテキストを開き (右クリック)、[Change Settings] を選択することで設定を変更できます。

SSH を使用したプライマリノードへの接続に問題がある場合は、「インスタンスへの接続に関するトラブルシューティング」を参照してください。

AWS CLI を使用してプライマリノードに接続する

Windows、Linux、Unix、および Mac OS X で、AWS CLI を使用してプライマリノードへの SSH 接続を作成できます。プラットフォームに関係なく、プライマリノードのパブリック DNS 名と、Amazon EC2 キーペアのプライベートキーが必要です。Linux、Unix、Mac OS X などで AWS CLI を使用している場合は、「キーペアのプライベートキーのファイルアクセス許可を設定するには」に示されているように、プライベートキー (.pem または .ppk) ファイルに対するアクセス権限も設定する必要があります。

AWS CLI を使用してプライマリノードに接続するには
  1. インバウンド SSH トラフィックを許可していることを確認します。手順については、「接続する前に: インバウンドトラフィックを承認する」を参照してください。

  2. クラスター識別子を取得するには、次のように入力します。

    aws emr list-clusters

    出力には、クラスター ID を含むクラスターのリストが表示されます。接続しているクラスターのクラスター ID を書き留めます。

    "Status": { "Timeline": { "ReadyDateTime": 1408040782.374, "CreationDateTime": 1408040501.213 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "NormalizedInstanceHours": 4, "Id": "j-2AL4XXXXXX5T9", "Name": "AWS CLI cluster"
  3. プライマリノードへの SSH 接続を開くには、次のコマンドを入力します。次の例で、j-2AL4XXXXXX5T9 をクラスター ID に、~/mykeypair.key.pem ファイル (Linux、Unix、および Mac OS X の場合) または .ppk ファイル (Windows の場合) の完全修飾パスとファイル名に置き換えてください。例えば、「C:\Users\<username>\.ssh\mykeypair.pem」と入力します。

    aws emr ssh --cluster-id j-2AL4XXXXXX5T9 --key-pair-file ~/mykeypair.key
  4. プライマリノードに対する操作が終了したら、AWS CLI ウィンドウを閉じます。

    詳細については、「AWS CLI の Amazon EMR コマンド」を参照してください。SSH を使用したプライマリノードへの接続に問題がある場合は、「インスタンスへの接続に関するトラブルシューティング」を参照してください。