为 Amazon EMR Studio 设置 Amazon EMR on EKS - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为 Amazon EMR Studio 设置 Amazon EMR on EKS

Amazon EMR on EKS 托管式终端节点功能为预览版,随时可能更改。该功能作为 Amazon 服务条款中定义的预览服务提供。

关于适用于 EMR Studio 的Amazon EMR on EKS 集群

Amazon EMR Studio 与 Amazon EMR on EKS 配合使用,以便 Studio 用户可以将笔记本代码提交到 Amazon Elastic Kubernetes Service (EKS)。要向 Studio 用户提供对 EKS 集群的访问权限,您必须首先使用 Amazon EMR on EKS 创建一个虚拟集群。创建虚拟集群后,您必须创建一个或多个托管式终端节点,Studio 用户可以将 Workspace 连接到这些终端节点。有关 Amazon EMR on EKS 的更多信息,请参阅 Amazon EMR on EKS 开发指南

以下先决条件共同作用,让 Studio 用户将任务提交到 Amazon EMR on EKS:

Amazon EMR on EKS 虚拟集群

虚拟集群是 EKS 集群上 Kubernetes 命名空间的注册句柄,由 Amazon EMR on EKS 管理。该句柄允许 Amazon EMR 使用 Kubernetes 命名空间作为运行任务和终端节点的目标。EMR Studio 用户界面将虚拟集群称为 EMR on EKS 集群。

Amazon EMR on EKS 托管式终端节点

在为 Amazon EMR on EKS 创建虚拟集群后,您必须设置一个或多个托管 Jupyter Enterprise Gateway 终端节点,Studio 用户可以将 Workspace 连接到这些终端节点。这些 HTTPS 终端节点可通过您的 EMR Studio 访问,并在 EKS 集群的 Amazon Virtual Private Cloud 的私有子网中创建。

Python 和 PySpark 内核使用在您的 Amazon EMR on EKS 任务执行角色中定义的权限来调用其他 Amazon 服务。连接到托管式终端节点的所有内核和用户都使用相同的角色。我们建议为不应共享相同 IAM 角色的不同用户创建单独的终端节点。有关更多信息,请参阅《Amazon EMR on EKS 开发人员指南》中的更新 IAM 角色中的信任策略以执行任务

Amazon Load Balancer Controller

Amazon Load Balancer Controller(旧称 Amazon ALB Ingress Controller)为您创建的每个托管式终端节点创建一个 Application Load Balancer (ALB)。ALB 平衡 Kubernetes Pod 之间的应用程序流量。每个 ALB 都支持 HTTPS,并在其 VPC 中使用私有 IP 地址。您只需为每个 EKS 集群设置一个 Amazon Load Balancer Controller。有关创建 ALB 的说明和更多信息,请参阅 Amazon Load Balancer Controller。有关负载均衡的更多通用信息,请参阅 Amazon EKS 上的应用程序负载均衡

当您为 EMR Studio 设置托管式终端节点时,Amazon EMR on EKS 会创建两个默认安全组来控制入站流量并帮助确保只有您的 EMR Studio 可以与 ALB 通信。当您删除托管式终端节点时,EMR on EKS 会删除 ALB 和默认安全组。

警告

Amazon EMR on EKS 为您创建的每个托管式终端节点预置的负载均衡器会产生额外费用。

Amazon Certificate Manager (ACM) 证书

Amazon Load Balancer Controller 使用的 TLS 证书,用于启用与终端节点的 Application Load Balancer 的安全 HTTPS 通信。您可以在创建托管式终端节点时指定此证书。

Prerequisites

