本教程详细介绍如何使用Alibaba Cloud SDK for Java创建专有网络VPC及其交换机、NAT网关。
前提条件
在使用本教程前,请确保已完成以下操作:
- 使用Alibaba Cloud SDK for Java,您需要一个阿里云账号和访问密钥(AccessKey)。 请在阿里云控制台中的AccessKey管理页面上创建和查看您的AccessKey。
- 确保您已经安装了Alibaba Cloud SDK for Java,准确的SDK版本号,请参见 阿里云开发工具包(SDK)。
<dependencies> <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-core --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.4.5</version> </dependency> <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-vpc --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-vpc</artifactId> <version>3.0.6</version> </dependency> </dependencies>
代码示例
本文操作示例主要以代码形式体现,具体代码如下:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vpc.model.v20160428.*;
import com.google.gson.Gson;
import java.util.UUID;
/**
* CreateVpc 创建一个专有网络(VPC)
* CreateVSwitch 创建一个交换机
* CreateNatGateway 创建一个NAT网关
*/
public class Demo {
public static void main(String[] args) {
// 初始化公共请求参数
IAcsClient client = initialization();
// 创建一个专有网络VPC
CreateVpcResponse createVpcResponse = createVpc(client);
// 获取到新创建的专有网络VPC实例的VpcId
String vpcId = createVpcResponse.getVpcId();
// 创建交换机
createVSwitch(client, vpcId);
// 创建NAT网关
createNatGateway(client, vpcId);
}
/**
* CreateNatGateway 创建一个NAT网关
*/
private static void createNatGateway(IAcsClient client, String vpcId) {
CreateNatGatewayRequest request = new CreateNatGatewayRequest();
// VPC的ID
request.setVpcId(vpcId);
// NAT网关的名称
// 名称在\2,128个字符之间,必须以英文字母或中文开头,不能以 http:// 和 https:// 开头,可包含数字,“.”,“_”或“-”
// 如果没有指定该参数,默认使用网关ID
request.setName("TestNat");
// NAT网关的规格。取值:
//
// Small(默认值):小型
// Middle:中型
// Large:大型
// XLarge.1:超大型
request.setSpec("Small");
// NAT网关的描述
// 描述在2-256个字符之间,不能以 http:// 和 https:// 开头
request.setDescription("This is a test program.");
// 用于保证请求的幂等性。由客户端生成该参数值,要保证在不同请求间唯一,最大值不超过 64 个 ASCII 字符
request.setClientToken(UUID.randomUUID().toString());
try {
CreateNatGatewayResponse response = client.getAcsResponse(request);
System.out.println("------------------createNatGateway-------------------");
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* CreateVSwitch 创建一个交换机
*/
private static void createVSwitch(IAcsClient client, String vpcId) {
CreateVSwitchRequest request = new CreateVSwitchRequest();
// 交换机所属的VPC ID
request.setVpcId(vpcId);
// 交换机的网段。交换机网段要求如下:
//
// 交换机网段的掩码长度范围为16-29位
// 交换机的网段必须从属于所在VPC的网段
// 交换机的网段不能与所在VPC中路由条目的目标网段相同,但可以是目标网段的子集
// 如果交换机的网段与所在VPC的网段相同时,VPC只能有一个交换机
request.setCidrBlock("172.16.0.0/24");
// 交换机所属区的ID
// 您可以通过调用DescribeZones接口获取地域ID
request.setZoneId("cn-shanghai-b");
// 交换机的描述信息
// 长度为 2-256个字符,必须以字母或中文开头,但不能以http:// 或https://开头
request.setDescription("This is a test program.");
// 交换机的名称
// 长度为 2-128个字符,必须以字母或中文开头,但不能以http:// 或https://开头
request.setVSwitchName("TestVSwitch");
// 客户端token,用于保证请求的幂等性
// 由客户端生成该参数值,要保证在不同请求间唯一,最大不值过64个 ASCII 字符
request.setClientToken(UUID.randomUUID().toString());
try {
CreateVSwitchResponse response = client.getAcsResponse(request);
System.out.println("------------------createVSwitch-------------------");
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* CreateVpc 创建一个专有网络(VPC)
*/
private static CreateVpcResponse createVpc(IAcsClient client) {
CreateVpcRequest request = new CreateVpcRequest();
// VPC的名称
// 长度为2-128个字符,必须以字母或中文开头,可包含数字,点号(.),下划线(_)和短横线(-),但不能以http:// 或https://开头
request.setVpcName("TestVpc");
// VPC的网段。您可以使用以下网段或其子集:
//
// 10.0.0.0/8
// 172.16.0.0/12(默认值)
// 192.168.0.0/16
request.setCidrBlock("172.16.0.0/12");
// 客户端token,用于保证请求的幂等性。由客户端生成该参数值,要保证在不同请求间唯一,最大值不超过64个ASCII字符
request.setClientToken(UUID.randomUUID().toString());
// VPC的描述信息。长度为2-256个字符,必须以字母或中文开头,但不能以http://或https://开头
request.setDescription("This is a test program.");
// 是否开启IPv6网段,取值:
//
// false(默认值):不开启
// true:开启
request.setEnableIpv6(false);
/*
* 用户侧网络的网段,如需定义多个网段请使用半角逗号隔开,最多支持3个网段
*
* VPC定义的默认私网转发网段为10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、100.64.0.0/10和VPC CIDR网段。
* 如果ECS实例或弹性网卡已经具备了公网访问能力(ECS实例分配了固定公网IP、ECS实例或弹性网卡绑定了公网IP、ECS实
* 例或弹性网卡设置了DNAT IP映射规则),这类资源访问非上述默认私网转发网段的请求均会通过公网IP直接转发至公网。
* 当希望按照路由表在私网(如VPC内、通过VPN/高速通道/云企业网搭建的混合云网络)转发访问非上述默认私网网段的请求
* 时,需要将网络请求的目的网段设置为ECS或弹性网卡所在VPC的UserCidr。为VPC设置UserCidr后,该VPC中访问UserCidr
* 地址的请求将按照路由表进行转发,而不通过公网IP转发。
*/
request.setUserCidr("189.16.0.0/12");
try {
CreateVpcResponse response = client.getAcsResponse(request);
System.out.println("------------------createVpc-------------------");
System.out.println(new Gson().toJson(response));
return response;
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
throw new RuntimeException(e);
}
return null;
}
/**
* Initialization 初始化公共请求参数
*/
private static IAcsClient initialization() {
// 初始化请求参数
DefaultProfile profile = DefaultProfile.getProfile(
"<your-region-id>", // 您的可用区ID
"<your-access-key-id>", // 您的AccessKey ID
"<your-access-key-secret>"); // 您的AccessKey Secret
return new DefaultAcsClient(profile);
}
}
执行结果
正确的执行结果类似如下:
------------------createVpc-------------------
{
"requestId": "6BE1C6F6-8A0F-47AC-81FB-FAB894D1C591",
"vpcId": "vpc-uf66uio7md****",
"vRouterId": "vrt-uf64cqu16****",
"routeTableId": "vtb-uf6b6****",
"resourceGroupId": "rg-acfmxazb4ph6aiy"
}
------------------createVSwitch-------------------
{
"requestId": "5DAA80CC-667C-470A-882C-ED585659976A",
"vSwitchId": "vsw-uf6xl****"
}
------------------createNatGateway-------------------
{
"requestId": "93DE9ED0-DB34-4E0B-99AD-C21CBB3B6DE4",
"natGatewayId": "ngw-uf64hax****",
"forwardTableIds": [
"ftb-uf6s9ke1s****"
],
"snatTableIds": [
"stb-uf6q99f5****"
],
"bandwidthPackageIds": []
}
在文档使用中是否遇到以下问题
更多建议
匿名提交