通过SDK使用ECI

弹性容器实例提供的SDK包括Go、Python和Java三个语言版本。本文以Java为例,介绍如何通过SDK创建一个ECI实例。

安装Java SDK

推荐您通过Apache Maven的方式来安装Java SDK,在Maven项目的pom.xml中添加以下依赖:

说明

如果之前已有VPC、交换机和安全组,无需通过SDK创建,则可以不安装专有网络aliyun-java-sdk-vpc、云服务器aliyun-java-sdk-ecs及fastjson依赖。

  • 阿里云核心库aliyun-java-sdk-core

  • 弹性容器实例aliyun-java-sdk-eci及gson依赖

  • (可选)专有网络aliyun-java-sdk-vpc

  • (可选)云服务器aliyun-java-sdk-ecs及fastjson依赖

示例如下:

重要

请及时更新各依赖的版本,以便使用新功能。具体请访问Maven

<dependencies>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <optional>true</optional>
            <version>4.6.3</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-eci</artifactId>
            <version>1.3.3</version>
        </dependency>
          <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-ecs</artifactId>
            <version>4.24.42</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.19</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-vpc</artifactId>
            <version>3.2.9</version>
        </dependency>
</dependencies>

以Java开发工具为IntelliJ IDEA为例,操作步骤如下:

  1. 打开IDEA,选择以下一种方式创建Maven项目。

    • 方式一:在IDEA中新建一个Maven项目

      1. 在顶部菜单栏,选择File>New>Project...

      2. 在弹出的对话框中选择Maven,并完成项目配置。

        sdk1
    • 方式二:将已有的项目转换为Maven项目

      1. 右键单击要转换的项目,在弹出菜单中选择Add Framework Support...

        sdk2
      2. 在弹出的对话框中选择Maven然后单击OK

        sdk3
  2. 打开Maven项目目录下的pom.xml文件,添加依赖。

    添加依赖后,Maven项目管理工具会自动下载相关jar包。

    sdk4

获取AccessKey信息

在调用阿里云API时您需要使用AccessKey完成身份验证。为避免主账号泄露AccessKey带来的安全风险,建议您创建RAM用户,授予RAM用户ECI相关的访问权限,再使用RAM用户的AccessKey调用SDK。

相关操作参考如下:

  1. 关于如何创建RAM用户,请参见创建RAM用户

  2. 关于如何为RAM用户授权,请参见为RAM用户授权

  3. 关于如何创建AccessKey,请参见创建AccessKey

创建ECI实例所需资源

创建ECI实例前,需要先创建专有网络VPC、交换机和安全组。

说明

