详情页标题前

阿里云ECS云服务器删除弹性网卡-云淘科技

详情页1

本文展示了如何通过调用阿里云ECS Java SDK来删除弹性网卡

操作场景

删除弹性网卡为异步操作,获得返回结果仅代表删除弹性网卡请求发送成功,删除弹性网卡是否成功有两种方式可以获取。您可以根据业务场景,选择不同的示例

  • 示例1:适用于对弹性网卡删除时延要求不高、资源量较小的场景,通过轮询网卡状态来获取弹性网卡操作结果。如接口被限流,建议使用示例2的方案。

  • 示例2:适用于对弹性网卡删除时延要求较高、资源量较大的场景,通过事件驱动架构方式来获取弹性网卡操作结果。该方式使用MNS来获取消息,会产生一定的费用。

注意事项

  • 弹性网卡必须处于可用(Available)状态。

  • 如果弹性网卡已经附加到ECS实例,必须先从实例分离(DetachNetworkInterface),才能删除弹性网卡。

示例1

适用于对弹性网卡删除时延要求不高、资源量较小的场景,通过轮询网卡状态来获取弹性网卡操作结果。

  1. 发送删除弹性网卡命令。

  2. 轮询弹性网卡查询接口,查询弹性网卡是否存在,判断是否删除成功。

说明

  • 轮询弹性网卡查询建议采用退避策略,时间间隔采用2、1、1、1秒。

  • 轮询弹性网卡查询接口限制在60次/秒。

  • 当前示例基于阿里云SDK V2.0版本编写。

import java.util.Collections;
import java.util.List;
import java.util.Objects;

import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.DeleteNetworkInterfaceRequest;
import com.aliyun.ecs20140526.models.DeleteNetworkInterfaceResponse;
import com.aliyun.ecs20140526.models.DescribeNetworkInterfacesRequest;
import com.aliyun.ecs20140526.models.DescribeNetworkInterfacesResponse;
import com.aliyun.ecs20140526.models.DescribeNetworkInterfacesResponseBody.DescribeNetworkInterfacesResponseBodyNetworkInterfaceSetsNetworkInterfaceSet;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

/**
 * 该示例基于轮询弹性网卡查询接口获取弹性网卡操作结果
 */
public class DeleteNetworkInterfaceWithEniDescribe {
    private static final long DESC_INTERVAL_MS = 2000;

    /**
     * delete eni
     *
     * @param regionId
     * @param eniId
     * @return
     */
    public static DeleteNetworkInterfaceResponse deleteNetworkInterface(Client ecsClient, String regionId,
        String eniId) {
        DeleteNetworkInterfaceRequest request = new DeleteNetworkInterfaceRequest();
        request.setRegionId(regionId);
        request.setNetworkInterfaceId(eniId);
        DeleteNetworkInterfaceResponse response = null;
        try {
            //用来设置个性化的策略
            RuntimeOptions runtime = new RuntimeOptions();
            response = ecsClient.deleteNetworkInterfaceWithOptions(request, runtime);
            System.out.printf(
                "delete network interface %s send request success. Request id is %s.%n",
                eniId, response.getBody().getRequestId());
        } catch (TeaException te) {
            System.out.println("ErrCode:" + te.getCode());
            System.out.println("ErrMsg:" + te.getMessage());
            System.out.println("RequestId:" + te.getData().get("RequestId"));
        } catch (Exception e) {
            System.out.println("ErrCode:" + e.getMessage());
        }
        return response;
    }

    /**
     * describe eni
     *
     * @param regionId
     * @param eniId
     * @return
     */
    public static DescribeNetworkInterfacesResponseBodyNetworkInterfaceSetsNetworkInterfaceSet describeNetworkInterface(
        Client ecsClient, String regionId, String eniId) {
        List networkInterfaceSetList;
        try {
            DescribeNetworkInterfacesRequest request = new DescribeNetworkInterfacesRequest();
            request.setRegionId(regionId);
            request.setNetworkInterfaceId(Collections.singletonList(eniId));
            //用来设置个性化的策略
            RuntimeOptions runtime = new RuntimeOptions();
            DescribeNetworkInterfacesResponse response = ecsClient.describeNetworkInterfacesWithOptions(request,
                runtime);
            networkInterfaceSetList = response.getBody().getNetworkInterfaceSets().getNetworkInterfaceSet();
            if (networkInterfaceSetList != null && networkInterfaceSetList.size() > 0) {
                return networkInterfaceSetList.get(0);
            }
        } catch (TeaException te) {
            System.out.println("ErrCode:" + te.getCode());
            System.out.println("ErrMsg:" + te.getMessage());
            System.out.println("RequestId:" + te.getData().get("RequestId"));
        } catch (Exception e) {
            System.out.println("ErrCode:" + e.getMessage());
        }
        return null;
    }

    /**
     * Check whether eni successfully deleted with max retry count
     *
     * @param ecsClient
     * @param regionId
     * @param eniId
     * @param maxDescTimes
     * @return
     */
    public static boolean isDeleteNetworkInterfaceSuccess(Client ecsClient, String regionId, String eniId,
        int maxDescTimes) {
        boolean result = false;
        for (int i = 0; i < maxDescTimes; i++) {
            DescribeNetworkInterfacesResponseBodyNetworkInterfaceSetsNetworkInterfaceSet networkInterface
                = describeNetworkInterface(ecsClient, regionId, eniId);
            if (Objects.isNull(networkInterface)) {
                result = true;
                break;
            }
            interval(DESC_INTERVAL_MS);
        }
        return result;
    }