在为 Amazon EMR Studio 设置 Amazon EMR on EKS 之前,您必须具备以下各项:

  • 为 EMR Studio 指定的 Amazon Certificate Manager (ACM) 证书。您可以在创建证书时指定任何域名。有关如何创建证书的信息,请参阅《Amazon Certificate Manager 用户指南》中的发布和管理证书。注意证书的 Amazon Resource Name (ARN)。您可以在创建托管式终端节点时使用 ARN 设置 IAM 权限。

  • 确保您的 IAM 实体(用户或角色)具有以下 Amazon EC2 权限。这些权限使 Amazon EMR on EKS 能够创建、管理和删除将入站流量限制到托管式终端节点负载均衡器的安全组。

    "ec2:CreateSecurityGroup", "ec2:DeleteSecurityGroup", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:DeleteSecurityGroup"

    您还必须允许 acm:DescribeCertificate 操作,以便实体有权限检索 ACM 证书及其元数据。将以下示例 IAM 策略语句中的 arn:aws:acm:<region>:<account-id>:certificate/<certificate-id> 替换为您的 ACM 证书的 ARN。

    "Statement": [ { "Effect": "Allow", "Action": "acm:DescribeCertificate", "Resource": "<arn:aws:acm:region:account-id:certificate/certificate-id>" } ]
  • 您想要向 Amazon EMR on EKS 注册为虚拟集群的 Amazon EKS 集群。您的集群应该与 Studio 位于同一个 Amazon Virtual Private Cloud 中,并且必须至少有一个私有子网才能启用托管式终端节点和链接基于 Git 的存储库。有关 EKS 集群的更多信息,请参阅创建 Amazon EKS 集群

    注意
    • 您的 EMR Studio 和用于注册虚拟集群的 Amazon EKS 集群之间必须至少有一个私有子网。否则,您的托管式终端节点将不会作为选项显示在 Studio Workspaces 中。您可以创建 Amazon EKS 集群并将其与属于您的 Studio 的子网相关联。或者,您可以创建 Studio 并指定 EKS 集群的私有子网。

    • EMR on EKS 托管终端节点不支持针对 Amazon EKS 优化的 Arm Amazon Linux AMI

    • 当您使用仅限 Amazon Fargate的 Amazon EKS 集群时,EMR Studio 不支持 Amazon EMR on EKS。

  • 适用于 Amazon EKS 集群的 Amazon Load Balancer Controller。您只需为每个 EKS 集群设置一个 Amazon Load Balancer Controller。

  • Amazon EMR on EKS 的任务执行 IAM 角色的 Amazon Resource Name (ARN)。有关更多信息,请参阅更新 IAM 角色中的信任策略以执行任务。如果您从未使用过 Amazon EMR on EKS,则可以检索 步骤 1:创建虚拟集群 中的任务执行角色 ARN。

步骤 1:创建虚拟集群

在创建托管式终端节点之前,您必须使用 Amazon EMR on EKS 创建虚拟集群。

如果您... 请执行此操作...
从未使用过 Amazon EMR on EKS 按照设置中的步骤配置 Amazon EMR on EKS 并创建虚拟集群。请确保记下任务执行 IAM 角色的 ARN 和虚拟集群 ID。
之前设置过 Amazon EMR on EKS 按照创建虚拟集群中的步骤向 EMR on EKS 注册您的 Amazon EKS 集群。请确保记下您的虚拟集群 ID。

有关虚拟集群的更多信息,请参阅《Amazon EMR on EKS 开发指南》中的虚拟集群主题。

步骤 2:为您的虚拟集群创建托管式终端节点

使用 emr-containers create-managed-endpoint 命令创建托管式终端节点。为以下选项指定值:

  • --type – 使用 JUPYTER_ENTERPRISE_GATEWAY

  • --virtual-cluster-id – 您向 EMR on EKS 注册的虚拟集群的 ID。

  • --name – 托管式终端节点的描述性名称,可帮助 EMR Studio 用户从列表中选择它。

  • --execution-role-arn – EMR on EKS 的任务执行 IAM 角色的 Amazon Resource Name (ARN)。

  • --release-label – 创建终端节点时要使用的 Amazon EMR 版本的发行版标签。Amazon EMR on EKS 目前支持使用以下 Amazon EMR 发行版标签创建托管式终端节点:5.32.0、emr-6.2.0-latest。

  • --certificate-arn – 您要与负载均衡器关联以启用 HTTPS 通信的 Amazon Certificate Manager 证书的 Amazon Resource Name (ARN)。

