AWS - 无法从 SageMaker Studio 访问 RedShift 端点

AWS - Cannot access RedShift endpoint from the SageMaker Studio

问题

请告知如何解决问题。

问题

无法从 SageMaker studio 实例访问 RedShift 集群端点。

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('dsoaws.cw7xniw3gvef.us-east-2.redshift.amazonaws.com',5439))
if result == 0:
   print("Port is open")
else:
   print("Port is not open")
sock.close()
---

Port is not open

RedShift 集群

端点是 dsoaws.cw7xniw3gvef.us-east-2.redshift.amazonaws.com:5439/dsoaws

网络设置显示 VPC 是 vpc-5b123432,允许从 sg-56cb133e 访问。


SageMaker Studio

SageMaker Studio 实例在保存 VPC vpc-5b123432 中。但是,不确定 sg-56cb133e 是否实际附加到 SageMaker studio 实例。请告知如何确认 sg-56cb133e 是否附加到实例。

import json
import boto3
from botocore.exceptions import ClientError
from botocore.config import Config

config = Config(
   retries = {
      'max_attempts': 10,
      'mode': 'adaptive'
   }
)


iam = boto3.client('iam', config=config)
sts = boto3.client('sts')
redshift = boto3.client('redshift')
sm = boto3.client('sagemaker')
ec2 = boto3.client('ec2')

try:
    domain_id = sm.list_domains()['Domains'][0]['DomainId'] #['NotebookInstances'][0]['NotebookInstanceName']
    describe_domain_response = sm.describe_domain(DomainId=domain_id)
    vpc_id = describe_domain_response['VpcId']
    print(vpc_id)
    security_groups = ec2.describe_security_groups()['SecurityGroups']
    for security_group in security_groups:
        if vpc_id == security_group['VpcId']:
            security_group_id = security_group['GroupId']
    print(security_group_id)
except:
    pass
-----
vpc-5b123432
sg-56cb133e

安全组

IAM

IAM 角色 SageMaker 附加到 SageMaker Studio。

原因

没有使用 VPC Only sagemaker 部署,因为使用了板载快速入门。

修复

  1. 删除了 SageMaker Studio。 R
  2. 仅使用标准设置 + VPC 重新创建
  3. 添加了 NAT 并配置了路由表。

参考资料