访问公网方案

适用于通过MaxCompute自定义函数(UDF)、Spark、MR、PyODPS/Mars访问处于公网中的目标IP或域名的场景。

适用范围

  • 支持的一级域名:aliyuncs.com、aliyun.com、amap.com、dingtalk.com、alicloudapi.com、cainiao.com、alicdn.com、taobao.com、alibaba.com、alipaydev.com、alibabadns.com。

  • 不支持配置IPv6地址,公网IP数量无限制。

  • 如果遇到某外部网络地址无法通过自动校验的问题,则需要删除该地址后重新提交。如仍有需要,可以通过提交工单,申请配置外部网络地址。具体操作请参见网络开通流程

操作步骤

步骤一:账号及项目准备

开通MaxCompute与目标服务间的网络连接前,需要确认以下两个条件。

  1. 创建MaxCompute项目。在湖仓一体场景中,建议设置MaxCompute项目的数据类型为Hive兼容类型。

  2. 如果需要访问位于VPC网络中的目标服务,请确保VPC所有者账号、访问MaxCompute项目的阿里云账号,以及目标服务环境或集群的管理员账号是同一个主账号或同在一个主账号下。

步骤二:通过项目管理编辑外部网络地址

对于常用的公网IP或域名(如aliyun.com),可以直接通过MaxCompute控制台的项目管理添加与删除:

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏,选择管理配置 > 项目管理

  3. 项目管理页面,单击目标项目操作列的管理

  4. 项目配置页面,选择参数配置页签。

  5. MaxCompute外部网络区域,单击编辑

    设置可用的MaxCompute外部网络地址。

  6. 单击提交

步骤三:访问公网地址

使用SQL自定义函数(UDF)、SparkMaxFrame任务访问公网时,需要添加以下配置。

其他类型的任务,请根据相应的任务类型调整配置信息。

SQL自定义函数(UDF)任务

  • 参数设置如下:

    --设置网络连接申请表单中配置的公网IP或域名、端口。即下方SQL语句要访问的公网IP或域名。
    --如果需要访问多个域名或端口,请使用英文逗号(,)分隔
    SET odps.internet.access.list=<ip_address:port|realm_name:port>;
    --执行SQL语句调用UDF。
    SELECT <UDF_name>("<http://ip_address|realm_name>");
  • ip_address:port | realm_name:port:必填。目标公网IP或域名、端口。

  • UDF_name:访问公网IP或域名的UDF。

  • 任务示例代码如下:

    package com.aliyun.odps.test.udf;
    import com.aliyun.odps.udf.UDF;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URL;
    public class <UDF_name> extends UDF {
        public String evaluate(String urlStr) throws IOException {
            URL url = new URL(urlStr);
            StringBuilder sb = new StringBuilder();
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()))) {
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append('\n');
                }
            }
            return sb.toString();
        }
    }
  • 执行:基于UDF示例代码创建的自定义函数名称为url_fetch,网络连接审核通过后,执行命令示例如下。

    SET odps.internet.access.list=www.aliyun.com:80;
    SELECT url_fetch("http://www.aliyun.com");

Spark on MaxCompute任务

参数设置:此配置项需加在Spark客户端的conf文件中或DataWorks提交Spark作业时的配置项中。

spark.hadoop.odps.cupid.smartnat.enable = true;
spark.hadoop.odps.cupid.internet.access.list=<ip_address:port>

MaxFrame任务

参数设置如下:

from maxframe import options
options.sql.settings = {
    "odps.internet.access.list": "<host>:80,<host>:443",
}

(可选)步骤四:添加白名单

如果用户服务端有访问控制,需要将MaxCompute访问公网方案的出口IP添加到用户服务白名单。无法通过自动校验的公网IP或域名需要按照如下步骤操作:

  1. 提交工单申请配置公网的IP或域名、端口的白名单。

  2. 表单中需要填写目标IP或域名、端口,如果需要访问多个域名或端口,请使用英文逗号(,)分隔。例如访问阿里云域名,需要提供的网络配置信息为www.aliyun.com:80;访问高德服务,需要提供的网络配置信息为restapi.amap.com:443,restapi.amap.com:80

  3. MaxCompute技术支持团队接收到提交的申请信息后,会进行审核并完成配置。确认处理完毕后(通常处理周期为3个工作日),即可继续执行后续步骤。若对审核结果有异议,可再次通过工单与我们沟通。