我的 AWS Glue 作业或 AWS Glue 爬网程序失败,并显示“VPC S3 endpoint validation failed for SubnetId”(SubnetId 的 VPC S3 端点验证失败)错误。
简短描述
当以下条件成真时,您将收到“VPC S3 endpoint validation failed for SubnetId”(SubnetID 的 VPC S3 端点验证失败”)错误:
AWS Glue 在 AWS Glue 连接的子网中创建弹性网络接口,以连接到您的数据源和 Amazon S3。为弹性网络接口分配了子网内 IP 地址范围中的私有 IP 地址。由于没有公共 IP 地址,因此 AWS Glue 无法使用互联网直接连接到您的 VPC 中的数据源或者 Amazon S3。有关详细信息,请参阅设置数据存储的网络访问权限。
解决方法
将您的 AWS Glue 连接的子网配置为具有 Amazon S3 VPC 网关端点或路由表中的 NAT 网关的路由。有关详细信息,请参阅错误: 在 VPC 中找不到 subnetId 的 S3 端点或 NAT 网关。
如果 AWS Glue 作业必须访问公共互联网,请确认您为子网配置了 NAT 网关。
设置 S3 VPC 网关端点
完成下面的步骤:
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Endpoints(端点)。
- 选择 Create endpoint(创建端点)。
- 对于 Service name(服务名称),选择 com.amazonaws.us-east-1.s3。
**注意:**请将 us-east-1 替换为您的 AWS 区域。
- 在 Type(类型)列中,选择 Gateway(网关)。
- 对于 VPC,选择要在其中创建端点的 VPC。
**注意:**对于 Configure route tables(配置路由表),系统会自动添加到 S3 VPC 端点的路由。
- 对于 Policy(策略),保留默认选项 Full Access(完全访问权限)。
- 选择 Create endpoint(创建端点)。
有关详细信息,请参阅网关端点。
如果您使用基于资源的策略,请允许您的 AWS Glue 作业或爬网程序的 AWS Identity and Access Management (IAM) 角色访问所需的 S3 资源。
设置 NAT 网关
在设置 NAT 网关之前,必须分配弹性 IP 地址。
此外,您用于 AWS Glue 连接的 VPC 必须至少有一个公有子网。有关详细信息,请参阅示例: 具有 NAT 且服务器位于私有子网中的 VPC。
完成下面的步骤:
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 NAT gateways(NAT 网关)。
- 选择 Create NAT gateway(创建 NAT 网关)。
- 对于名称,输入要创建的网关的名称。
- 对于 Subnet(子网),选择在 AWS Glue 连接中指定的 VPC 中的公有子网。
- 对于 Connectivity type(连接类型),保留默认选项 Public(公共)。
- 选择 Create NAT gateway(创建 NAT 网关)。
设置网关后,修改与 AWS Glue 连接的子网关联的路由表。然后,向 NAT 网关添加路由。
完成下面的步骤:
- 在导航窗格中,选择 Route tables(路由表)。
- 选择与要修改的子网关联的路由表。
- 选择 Actions(操作),然后选择 Edit routes(编辑路由)。
- 在 Edit routes(编辑路由)页面中,选择 Add route(添加路由)。
- 配置新路由,以将所有子网流量发送到 NAT 网关:
对于目标,输入 0.0.0.0/0。
对于 Target(目标),选择 NAT gateway(NAT 网关),然后选择您的 NAT 网关。
- 选择 Save changes(保存更改)。
- 测试您的 AWS Glue 连接。
- 再次运行 AWS Glue 作业或 AWS Glue 爬网程序。