    public static void interval(long intervalMs) {
        try {
            Thread.sleep(intervalMs);
        } catch (InterruptedException ignored) {

        }
    }

    /**
     * 使用AK&SK初始化账号Client。
     *
     * 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。请根据你的生产环境要求适当调整。
     * 避免AK&SK等关键信息在代码中明文存储是云上安全红线!
     *
     * @return Client
     * @throws Exception
     */
    public static Client createClient() throws Exception {
        Config config = new Config()
            .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
            .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        config.endpoint = "";
        return new Client(config);
    }

    public static void main(String[] args) throws Exception {
        String regionId = "";
        String eniId = "";
        int maxRetryCnt = 3;

        Client ecsClient = createClient();

        deleteNetworkInterface(ecsClient, regionId, eniId);
        if (isDeleteNetworkInterfaceSuccess(ecsClient, regionId, eniId, maxRetryCnt)) {
            System.out.printf(
                "Async delete network interface %s success.", eniId);
        } else {
            System.out.printf(
                "Async delete network interface %s fail. Please try again.", eniId);
        }
    }
}

示例2

适用于对弹性网卡删除时延要求较高、资源量较大的场景,通过事件驱动架构方式来获取弹性网卡操作结果。该方式使用MNS来获取消息,会产生一定的费用。MNS费用详见价格说明。

准备工作

  1. 创建队列,具体操作,请参见创建队列。

    本示例中,自定义队列名称为eni-operate-completed-event,其他配置项保持默认配置。

  2. 创建系统事件报警规则,具体操作,请参见创建系统事件报警规则。

    本示例中,您需要注意以下参数配置。

    • 报警规则名称:自定义名称。本示例中,自定义事件通知名称为eni-event-test-rule。

    • 产品类型:选择云服务器ECS

    • 事件类型:选择状态通知

    • 事件等级:选择信息。事件名称:选择网卡操作完成。资源范围:本示例保持默认配置。您可以根据需要自行设置。

    • 报警方式:本示例仅选中消息服务队列,并选择已创建的eni-operate-completed-event队列,设置地域队列

示例代码

示例代码通过监听MNS消息来获取弹性网卡操作结果。

  1. 发送删除弹性网卡命令。

  2. 通过接收MNS消息获取弹性网卡删除结果。

相关文档

DeleteNetworkInterface

腾讯云1折,限时活动,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/153290.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 阿里云ECS云服务器续费变配-云淘科技

    包年包月实例到期后,您可以在实例被自动释放前使用续费变配功能,在续费的同时修改实例规格,支持升级和降低实例规格。如果您续费时提示库存不足,建议续费变配。 前提条件 包年包月实例已过期,但尚未自动释放。 背景信息 使用续费变配功能时,部分实例在可选择规格列表中会显示迁移型规格。此时请注意: 如果您的实例属于非I/O优化实例,选择迁移型规格意味着将非I/O优化实…

    阿里云服务器 2023年12月9日
  • 阿里云日志服务SLS将日志服务数据投递到AnalyticDB MySQL-云淘科技

    日志服务采集到日志后,支持将日志投递至云原生数据仓库AnalyticDB MySQL进行存储与分析。本文档介绍将日志投递至AnalyticDB MySQL的操作步骤。 说明 投递数据到AnalyticDB MySQL遵循REPLACE INTO语义。REPLACE INTO用于实时覆盖写入的数据。写入数据时,REPLACE INTO会先根据主键判断待写入数据…

    2023年12月10日
  • 阿里云云原生大数据计算服务 MaxComputeREGEXP_REPLACE-云淘科技

    将source字符串中第occurrence次匹配pattern的子串替换成指定字符串replace_string后返回结果字符串。 命令格式 string regexp_replace(string , string , string [, bigint ]) 参数说明 source:必填。STRING类型,待替换的字符串。 pattern:必填。STRI…

  • 阿里云负载均衡访问控制-云淘科技

    负载均衡提供监听级别的访问控制。您可以在创建监听时配置访问控制,也可以在监听创建后修改或重新配置访问控制。 访问控制策略介绍 您可以针对不同的监听设置访问白名单或黑名单: 开启白名单:仅转发来自所选访问控制策略组中设置的IP地址或地址段的请求,白名单适用于应用只允许特定IP访问的场景。 设置白名单存在一定业务风险。一旦设置白名单,就只有白名单中的IP可以访问…

    阿里云负载均衡 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云日志服务SLS请求签名-云淘科技

    为保证用户日志数据的安全,日志服务API的所有HTTP请求都必须经过安全验证。验证流程基于阿里云的访问密钥安全验证,使用非对称加密算法完成。 使用说明 日志服务SDK封装了日志服务的所有API接口,您可以通过日志服务SDK方便地调用日志服务的所有API接口。日志服务SDK支持自动签名,并支持多语言版本。推荐使用日志服务SDK访问日志服务,更多信息,请参见日志…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。