启动集群时的 Amazon VPC 选项
在 VPC 中启动 Amazon EMR 集群时,您可以在公有子网、私有子网或共享子网中启动它。配置上存在少量但明显的区别,具体取决于您为集群选择的子网类型。
公有子网
公有子网中的 EMR 集群需要已连接的 Internet 网关。这是因为 Amazon EMR 集群必须访问AWS服务和 Amazon EMR。如果可利用某项服务(如 Amazon S3)创建 VPC 终端节点,则可使用该终端节点访问这些服务,而不是通过互联网网关访问公有终端节点。此外,Amazon EMR 无法通过网络地址转换(NAT)设备与公有子网中的集群通信。为此,需要一个 Internet 网关,但您仍可在更复杂的场景中为其它流量使用 NAT 实例或网关。
集群中的所有实例都通过 VPC 终端节点或互联网网关连接到 Amazon S3。目前不支持 VPC 终端节点的其它AWS服务仅使用互联网网关。
如果您不希望其它AWS资源连接到互联网网关,则可以在 VPC 内创建的私有子网中启动这些组件。
在公有子网中运行的集群将使用两个安全组:一个用于主节点,另一个用于核心节点和任务节点。有关更多信息,请参阅 使用 Amazon EMR 集群的安全组控制网络流量。
下图说明 Amazon EMR 集群如何在带公有子网的 VPC 中运行。该集群能够通过互联网网关连接到其它AWS资源,如 Amazon S3 存储桶。
下图演示如何设置 VPC,以便 VPC 中的集群可以访问您自己的网络中的资源 (如 Oracle 数据库)。
私有子网
借助私有子网,无需挂载互联网网关的子网也可启动AWS资源。Amazon EMR 支持在发行版本 4.2.0 及更高版本的私有子网中启动集群。
注意
当您在私有子网中设置 Amazon EMR 集群时,我们建议您也为 Amazon S3 设置 VPC 端点。如果您的 EMR集群处于没有适用于 Amazon S3 的 VPC 端点的私有子网中,则您需要为与 S3 流量关联的其他 NAT 网关付费,因为您的 EMR 集群与 S3 之间的流量不是位于您的 VPC 内。
私有子网与公有子网的区别在以下方面:
-
要访问未提供 VPC 终端节点的AWS服务,您仍必须使用 NAT 实例或互联网网关。
-
您至少必须在 Amazon S3 中提供到 Amazon EMR 服务日志存储桶和 Amazon Linux 存储库的路由。有关更多信息,请参阅访问 Amazon S3 的私有子网的示例策略。
-
如果您使用 EMRFS 功能,则需要有一个 Amazon S3 VPC 终端节点和一个从私有子网到 DynamoDB 的路由。
-
调试仅在您提供一个从私有子网到公有 Amazon SQS 终端节点的情况下起作用。
-
仅支持使用AWS Management Console在公有子网中通过 NAT 实例或网关创建私有子网配置。为 EMR 集群添加和配置 NAT 实例和 Amazon S3 VPC 终端节点的最简单方法是,使用 Amazon EMR 控制台中的 VPC Subnets List (VPC 子网列表) 页面。要配置 NAT 网关,请参阅《Amazon VPC 用户指南》中的 NAT 网关。
-
您无法利用现有 Amazon EMR 集群将子网从公有子网更改为私有子网,反之亦然。要在私有子网中找到 Amazon EMR 集群,则必须在私有子网中启动该集群。
Amazon EMR 为私有子网中的集群创建并使用不同的默认安全组:ElasticMapReduce-Master-Private、ElasticMapReduce-Slave-Private、and ElasticMapReduce-ServiceAccess。有关更多信息,请参阅 使用 Amazon EMR 集群的安全组控制网络流量。
有关您的集群的 NACL 的完整列表,请选择 Amazon EMR 控制台的 Cluster Details(集群详细信息)页面上的 Security groups for Primary(主节点的安全组)和 Security groups for Core & Task(核心与任务节点的安全组)。
下图说明如何在私有子网中配置 Amazon EMR 集群。子网外部的唯一通信是到 Amazon EMR 的通信。
下图显示已连接到公有子网中的 NAT 实例的私有子网中的 Amazon EMR 集群的示例配置。
共享子网
VPC 共享允许客户与同一AWS组织内的其它AWS账户共享子网。您可以将 Amazon EMR 集群启动到公有共享子网和私有共享子网中,但需要注意以下几点。
子网拥有者必须与您共享一个子网才能在其中启动 Amazon EMR 集群。但是,共享子网稍后可以取消共享。有关更多信息,请参阅使用共享 VPC。当某个集群启动到共享子网并且该共享子网随后取消共享时,您可以在子网取消共享时根据 Amazon EMR 集群状态观察特定行为。
-
在集群成功启动之前,子网未取消共享 - 如果拥有者在参与者启动集群时停止共享 Amazon VPC 或子网,则集群可能无法启动或部分初始化,而无需预置请求的所有实例。
-
集群成功启动之后,子网未取消共享 - 当拥有者停止与参与者共享子网或 Amazon VPC 时,参与者的集群将无法调整大小以添加新实例或替换不健康的实例。
当您启动一个 Amazon EMR 集群时,系统会创建多个安全组。在共享子网中,子网参与者控制这些安全组。子网拥有者可以看到这些安全组,但不能对其执行任何操作。如果子网拥有者想要删除或修改安全组,则创建安全组的参与者必须执行该操作。
使用 IAM 控制 VPC 权限
默认情况下,所有 用户都可以查看该账户的所有子网,且任何用户都可以在任何子网中启动集群。
当您在 VPC 中启动集群时,可以使用 AWS Identity and Access Management(IAM)控制集群的访问权限,并使用策略限制操作,就像您操作在 Amazon EC2 Classic 中启动的集群一样。有关 IAM 的更多信息,请参阅 IAM 用户指南。
您还可以使用 IAM 控制可以创建和管理子网的人员。例如,您可以创建一个 IAM 角色来管理子网,再创建第二个角色来启动集群,但无法修改 Amazon VPC 设置。有关在 Amazon EC2 和 Amazon VPC 中管理策略和操作的更多信息,请参阅《Amazon EC2 用户指南》中的适用于 Amazon EC2 的 IAM 策略。