aws emr-containers create-managed-endpoint \ --type JUPYTER_ENTERPRISE_GATEWAY \ --virtual-cluster-id <0b0qvauoy3ch1nqodxxxxxxxx> \ --name <example-endpoint-name> \ --execution-role-arn arn:aws:iam::<aws-account-id>:role/<EKSClusterRole> \ --release-label <emr-6.2.0-latest> --certificate-arn <arn:aws:acm:region:123xxxxxxxxx:certificate/12345678-xxxx-xxxx-xxxx-123456789012>
注意

emr-containers 是用于在 Amazon CLI 上下文中描述 Amazon EMR on EKS 的名称。

您应该参阅终端中的以下输出。输出包括新的托管式终端节点名称和 ID。

{ "arn": "arn:aws:emr-containers:us-west-2:061xxxxxxxxx:/virtualclusters/0b0qvauoy3ch1nqodxxxxxxxx/endpoints/8gai4l4exxxxx", "name": "example-endpoint-name", "virtualClusterId": "0b0qvauoy3ch1nqodxxxxxxxx", "id": "8gai4l4exxxxx" }

获取托管式终端节点的详细信息

创建托管式终端节点后,您可以使用 describe-managed-endpoint Amazon CLI 命令检索其详细信息。为 <managed-endpoint-id><virtual-cluster-id> 插入您自己的值。

aws emr-containers describe-managed-endpoint --id <managed-endpoint-id> --virtual-cluster-id <virtual-cluster-id>

该命令返回有关指定终端节点的详细信息,例如 ARN、ID 和名称。

{ "endpoint": { "arn": "arn:aws:emr-containers:us-west-2:061xxxxxxxxx:/virtualclusters/0b0qvauoy3ch1nqodxxxxxxxx/endpoints/8gai4l4exxxxx", "certificateArn": "arn:aws:acm:region:123xxxxxxxxx:certificate/12345678-xxxx-xxxx-xxxx-123456789012", "configurationOverrides": { "applicationConfiguration": [ { "classification": "string", "configurations": [ "Configuration" ], "properties": { "string" : "string" } } ], "monitoringConfiguration": { "cloudWatchMonitoringConfiguration": { "logGroupName": "string", "logStreamNamePrefix": "string" }, "persistentAppUI": "string", "s3MonitoringConfiguration": { "logUri": "string" } } }, "createdAt": number, "executionRoleArn": "string", "id": "8gai4l4exxxxx", "name": "example-endpoint-name", "releaseLabel": "emr-6.2.0", "securityGroup": "string", "serverUrl": "string", "state": "string", "subnetIds": [ "string" ], "tags": { "string" : "string" }, "type": "string", "virtualClusterId": "0b0qvauoy3ch1nqodxxxxxxxx" } }

列出与虚拟集群关联的所有托管式终端节点

使用 list-managed-endpoints Amazon CLI 命令获取与指定虚拟集群关联的所有托管式终端节点的列表。将 <virtual-cluster-id> 替换为您的虚拟集群的 ID。

aws emr-containers list-managed-endpoints --virtual-cluster-id <virtual-cluster-id>

删除托管式终端节点

要删除与 Amazon EMR on EKS 虚拟集群关联的托管式终端节点,请使用 delete-managed-endpoint Amazon CLI 命令。当您删除托管式终端节点时,Amazon EMR on EKS 会删除为该终端节点创建的默认安全组。为以下选项指定值:

  • --id – 要删除的托管式终端节点的 ID。

  • --virtual-cluster-id – 与要删除的托管式终端节点关联的虚拟集群的 ID。这与创建托管式终端节点时指定的虚拟集群 ID 相同。

aws emr-containers delete-managed-endpoint --id <managed-endpoint-id> --virtual-cluster-id <virtual-cluster-id>

该命令返回类似于以下示例的输出以确认托管式终端节点已被删除。

{ "id":"8gai4l4exxxxx", "virtualClusterId":"0b0qvauoy3ch1nqodxxxxxxxx" }