先に結論
- プライベートサブネット上のクラスターはサービスアクセス用のENIを介してEMRと通信するため
NATゲートウェイを使用せずにジョブを実行できる- ただしS3のVPCエンドポイントは必ず必要
- クラスタの起動リクエスト自体はインターネットを介してEMRのエンドポイントにAPIリクエストを投げる必要がある
実行したい内容 | NATGWが必要か |
---|---|
プライベートサブネット内からのRunJobFlow等のAPIリクエスト | 必要 |
他のAWSサービスと通信が不要なジョブを実行 | 不要 |
VPCエンドポイントに対応していないAWSサービスと通信が必要なジョブ | 必要 |
VPCエンドポイントに対応しているAWSサービスと通信が必要なジョブ | 不要 |
ドキュメントやFAQによって記載がまちまち
VPC 環境で Amazon EMR クラスターを起動する方法を教えてください。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/emr-launch-cluster-vpc/
Amazon EMR のプライベートサブネットを使用する場合は、NAT ゲートウェイとセキュリティグループを使用する必要があります。
ネットワークの計画と構成
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-plan-vpc-subnet.html
パブリックおよびプライベート VPC サブネットの両方で EMR クラスターを起動できます。これは、EMR クラスターを実行するために、インターネット接続が必要ないことを意味します。
また、以下からはAWSのサービスエンドポイントに対する通信が発生しなければ
NATゲートウェイは不要と読み取れます。
ただし、たとえば企業イントラネット内、または AWS Key Management Service などのパブリック AWS サービスエンドポイントなど、VPC の外側にあるサービスまたはリソースにアクセスするために、サービスネットワークアドレス変換 (NAT) および VPN ゲートウェイを構成しなければならない場合があります。
以下のドキュメントからも通信が必要なAWSサービスにVPCエンドポイントが提供されていれば
NATゲートウェイが不要と読み取ることができます。
Amazon VPC オプション - プライベートサブネット
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-clusters-in-a-vpc.html#emr-vpc-private-subnet
VPC エンドポイントを提供しない AWS サービスにアクセスするには、NAT インスタンスまたはインターネットゲートウェイを引き続き使用する必要があります。
実際に試してみる
クラスターの作成時、プラベートサブネットを指定すると以下のようなメッセージが出ますが、
クラスター自体の作成は可能です。
ちなみにEMRコンソール上からS3エンドポイント、NATインスタンスの作成はできるのですが、
今のところNATゲートウェイの作成には対応していないようです。
クラスターのブートストラップおよび、サンプルのHiveスクリプトの実行も問題なく完了します。
参考: ステップ 4: Hive スクリプトの実行によるサンプルデータの処理
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-gs-process-sample-data.html
クラスターはどのようにEMRのサービスエンドポイントと通信するか
NATゲートウェイがない環境でもEMRはクラスターの状態やジョブの処理状況を認識しています。
サブネット上に作成されたサービス通信用のENIを介してクラスターが管理されているためです。
https://docs.aws.amazon.com/ja_jp/emr/latest/ManagementGuide/emr-clusters-in-a-vpc.html#emr-vpc-private-subnet
参考: 当時のBlog Post
【新発表】- Amazon EMRクラスタをプライベートサブネットで起動
http://aws.typepad.com/aws_japan/2015/12/new-launch-amazon-emr-clusters-in-private-subnets.html
プライベートサブネットでは、EMRサービスがクラスタと通信するために使うENIに設定するセキュリティグループを指定することもできます。
以上です。
参考になれば幸いです。