通过 SSM 访问容器 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过 SSM 访问容器

亚马逊 SageMaker 允许您使用 S AWS ystems Manager (SSM) 安全地连接到部署模型的 Docker 容器以进行推理。这为您提供了对容器的 shell 级别访问权限,以便您可以调试容器内运行的进程,并使用 Amazon 记录命令和响应 CloudWatch。您还可以设置与托管容器的 ML 实例的 AWS PrivateLink 连接,以便通过 SSM 私下访问容器。

警告

启用 SSM 访问会影响端点的性能。我们建议在开发或测试端点中使用此功能,而不要在生产端点中使用。此外,还 SageMaker 会自动应用安全补丁,并在 10 分钟内替换或终止有故障的终端节点实例。但是,对于启用了 SSM 的生产变体的端点,安全补丁以及更换或终止有故障的端点实例会 SageMaker 延迟一天,以便您进行调试。

以下各节详细介绍了如何使用此功能。

允许列表

要使用此功能,您必须联系客户支持部门,并将您的账户列入允许列表。如果您的账户不允许 SSM 访问,则无法创建启用 SSM 访问的端点。

启用 SSM 访问

要为端点上的现有容器启用 SSM 访问,请使用新的端点配置更新端点,并将 EnableSSMAccess 参数设置为 true。下面的示例提供了一个端点配置示例。

{ "EndpointConfigName": "endpoint-config-name", "ProductionVariants": [ { "InitialInstanceCount": 1, "InitialVariantWeight": 1.0, "InstanceType": "ml.t2.medium", "ModelName": model-name, "VariantName": variant-name, "EnableSSMAccess": true, }, ] }

有关启用 SSM 访问的更多信息,请参阅 EnableSSMAccess

IAM 配置

端点 IAM 权限

如果您已为终端节点实例启用 SSM 访问权限,则在 SageMaker 启动终端节点实例时启动并管理 SSM 代理。要允许 SSM 代理与 SSM 服务通信,请将以下策略添加到端点运行所用的执行角色中。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

用户 IAM 权限

添加以下策略以授予 IAM 用户连接到 SSM 目标的 SSM 会话权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", "ssm:TerminateSession" ], "Resource": "*" } ] }

您可以使用以下策略限制 IAM 用户可以连接的端点。将斜体占位符文本替换为您自己的信息。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession", ], "Resource": [ "sagemaker-endpoint-arn" ] } ] }

如果您的终端节点在未连接到公共互联网的虚拟私有云 (VPC) 中运行,则可以使用 AWS PrivateLink 启用 SSM。 AWS PrivateLink 将您的终端节点实例、SSM 和 Amazon EC2 之间的所有网络流量限制到亚马逊网络。有关如何使用 AWS PrivateLink设置 SSM 访问的更多信息,请参阅为 Session Manager 设置 VPC 端点

使用 Amazon CloudWatch 日志进行登录

对于启用 SSM 访问的终端节点,您可以使用 Ama CloudWatch zon Logs 记录来自 SSM 代理的错误。有关如何使用日志记录错误的 CloudWatch 更多信息,请参阅记录会话活动。该日志可在端点日志组 /aws/sagemaker/endpoints/endpoint-name 下的 SSM 日志流 variant-name/ec2-instance-id/ssm 中找到。有关如何查看日志的更多信息,请参阅查看发送到日志的 CloudWatch 日志数据

端点后面的生产变体可以有多个模型容器。每个模型容器的日志都记录在日志流中。每个日志前面都有 [sagemaker ssm logs][container-name],其中 container-name 可以是您为容器指定的名称,也可以是默认名称,例如 container_0container_1

访问模型容器

要访问端点实例上的模型容器,需要容器的目标 ID。目标 ID 采用以下格式之一:

  • sagemaker-endpoint:endpoint-name_variant-name_ec2-instance-id(适用于单个容器端点上的容器)

  • sagemaker-endpoint:endpoint-name_variant-name_ec2-instance-id_container-name(适用于多容器端点上的容器)

以下示例说明如何使用模型容器的 AWS CLI 目标 ID 访问模型容器。

aws ssm start-session --target sagemaker-endpoint:prod-image-classifier_variant1_i-003a121c1b21a90a9_container_1

如果启用日志记录(如使用 Amazon CloudWatch 日志进行登录中所述),则可以找到 SSM 日志流开头列出的所有容器的目标 ID。

注意
  • 您无法连接到 1P 算法容器或通过 SSM 获得的模型的容器。 SageMaker MarketPlace 不过,您可以连接到由 AWS 提供的深度学习容器 (DLC) 或您拥有的任何自定义容器。

  • 如果已为模型容器启用了网络隔离,使其无法进行出站网络调用,则无法为该容器启动 SSM 会话。

  • 您只能通过一个 SSM 会话访问一个容器。要访问另一个容器(即使它位于同一端点后面),请使用该端点的目标 ID 启动一个新的 SSM 会话。