Endpoint配置

更新时间:

当您在调用阿里云OpenAPI时,需要正确填入云产品的服务接入点(Endpoint)。例如,在创建资源时,应优先选择与业务物理位置最近的地域Endpoint,以降低网络延迟并提高响应速度。在进行查询、更新或删除资源时,必须选择资源所在地域的Endpoint,因为资源存储具有地域属性,跨地域操作可能导致访问失败或数据一致性风险。本文将为您介绍在Java(异步)SDK中如何配置Endpoint。

Endpoint类型

Endpoint主要分为两类:公网EndpointVPC Endpoint。当您的业务部署在VPC网络(例如ECS、ACK等)时,为了提高安全性并降低网络延迟,您可以选择使用VPC Endpoint。更多信息请参见服务接入点

Endpoint配置方式

支持三种配置方式,优先级为:通过RequestConfiguration配置->通过ClientOverrideConfiguration配置->通过AsyncClient配置。如何获取Endpoint,请参见附:Endpoint查找方式

方式一:通过RequestConfiguration配置

通过设置参数endpointOverride配置Endpoint。

RequestConfiguration requestConfiguration = RequestConfiguration.create()
        .setEndpointOverride("<ENDPOINT>");

配置完成后,可以通过OpenAPI请求对象设置RequestConfiguration。例如,在调用DescribeInstances接口时,可以通过DescribeInstancesRequest配置Endpoint:

DescribeInstancesRequest request = DescribeInstancesRequest.builder()
        .regionId("cn-hangzhou") // 接口请求参数
        .requestConfiguration(RequestConfiguration.create()
                .setEndpointOverride("ecs.cn-hangzhou.aliyuncs.com")) // endpoint
        .build();

方式二:通过ClientOverrideConfiguration配置

通过设置参数endpointOverride配置Endpoint。

ClientOverrideConfiguration clientOverrideConfiguration = ClientOverrideConfiguration.create()
        .setEndpointOverride("<ENDPOINT>"); // endpoint

配置完成之后,可以通过AsyncClient配置ClientOverrideConfiguration。

AsyncClient client = AsyncClient.builder()
                .credentialsProvider(credentialProvider) // 凭据提供者,这里省略实现过程
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("<ENDPOINT>") // endpoint
                )
                .build();

方式三:通过AsyncClient配置

通过设置参数region,在未使用其他两种方式设置Endpoint的情况下,SDK底层将通过自动寻址的方式获取相应的Endpoint。

说明

当云产品不支持您所设置的RegionId时,则请求可能会报错,建议优先使用其他两种方式。

寻址逻辑如下:

在大多数云产品SDK中,定义了endpointMap。该endpointMap是多组RegionIdEndpoint之间的映射关系对象。例如,ECS SDK中的endpointMap内容如下:

{
    "ap-northeast-2-pop": "ecs.aliyuncs.com",
    "cn-beijing-finance-pop": "ecs.aliyuncs.com",
    "cn-beijing-gov-1": "ecs.aliyuncs.com",
    "cn-beijing-nu16-b01": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-edge-1": "ecs.cn-qingdao-nebula.aliyuncs.com",
    "cn-fujian": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-haidian-cm12-c01": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-hangzhou": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-hangzhou-bj-b01": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-hangzhou-finance": "ecs.aliyuncs.com",
    "cn-hangzhou-internal-prod-1": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-hangzhou-internal-test-1": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-hangzhou-internal-test-2": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-hangzhou-internal-test-3": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-hangzhou-test-306": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-hongkong-finance-pop": "ecs.aliyuncs.com",
    "cn-huhehaote-nebula-1": "ecs.cn-qingdao-nebula.aliyuncs.com",
    "cn-north-2-gov-1": "ecs.aliyuncs.com",
    "cn-shanghai-et15-b01": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-shanghai-et2-b01": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-shanghai-finance-1": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-shanghai-inner": "ecs.aliyuncs.com",
    "cn-shanghai-internal-test-1": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-shenzhen-finance-1": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-shenzhen-inner": "ecs.aliyuncs.com",
    "cn-shenzhen-st4-d01": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-shenzhen-su18-b01": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-wuhan": "ecs.aliyuncs.com",
    "cn-yushanfang": "ecs.aliyuncs.com",
    "cn-zhangbei": "ecs.aliyuncs.com",
    "cn-zhangbei-na61-b01": "ecs-cn-hangzhou.aliyuncs.com",
    "cn-zhangjiakou-na62-a01": "ecs.cn-zhangjiakou.aliyuncs.com",
    "cn-zhengzhou-nebula-1": "ecs.cn-qingdao-nebula.aliyuncs.com",
    "eu-west-1-oxs": "ecs.cn-shenzhen-cloudstone.aliyuncs.com",
    "rus-west-1-pop": "ecs.aliyuncs.com"
}
  1. 判断是否存在endpointMap,若不存在,则根据拼接规则自动拼接Endpoint。

  2. endpointMap存在且包含该RegionId时,则Endpoint为该RegionId对应的值。

  3. endpointMap不存在该RegionId时,则根据拼接规则自动拼接Endpoint。

拼接规则如下:

  • 区域化部署产品:<PRODUCT_CODE><ENDPOINT_TYPE>.<REGION_ID>.aliyuncs.com

  • 中心化部署产品:<PRODUCT_CODE><ENDPOINT_TYPE>.aliyuncs.com

其中<PRODUCT_CODE>由所使用的云产品SDK确定,<ENDPOINT_TYPE>用于区分公网EndpointVPC Endpoint。

AsyncClient client = AsyncClient.builder()
        .credentialsProvider(credentialProvider) // 凭据提供者,这里省略实现过程
        .region("<REGION_ID>")
        .overrideConfiguration(
                ClientOverrideConfiguration.create()
                        // 若获取RegionId对应的VPC Endpoint请配置该参数,值为vpc,默认情况获取公网Endpoint。
                        .setEndpointType("vpc")
        )
        .build();

附:Endpoint查找方式

产品的Endpoint可以通过在OpenAPI门户上寻找:

  1. 在门户顶部菜单选择云产品,例如ECS:

image.png

2. 在云产品主页找到服务区域列表

image.png

3. 选择相应RegionId所对应的Endpoint,进行复制粘贴即可。

还可以在API调试界面,在左侧栏单击服务区域,查看云产品支持的Endpoint。

image