如果已有VPC、交换机和安全组,您也可以获取交换机ID和安全组ID,直接创建ECI实例。

  1. 创建VPC。

    示例采用以下参数,更多信息,请参见CreateVpc

    参数

    示例值

    描述

    RegionId

    cn-shanghai

    VPC所属地域。

    请选择ECI支持的地域,具体请参见地域和可用区

    CidrBlock

    192.168.0.0/16

    VPC网段。

    建议您使用192.168.0.0/16、172.16.0.0/12、10.0.0.0/8三个RFC标准私网网段及其子网网段,网段掩码有效范围为8~28位。

    代码示例如下:

    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.google.gson.Gson;
    import com.aliyuncs.vpc.model.v20160428.*;
    
    public class CreateVpc {
    
        public static void main(String[] args) {
            DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai","<accessKeyId>", "<accessSecret>");
            IAcsClient client = new DefaultAcsClient(profile);
    
            CreateVpcRequest request = new CreateVpcRequest();
            request.setSysRegionId("cn-shanghai");
            request.setCidrBlock("192.168.0.0/16");
    
            try {
                CreateVpcResponse response = client.getAcsResponse(request);
                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());
            }
    
        }
    }

    创建成功会返回如下示例:

    {
    	"vpcId": "vpc-uf6d60ru912b6jvco****",
    	"vRouterId": "vrt-uf68fw505rxavz4hk****",
    	"requestId": "2C7AA1E2-4407-5B41-89F2-3DADC5AEE18E",
    	"routeTableId": "vtb-uf6orqxrmsyuv8gba****",
    	"resourceGroupId": "rg-acfmzw2jz2z****"
    }
  2. 在VPC中创建交换机。

    示例采用以下参数,更多信息,请参见CreateVSwitch

    参数

    示例值

    描述

    VpcId

    vpc-uf6d60ru912b6jvco****

    交换机所属VPC的ID。

    ZoneId

    cn-shanghai-m

    交换机所属可用区的ID。

    请选择所选地域下的推荐可用区,具体请参见地域和可用区

    CidrBlock

    192.168.0.0/24

    交换机网段。要求如下:

    • 掩码长度范围为16~29位。

    • 必须从属于所在VPC的网段。

    • 不能与所在VPC中路由条目的目标网段相同,但可以是目标网段的子集。

    代码示例如下:

    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.google.gson.Gson;
    import java.util.*;
    import com.aliyuncs.vpc.model.v20160428.*;
    
    public class CreateVSwitch {
    
        public static void main(String[] args) {
            DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "<accessKeyId>", "<accessSecret>");
            IAcsClient client = new DefaultAcsClient(profile);
    
            CreateVSwitchRequest request = new CreateVSwitchRequest();
            request.setSysRegionId("cn-shanghai");
            request.setCidrBlock("192.168.0.0/24");
            request.setVpcId("vpc-uf6d60ru912b6jvco****");
            request.setZoneId("cn-shanghai-m");
    
            try {
                CreateVSwitchResponse response = client.getAcsResponse(request);
                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());
            }
    
        }
    }

    创建成功会返回如下示例:

    {
    	"vSwitchId": "vsw-uf6uma67wlgxwuyb5****",
    	"requestId": "B94FAE14-043C-56B5-A763-F2E03C75AC3F"
    }
  3. 创建安全组。

    创建安全组时需指定VPC。代码示例如下:

    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.google.gson.Gson;
    import java.util.*;
    import com.aliyuncs.ecs.model.v20140526.*;
    
    public class CreateSecurityGroup {
    
        public static void main(String[] args) {
            DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "<accessKeyId>", "<accessSecret>");
            IAcsClient client = new DefaultAcsClient(profile);
    
            CreateSecurityGroupRequest request = new CreateSecurityGroupRequest();
            request.setSysRegionId("cn-shanghai");
            request.setVpcId("vpc-uf6d60ru912b6jvco****");
    
            try {
                CreateSecurityGroupResponse response = client.getAcsResponse(request);
                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());
            }
    
        }
    }

    创建成功会返回如下示例:

    {
    	"securityGroupId": "sg-uf63jawzncdab6xb****",
    	"requestId": "73D5964C-686A-59AF-8433-209067AB51D7"
    }

创建ECI实例

示例采用以下参数,更多信息,请参见CreateContainerGroup

参数

示例值

描述

RegionId

cn-shanghai

ECI实例所属地域。

SecurityGroupId

sg-uf63jawzncdab6xb****

ECI实例所属安全组。

VSwitchId

vsw-uf6uma67wlgxwuyb5****

ECI实例所属交换机。

ContainerGroupName

test

ECI实例名称。

Container.N.Image

registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2

容器镜像。

Container.N.Name

nginx

容器名称。

代码示例如下:

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.google.gson.Gson;
import java.util.*;
import com.aliyuncs.eci.model.v20180808.*;
public class CreateContainerGroup {
    public static void main(String[] args) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "<accessKeyId>", "<accessSecret>");
        IAcsClient client = new DefaultAcsClient(profile);
        CreateContainerGroupRequest request = new CreateContainerGroupRequest();
        request.setRegionId("cn-shanghai");
        request.setSecurityGroupId("sg-uf63jawzncdab6xb****");
        request.setVSwitchId("vsw-uf6uma67wlgxwuyb5****");
        request.setContainerGroupName("test");
        List<CreateContainerGroupRequest.Container> containerList = new ArrayList<CreateContainerGroupRequest.Container>();
        CreateContainerGroupRequest.Container container1 = new CreateContainerGroupRequest.Container();
        container1.setImage("registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2");
        container1.setName("nginx");
        containerList.add(container1);
        request.setContainers(containerList);
        try {
            CreateContainerGroupResponse response = client.getAcsResponse(request);
            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());
        }
    }
}

创建成功会返回如下示例,containerGroupId的值即为创建的ECI实例的ID。

{
	"requestId": "FA8DB391-3F54-5998-BDA0-8195113108E8",
	"containerGroupId": "eci-uf6g69s8wou20ns7****"
}