クラスターがプライベートサブネットにある場合、アプリケーションを介して EMR クラスターにアクセスするにはどうすればよいですか?
最終更新日: 2020 年 9 月 24 日
Apache Livy などのアプリケーションを使用して、プライベートサブネットにある Amazon EMR クラスターにアクセスして作業を送信することを考えています。
簡単な説明
パブリックサブネットで Application Load Balancer を作成します。Application Load Balancer のターゲットをマスターノードのプライベート IP アドレスに設定します。これで、プライベートサブネットにある EMR クラスターに接続し、REST API を使用してクライアントにジョブを送信できます。
解決方法
注: Kerberos でクラスターを起動する場合、または Livy で SSL を有効にした場合、次のことが機能しない可能性があります。
- Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
- ナビゲーションペインの [ロードバランシング] で [ロードバランサー] をクリックします。
- [ロードバランサーを作成] をクリックします。
- 「ロードバランサータイプを選択する」ページの [Application Load Balancer] で、 [作成] をクリックします。
- 「ステップ 1: ロードバランサーを設定する」ページで、次の操作を行います。
[スキーマ] で [インターネット接続] を選択します。
[リスナー] で、デフォルトのオプション (HTTP とポート 80) を使用します。
[VPC] で、EMR クラスターがある VPC を選択します。
[アベイラビリティーゾーン] で、2 つのサブネットを選択します。そのうちの 1 つが EMR クラスターがあるサブネット (プライベートサブネット) であることを確認します。 - [次へ: セキュリティ設定の構成] をクリックします。
- 前のステップでセキュアなリスナーを作成した場合は、セキュリティ設定の構成ページを完了します。それ以外の場合は、[次へ: セキュリティグループの設定] を選択します。
- Application Load Balancer のセキュリティグループまたはグループを選択します。これはインターネットに接続する Application Load Balancer です。受信リクエストを特定の IP アドレスまたは IP アドレス範囲に制限するセキュリティグループを使用することをお勧めします。
- [次へ: ルーティングの設定] を選択します。
- 「ステップ 4: ルーティングの設定」ページで、次の操作を行います。
[ターゲットタイプ] で [ip] をクリックします。
[プロトコル] で [HTTP] をクリックします。
[ポート] で、クライアントのウェブ UI のポートを入力します。たとえば Livy の場合、8998 と入力します。詳細については、「View web interfaces hosted on Amazon EMR clusters(Amazon EMR クラスターでホストされているウェブインターフェイスの表示)」をご参照ください。
[ヘルスチェック] セクションの [プロトコル] で、[HTTP] を選択します。
[パス] で [/sessions] と入力します。 - [次へ: ターゲットの登録] をクリックします。
- ステップ 5: ターゲットの登録ページの [IP] に、マスターノードのプライベート IP アドレスを入力します。 マスターノードのプライベート IP アドレスは、[ハードウェア] タブ (クラスターの詳細ページにある) で確認できます。
- [リストに追加] をクリックして、IP アドレスを [登録する] リストに追加します。
- [次へ: 確認] 、[作成] の順にクリックします。
- [状態] がアクティブに変わったら、[リスナー] タブをクリックします。
- [ルール] 列で、ターゲットグループのリンクを選択します。
- [ターゲット] タブで、[登録済みターゲット] と [アベイラビリティーゾーン] が正常であることを確認します。
- [説明] タブで、ロードバランサー (ロードバランサーの名前のあるリンク) の横のリンクをクリックします。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