Endpoint配置
当您在调用阿里云OpenAPI时,需要正确填入云产品的服务接入点(Endpoint)。例如,在创建资源时,应优先选择与业务物理位置最近的地域Endpoint,以降低网络延迟并提高响应速度。在进行查询、更新或删除资源时,必须选择资源所在地域的Endpoint,因为资源存储具有地域属性,跨地域操作可能导致访问失败或数据一致性风险。本文将为您介绍在Java(异步)SDK中如何配置Endpoint。
Endpoint类型
Endpoint主要分为两类:公网Endpoint和VPC 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是多组RegionId与Endpoint之间的映射关系对象。例如,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"
}判断是否存在endpointMap,若不存在,则根据拼接规则自动拼接Endpoint。
当endpointMap存在且包含该RegionId时,则Endpoint为该RegionId对应的值。
若endpointMap不存在该RegionId时,则根据拼接规则自动拼接Endpoint。
拼接规则如下:
区域化部署产品:
<PRODUCT_CODE><ENDPOINT_TYPE>.<REGION_ID>.aliyuncs.com中心化部署产品:
<PRODUCT_CODE><ENDPOINT_TYPE>.aliyuncs.com
其中<PRODUCT_CODE>由所使用的云产品SDK确定,<ENDPOINT_TYPE>用于区分公网Endpoint与VPC Endpoint。
AsyncClient client = AsyncClient.builder()
.credentialsProvider(credentialProvider) // 凭据提供者,这里省略实现过程
.region("<REGION_ID>")
.overrideConfiguration(
ClientOverrideConfiguration.create()
// 若获取RegionId对应的VPC Endpoint请配置该参数,值为vpc,默认情况获取公网Endpoint。
.setEndpointType("vpc")
)
.build();附:Endpoint查找方式
产品的Endpoint可以通过在OpenAPI门户上寻找:
在门户顶部菜单选择云产品,例如ECS:

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

3. 选择相应RegionId所对应的Endpoint,进行复制粘贴即可。
还可以在API调试界面,在左侧栏单击服务区域,查看云产品支持的Endpoint。
