クラスターがプライベートサブネットにある場合、アプリケーションを介して EMR クラスターにアクセスするにはどうすればよいですか?

最終更新日: 2020 年 5 月 11 日

Apache Livy などのアプリケーションを使用して、プライベートサブネットにある Amazon EMR クラスターにアクセスして作業を送信することを考えています。

簡単な説明

パブリックサブネットで Application Load Balancer を作成します。Application Load Balancer のターゲットをマスターノードのパブリック IP アドレスに設定します。これで、プライベートサブネットにある EMR クラスターに接続し、REST API を使用してクライアントにジョブを送信できます。

解決方法

注: Kerberos でクラスターを起動する場合、または Livy で SSL を有効にした場合、次のことが機能しない可能性があります。

  1. Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
  2. ナビゲーションペインの [ロードバランシング] で [ロードバランサー] をクリックします。
  3. [ロードバランサーを作成] をクリックします。
  4. ロードバランサータイプを選択する」ページの [Application Load Balancer] で、 [作成] をクリックします。
  5. ステップ 1: ロードバランサーを設定する」ページで、次の操作を行います。
    [スキーマ] で [インターネット接続] を選択します。
    [リスナー] で、デフォルトのオプション (HTTP とポート 80) を使用します。
    [VPC] で、EMR クラスターがある VPC を選択します。
    [アベイラビリティーゾーン] で、2 つのサブネットを選択します。そのうちの 1 つが EMR クラスターがあるサブネット (プライベートサブネット) であることを確認します。
  6. [次へ: セキュリティ設定の構成] をクリックします。
  7. 前のステップでセキュアなリスナーを作成した場合は、次のページを完了 します (「セキュリティ設定の構成」)。それ以外の場合は、[次へ: セキュリティグループの設定] を選択します。
  8. Application Load Balancer のセキュリティグループまたはグループを選択します。これはインターネットに接続する Application Load Balancer です。受信リクエストを特定の IP アドレスまたは IP アドレス範囲に制限するセキュリティグループを使用することをお勧めします。
  9. [次へ: ルーティングの設定] を選択します。
  10. ステップ 4: ルーティングの設定」ページで、次の操作を行います。
    [ターゲットタイプ] で [ip] をクリックします。
    [プロトコル] で [HTTP] をクリックします。
    [ポート] で、クライアントのウェブ UI のポートを入力します。たとえば Livy の場合、8998 と入力します。詳細については、「Amazon EMR クラスターでホストされているウェブサイトの表示」をご参照ください。
    ヘルスチェック」セクションの [プロトコル] で、[HTTP] を選択します。
    [パス] で [/sessions] と入力します。
  11. [次へ: ターゲットの登録] をクリックします。
  12. ステップ 5: ターゲットの登録」ページの [IP] に、マスターノードのパブリック IP アドレスを入力します。 マスターノードのパブリック IP アドレスは、[ハードウェア] タブ (クラスターの詳細ページにある) で確認できます。
  13. [リストに追加] をクリックして、IP アドレスを [登録する] リストに追加します。
  14. [次へ: 確認] 、[作成] の順にクリックします。
  15. [状態] がアクティブに変わったら、[リスナー] タブをクリックします。
  16. [ルール] 列で、ターゲットグループのリンクを選択します。
  17. [ターゲット] タブで、[登録済みターゲット] と [アベイラビリティーゾーン] が正常であることを確認します。
  18. [説明] タブで、ロードバランサー (ロードバランサーの名前のあるリンク) の横のリンクをクリックします。Livy ウェブ UI が表示された場合、設定は機能しています。つまり、リクエストはプライベートサブネットの EMR クラスターで Livy に到達できます。

これで、クライアントにジョブを送信できます。たとえば、次のコマンドで Apache Spark ジョブを Livy サーバーに送信します。livyALB-2103017743.us-east-1.elb.amazonaws.com を Application Load Balancer の DNS 名に置き換えます。DNS 名は、Application Load Balancer の [説明] タブにあります。

curl -X POST --data '{"kind": "pyspark"}' -H "Content-Type: application/json" livyALB-2103017743.us-east-1.elb.amazonaws.com/sessions

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合