プライベートサブネットでAmazon EMRクラスタを起動する
先日、Amazon EMRをプライベートサブネットで起動できるようになりました。今回はその詳細と手順について紹介したいと思います。
Launch Amazon EMR Clusters in Amazon VPC Private Subnets
AWS上でシステムを構築する際にDBやバッチサーバーはプライベートサブネット上に構築することが多いかと思います。EMRクラスタについては今までは専用のセキュリティグループが作成されてはいましたが、パブリックサブネット上に構築する必要がありました。今回のアップデートでEMRクラスタについてもプライベートサブネットで構築することが出来るようになり、よりセキュアにEMRを利用できるようになっています。
今回のアップデートのポイントは以下の通りです。
- EMRクラスタ起動時にプライベートサブネットを選択可能になった。なお、この機能を利用できるのはEMR release 4.2.0以降のみ。それ以前のバージョンの場合はクラスタの起動に失敗する。
- プライベートサブネットから外部と接続する際はS3エンドポイントとNATインスタンスを利用する。そのため、VPCサブネットの一覧画面が追加され、状況が一目で確認できるようになった。
- プライベートサブネットにS3エンドポイントとNATインスタンスを作成する機能が追加された。VPCサブネット画面とEMRクラスタ起動画面のどちらかでも作成できるようになっている。
VPCサブネット画面
まずは[VPC サブネット]画面について紹介します。この画面は今回のアップデートで新規に追加された画面です。マネジメントコンソールでEMRサービスの画面を開き左上の[Elastic MapReduce]メニューをクリックして[VPCサブネット]をクリックすると表示されます。
左上の[ネットワーク]のプルダウンでVPC単位のサブネットの一覧が表示されるようになっています。また、[タイプ]列でそのサブネットがパブリックなのかプライベートなのかが分かるようになっています。そして、プライベートの場合は右端の[設定]列に[S3 エンドポイントと NAT インスタンスの追加]というリンクがあり、このリンクをクリックするとS3エンドポイントとNATインスタンスを作成することが出来ます。
では、実際に作成してみたいと思います。[S3 エンドポイントと NAT インスタンスの追加]リンクをクリックします。クリックすると[サブネットの設定]画面が表示されます。
この画面を見ると分かるようにNATインスタンスを作成するかは任意となっています。EMRクラスタでS3のみを利用する際はS3エンドポイントのみ作成します。インターネット経由でアクセスしたり、KinesisやDynamoDBのようなVPCエンドポイントがまだ実装されていないサービスと連携する際はNATインスタンスを作成します。
では、右下の[設定]ボタンをクリックしましょう。進捗状況が表示されます。
数分でS3エンドポイントとNATインスタンスの作成が完了し、[VPC サブネット]画面が表示されます。そして構築対象として選択したプライベートサブネットの[S3 エンドポイント]列と[NAT インスタンス]列にそれぞれのIDが表示され[設定]列のリンクが消えていることが分かります。なお、今回はmy-subnet-pri-aに対してS3エンドポイントとNATインスタンスを作成しましたが、my-subnet-pri-cについても同じS3エンドポイントとNATインスタンスが作成されています。これは同じVPCのルートテーブルを利用しているためです。
以上でS3エンドポイントとNATインスタンスを作成が完了しました。S3エンドポイントに関してはVPCサービスの画面で確認できます。NATインスタンスについてはEC2サービスの画面で確認できます。なお、NATインスタンスについてはCloudFormationを利用して作成するようになっていました。そのため、VPCサブネット画面で作成したS3エンドポイントとNATインスタンスを削除する際はそれぞれ以下のようにすればよいようです。
- S3エンドポイント: VPCサービスの画面から削除
- NATインスタンス: CloudFormationサービスの画面からStackを削除。
EMRクラスタの作成
S3エンドポイントとNATインスタンスが存在する状態のプライベートサブネットでEMRクラスタを作成します。プライベートサブネットを利用するには[クラスターの作成]画面で[詳細オプションに移動する]をクリックする必要があります。
[ステップ1: ソフトウェアおよびステップ]の画面では[リリース]をemr-4.2.0として下さい。これより過去のバージョンを選択するとクラスターの起動に失敗します。
[ステップ:2 ハードウェア]において、[EC2 サブネット]のプルダウンと開くと、サブネットがプライベートとパプリックでグルーピングされた状態で表示されるようになっています。ここでプライベートサブネットを選択するとEMRクラスタをプライベートサブネット上で起動することが出来ます。
なお、この時点でプライベートサブネットにS3エンドポイントが存在しない場合は[サブネットの設定]画面へのリンクが表示されるようになっています。
あとは通常の起動手順と差分はありません。インターネット経由でHueなどのWeb UIにアクセスする際は、追加で踏み台サーバーを構築して踏み台経由でアクセスすることになります。
合わせて読みたい
- Amazon Web Services ブログ: 【新発表】- Amazon EMRクラスタをプライベートサブネットで起動: プライベートサブネットで起動の紹介に合わせて、EMRにおけるセキュリティ全般について紹介しています。
- Securely Access Web Interfaces on Amazon EMR Launched in a Private Subnet - AWS Big Data Blog: プライベートサブネットで起動した際にVPNおよびインターネット経由でアクセスする方法について紹介しています。
- Select an Amazon VPC Subnet for the Cluster - Amazon Elastic MapReduce: EMRクラスタをパプリックサブネットとプライベートサブネットで起動する際の差分やセキュリティグループの設定について記述されています。なお、プライベートサブネットについてはまだ日本語の翻訳がされていないようなので英語で参照してください。
まとめ
S3エンドポイントとNATインスタンスを作成してくれるので非常に手軽ですね。なお、NATインスタンスを利用する際はインスタンスタイプによってネットワーキングパフォーマンスが異なりますので、その点についてはご注意下さい。