华为云用户手册

  • 使用OpenSSL工具生成 CS R文件 安装OpenSSL工具。 执行以下命令生成CSR文件。 openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout myprivate.key -out mydomain.csr -new:指定生成一个新的CSR。 -nodes:指定私钥文件不被加密。 -sha256:指定摘要算法。 -newkey rsa:2048:指定私钥类型和长度。 -keyout:生成私钥文件,名称可自定义。 -out:生成CSR文件,名称可自定义。 生成CSR文件“mydomain.csr”。 图1 生成CSR文件 需要输入的信息说明如下: 字段 说明 示例 Country Name 申请单位所属国家,只能是两个字母的国家码。例如,中国只能是CN。 CN State or Province Name 申请单位所在省名或州名,可以是中文或英文。 ZheJiang Locality Name 申请单位所在城市名,可以是中文或英文。 HangZhou Organization Name 申请单位名称法定名称,可以是中文或英文。 HangZhou xxx Technologies, Inc. Organizational Unit Name 申请单位的所在部门,可以是中文或英文。 IT Dept. Common Name 申请证书的具体网站 域名 。 说明: 多域名类型的证书,请填写需要绑定的主域名。 泛域名类型的证书,请填写泛域名。示例:*.example.com www.example.com Email Address 申请单位的邮箱。 无需输入,请直接按“Enter”。 - A challenge password 设置CSR文件密码。 无需输入,请直接按“Enter”。 - 在使用OpenSSL工具生成中文证书时,需要注意中文编码格式必须使用UTF8编码格式。同时,需要在编译OpenSSL工具时指定支持UTF8编码格式。 证书服务系统对CSR文件的密钥长度有严格要求,密钥长度必须是2,048位,密钥类型必须为RSA。 完成命令提示的输入后,会在当前目录下生成myprivate.key(私钥文件)和mydomain.csr(CSR,证书请求文件)两个文件。
  • 证书格式转换 证书格式之间是可以互相转换的,如图1所示。 图1 证书格式转换 您可使用以下方式实现证书格式之间的转换: 将JKS格式证书转换为PFX格式 您可以使用JDK中自带的Keytool工具,将JKS格式证书文件转换成PFX格式。 例如,您可以执行以下命令将“server.jks”证书文件转换成“server.pfx”证书文件: keytool -importkeystore -srckeystore D:\server.jks -destkeystore D:\server.pfx -srcstoretype JKS -deststoretype PKCS12 将PFX格式证书转换为JKS格式 您可以使用JDK中自带的Keytool工具,将PFX格式证书文件转换成JKS格式。 例如,您可以执行以下命令将“server.pfx”证书文件转换成“server.jks”证书文件: keytool -importkeystore -srckeystore D:\server.pfx -destkeystore D:\server.jks -srcstoretype PKCS12 -deststoretype JKS 将PEM/KEY/CRT格式证书转换为PFX格式 您可以使用OpenSSL工具,将KEY格式密钥文件和CRT格式公钥文件转换成PFX格式证书文件。 例如,将您的KEY格式密钥文件(server.key)和CRT格式公钥文件(server.crt)复制至OpenSSL工具安装目录,使用OpenSSL工具执行以下命令将证书转换成“server.pfx”证书文件: openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt 将PFX格式证书转换为PEM/KEY/CRT格式 您可以使用OpenSSL工具,将PFX格式证书文件转化为PEM格式证书文件、KEY格式密钥文件和CRT格式公钥文件。 例如,将您的PFX格式证书文件复制至OpenSSL安装目录,使用OpenSSL工具执行以下命令将证书转换成“server.pem”证书文件、KEY格式密钥文件(server.key)和CRT格式公钥文件(server.crt): openssl pkcs12 -in server.pfx -nodes -out server.pem openssl rsa -in server.pem -out server.key openssl x509 -in server.pem -out server.crt 此转换步骤是专用于通过OpenSSL工具生成私钥和CSR申请证书文件,并且通过此方法您还可以在获取到PEM格式证书公钥的情况下,分离出私钥。在您实际部署数字证书时,请使用通过此转换步骤分离出来的私钥和您申请得到的公钥证书匹配进行部署。
  • 查看证书文件的格式 您可以使用以下方法简单区分带有后缀扩展名的证书文件: *.DER或*.CER文件:这样的证书文件是二进制格式,只含有证书信息,不包含私钥。 *.CRT文件:这样的证书文件可以是二进制格式,也可以是文本格式,一般均为文本格式,功能与*.DER及*.CER证书文件相同。 *.PEM文件:这样的证书文件一般是文本格式,可以存放证书或私钥,或者两者都包含。*.PEM文件如果只包含私钥,一般用*.KEY文件代替。 *.PFX或*.P12文件:这样的证书文件是二进制格式,同时包含证书和私钥,且一般有密码保护。 您也可以使用记事本直接打开证书文件。如果显示的是规则的数字和字母,则表示该证书文件是文本格式。 举例: —–BEGIN CERTIFICATE—– MIIE5zCCA8+gAwIBAgIQN+whYc2BgzAogau0dc3PtzANBgkqh...... —–END CERTIFICATE—– 如果存在“——BEGIN CERTIFICATE——”,则说明这是一个证书文件。 如果存在“—–BEGIN RSA PRIVATE KEY—–”,则说明这是一个私钥文件。
  • 创建私钥 华为云 云证书管理 对您的私有密钥的加密算法和长度有如下要求: 加密算法使用RSA算法 加密长度至少2048位 建议您使用2048位加密长度的SHA256摘要算法。 您可以通过以下两种方式创建您的私钥: 使用OpenSSL工具生成私钥 OpenSSL是一个强大且应用广泛的安全基础库工具,您可以从“http://www.openssl.org/source/”下载最新的OpenSSL工具安装包。 要求OpenSSL版本必须是1.0.1g或以上版本。 安装OpenSSL工具后,在命令行模式下运行openssl genrsa -out myprivate.pem 2048即可生成您的私钥文件。 “myprivate.pem”即为您的私钥文件。 “2048”指定加密长度。 使用Keytool工具导出私钥 Keytool工具是JDK中自带的密钥管理工具,可以制作Keystore(jks)格式的证书文件,您可以从“http://www.oracle.com/technetwork/java/javase/downloads/index.html”下载JDK工具包来获取Keytool工具。 由于使用Keytool工具制作的公钥和私钥默认是不可以导出的,需要您从已经创建好的“.keystore”文件中导出私钥。 在导出的文件中,以下部分的内容即是您的私钥: -----BEGIN RSA PRIVATE KEY----- ...... -----END RSA PRIVATE KEY----- 或者 -----BEGIN PRIVATE KEY----- ...... -----END PRIVATE KEY----- 无论您通过哪种方式生成密钥,请您完善地保管好您的私钥文件,私钥文件一旦丢失或者损坏,您申请的对应的公钥、及数字证书都将无法使用。
  • 数字证书的原理 数字证书采用公钥体制,即利用一对互相匹配的密钥对进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。 由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名。 数字证书是一个经证书授权中心(CA)数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。
  • 申请SSL证书时,如何填写证书中绑定的域名? SSL证书管理中的证书是绑定域名的,因此购买证书时,需要根据您的域名情况,选择对应的域名类型。 如果购买的是纯IP证书,则只需要绑定IP,在“域名信息”中,“绑定域名”请填写需要绑定的公网IP。 如果您想了解域名的相关概念,请参见域名的相关概念。 选择域名类型并成功购买证书后,需要将对应的域名绑定给已购买的证书,即需要在SSL证书管理控制台补全证书审核资料。而申请证书的第一步就是填写域名信息,将对应的域名绑定给已购买的证书。 SSL证书管理控制台会根据您购买的证书提示您需要输入的域名类型。 如果您申请的DV证书,绑定的域名含有edu、gov、bank、live等敏感词,可能无法通过安全审核,建议选择OV或EV证书,目前已知敏感词请参见敏感词。 各域名类型具体说明如表1所示,更多参考内容可查看具体示例。 表1 绑定域名 参数名称 参数说明 单域名 仅可绑定1个普通域名。 绑定域名时,绑定1个普通域名即可。 多域名 可绑定 多个域名 (购买的域名数量为几,则可绑定几个域名)。 申请证书时,需要将其中一个域名设置为“主域名”,其他域名则设置为“附加域名”。您可根据自己实际情况进行选择。 例如,您购买的域名数量为3,则将其中1个域名设置为主域名,其他2个域名则设置为附加域名。 须知: 主域名和附加域名的关系(主从关系)对添加的域名没有影响。 如果购买的是组合证书(单域名+泛域名),主域名同时支持绑定单域名和泛域名。 仅当证书类型为OV、OV Pro时,多个域名中可包含泛域名。其他类型的证书,仅支持绑定多个单域名。 泛域名 仅可绑定1个泛域名。 绑定域名时,绑定1个含*的泛域名即可。 具体示例: 单域名型证书 当您购买的是单域名型证书,则仅支持绑定一个普通域名。 示例:您的域名为huaweicloud.com 申请证书时,则在“绑定域名”中填写huaweicloud.com即可,如图1所示。 图1 单域名绑定域名 多域名型证书 当您购买的是多域名型证书,则可绑定多个域名(购买的域名数量为几,则可绑定几个域名)。 申请证书时,需要将其中一个域名设置为“主域名”,其他域名则设置为“附加域名”。您可根据自己实际情况进行选择。附加域名可分批次多次录入,具体操作请参见新增附加域名。 主域名和附加域名的关系(主从关系)对添加的域名没有影响。 如果购买的是组合证书(单域名+泛域名),主域名同时支持绑定单域名和泛域名。 仅当证书类型为OV、OV Pro时,多个域名中可包含泛域名。其他类型的证书,仅支持绑定多个单域名。 示例:如果购买的是OV型SSL证书,域名数量为3,且您的域名为huaweicloud.com、test.huaweicloud.com和*.huaweicloud.cn 申请证书时,则在“绑定主域名”中填写huaweicloud.com,“绑定附加域名”填写test.huaweicloud.com和*.huaweicloud.cn。多个附加域名需要换行输入,如图2所示。 图2 多域名绑定域名 泛域名型证书 当您购买的是泛域名型证书,则支持绑定一个泛域名。 示例:您的域名为test.huaweicloud.com、yun.huaweicloud.com、example.huaweicloud.com、good.huaweicloud.com等,均在同一个级别 申请证书时,则在“绑定域名”中填写“*.huaweicloud.com”,如图3所示。 图3 泛域名绑定域名 父主题: 域名填写类
  • 如何停止私有CA或私有证书的计费? 私有CA和私有证书支持按需计费。其中,根CA创建后即开始计费;子CA创建后不收费,激活后才开始计费。 如需停止计费,删除申请的私有CA和私有证书即可。 具体操作请参见删除私有CA,吊销私有证书。 私有CA禁用期间也将保持收费。 用户执行删除私有CA操作后,私有CA不会立即删除。计划删除最快7天生效(根据您设置的推迟时间为准)。在此期间收费情况说明如下: 如果用户未取消计划删除,私有CA被删除了,则在计划删除期间的私有CA不会收费; 如果用户在计划删除期间,取消了计划删除,私有CA未被删除,则在计划删除期间的私有CA将保持收费。 例如:您在2022年01月01日00:00执行了删除私有CA的操作,且设置的私有CA计划删除推迟时间为7天,7天后私有CA被删除,那么,PCA服务将不收取这7天的费用;如果您在2022年01月04日00:00取消了计划删除,私有CA未被删除,那么,PCA服务将补齐2022年01月01日00:00至2022年01月04日00:00期间的费用。
  • Flexus L实例 是否可以叠加购买流量包? Flexus L实例控制台不支持单独为某一个Flexus L实例购买流量包,您可以在EIP控制台购买共享流量包来节省流量费用。 了解共享流量包 共享流量包是一款带宽流量套餐产品,使用方便,价格实惠。购买共享流量包后立即生效,并自动抵扣按需计费(按流量计费)的EIP带宽产生的流量资费,直到流量包用完或到期。共享流量包的收费标准请参考产品价格详情中“预付费流量包”的内容。 共享流量包为区域性共享资源,例如您在“华北-北京四”购买了共享流量包,则“华北-北京四”区域的Flexus L实例或其他资源都可以使用该流量包;相反的,“华北-北京四”区域之外的Flexus L实例无法使用该共享流量包,如需使用共享流量包,请在目标区域另外购买。 共享流量包一旦购买不支持修改和退订,到期后也不支持续订。在购买前,请务必先了解“共享流量包”的使用规则和使用限制,具体信息详见共享流量包概述。 购买共享流量包 请进入购买共享流量包页面购买,具体操作详见购买共享流量包。 父主题: 网络
  • 相关信息 当您完成创建桶、上传对象、下载对象等基本操作后,您还可以结合业务需求使用以下Java SDK的高阶功能。 生命周期:通过为桶配置生命周期规则,可以实现定时转换对象存储类别或定时删除对象。 桶ACL权限:Java SDK提供桶ACL访问权限方式,桶的所有者可以通过编写桶ACL,实现对桶更精细化的权限控制。 桶策略:Java SDK提供桶策略访问权限方式,桶的所有者可以通过编写桶策略,实现对桶更精细化的权限控制。 静态网站托管:您可以将静态网站文件上传至OBS的桶中,并对这些文件赋予匿名用户可读权限,然后将该桶配置成静态网站托管模式,实现使用桶域名访问该网站。 多版本控制:为桶开启多版本控制后,可以在桶中保留多个版本的对象,方便检索和还原各个版本,在意外操作或应用程序故障时帮助快速恢复数据。 服务端加密:通过服务端加密功能,对上传至OBS桶中的数据进行加密保护。 跨域资源共享(CORS):通过配置CORS规则,可以实现跨域名访问OBS。
  • Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ObjectListing; import com.obs.services.model.ObsObject; public class ListObjects001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("AC CES S_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // endpoint填写桶所在区域的endpoint。 String endPoint = "https://your-endpoint"; // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); try { // 简单列举 ObjectListing result = obsClient.listObjects("examplebucket"); for (ObsObject obsObject : result.getObjects()) { System.out.println("listObjects successfully"); System.out.println("ObjectKey:" + obsObject.getObjectKey()); System.out.println("Owner:" + obsObject.getOwner()); } } catch (ObsException e) { System.out.println("listObjects failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("listObjects failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package main import ( "fmt" "os" "obs-sdk-go/obs" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // endpoint填写桶所在区域的endpoint。 endPoint := "https://your-endpoint" // 创建obsClient实例 obsClient, err := obs.New(ak, sk, endPoint) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.ListObjectsInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 列举桶内对象 output, err := obsClient.ListObjects(input) if err == nil { fmt.Printf("List objects under the bucket(%s) successful!\n", input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) for index, val := range output.Contents { fmt.Printf("Content[%d]-OwnerId:%s, ETag:%s, Key:%s, LastModified:%s, Size:%d\n", index, val.Owner.ID, val.ETag, val.Key, val.LastModified, val.Size) } return } fmt.Printf("List objects under the bucket(%s) fail!\n", input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ObsObject; import java.io.ByteArrayOutputStream; import java.io.InputStream; public class GetObject001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。查看桶所在的endpoint请参见:https://support.huaweicloud.com/usermanual-obs/obs_03_0312.html。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // endpoint填写桶所在区域的endpoint。 String endPoint = "https://your-endpoint"; // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); try { // 流式下载 ObsObject obsObject = obsClient.getObject("examplebucket", "objectname"); // 读取对象内容 System.out.println("Object content:"); InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len; while ((len = input.read(b)) != -1) { bos.write(b, 0, len); } System.out.println("getObjectContent successfully"); System.out.println(new String(bos.toByteArray())); bos.close(); input.close(); } catch (ObsException e) { System.out.println("getObjectContent failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("getObjectContent failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 package main import ( "fmt" "os" "obs-sdk-go/obs" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // endpoint填写桶所在区域的endpoint。 endPoint := "https://your-endpoint" // 创建obsClient实例 obsClient, err := obs.New(ak, sk, endPoint) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.PutFileInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定上传对象,此处以 objectname 为例。 input.Key = "objectname" // 指定本地文件,此处以localfile为例 input.SourceFile = "localfile" // 文件上传 output, err := obsClient.PutFile(input) if err == nil { fmt.Printf("Put file(%s) under the bucket(%s) successful!\n", input.Key, input.Bucket) fmt.Printf("StorageClass:%s, ETag:%s\n", output.StorageClass, output.ETag) return } fmt.Printf("Put file(%s) under the bucket(%s) fail!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.PutObjectRequest; import java.io.File; public class PutObject004 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // endpoint填写桶所在区域的endpoint。 String endPoint = "https://your-endpoint"; // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); try { // 文件上传 PutObjectRequest request = new PutObjectRequest(); // 上传文件到examplebucket桶中 request.setBucketName("examplebucket"); // 指定上传到examplebucket桶中的文件名称 request.setObjectKey("objectname"); // 指定本地待上传文件的路径 request.setFile(new File("localfile")); obsClient.putObject(request); System.out.println("putObject successfully"); } catch (ObsException e) { System.out.println("putObject failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("putObject failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.AccessControlList; import com.obs.services.model.AvailableZoneEnum; import com.obs.services.model.CreateBucketRequest; import com.obs.services.model.ObsBucket; import com.obs.services.model.StorageClassEnum; public class CreateBucket001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // endpoint填写桶所在区域的endpoint。 String endPoint = "https://your-endpoint"; // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); try { CreateBucketRequest request = new CreateBucketRequest(); //示例桶名 String exampleBucket = "examplebucket"; //示例桶区域位置 String exampleLocation = "cn-north-4"; request.setBucketName(exampleBucket); // 设置桶访问权限为私有读写,默认也是私有读写 request.setAcl(AccessControlList.REST_CANNED_PRIVATE); // 设置桶的存储类别为标准存储 request.setBucketStorageClass(StorageClassEnum.STANDARD); // 设置桶区域位置(以区域为华北-北京四为例),location 需要与 endpoint的位置信息一致 request.setLocation(exampleLocation); // 指定创建多AZ桶,如果不设置,默认创建单AZ桶 request.setAvailableZone(AvailableZoneEnum.MULTI_AZ); // 创建桶 ObsBucket bucket = obsClient.createBucket(request); // 创建桶成功 System.out.println("CreateBucket successfully"); System.out.println("RequestId:"+bucket.getRequestId()); } catch (ObsException e) { System.out.println("CreateBucket failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code: " + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message: " + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); } catch (Exception e) { System.out.println("CreateBucket failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 package main import ( "fmt" "os" "obs-sdk-go/obs" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // endpoint填写桶所在区域的endpoint。 endPoint := "https://your-endpoint" // 创建obsClient实例 obsClient, err := obs.New(ak, sk, endPoint) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.CreateBucketInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定存储桶所在区域,此处以“cn-north-4”为例,必须跟传入的Endpoint中Region保持一致。 input.Location = "cn-north-4" // 指定存储桶所在区域,必须跟传入的Endpoint中Region保持一致。 input.Location = "region" // 指定存储桶的权限控制策略,此处以obs.AclPrivate为例。 input.ACL = obs.AclPrivate // 指定存储桶的存储类型,此处以obs.StorageClassWarm为例。如果未指定该参数,则创建的桶为标准存储类型。 input.StorageClass = obs.StorageClassWarm // 指定存储桶的AZ类型,此处以“3AZ”为例。不携带时默认为单AZ,如果对应region不支持多AZ存储,则该桶的存储类型仍为单AZ。 input.AvailableZone = "3az" // 创建桶 output, err := obsClient.CreateBucket(input) if err == nil { fmt.Printf("Create bucket:%s successful!\n", input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Create bucket:%s fail!\n", input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • 准备工作 使用Java SDK之前,您需要拥有一个华为账号并实名认证、为账号充值,接着获取访问密钥、准备开发环境,然后下载并安装Java SDK。 注册华为账号 并实名认证。 如果您已有华为账号,请忽略此步骤。如果您还没有华为账号,请执行以下操作: 注册华为账号并开通华为云。 参考个人账号如何完成实名认证或企业账号如何完成实名认证,完成个人或企业账号实名认证。 为账号充值。 您需要确保账号有足够的余额,才能正常使用OBS等相关资源。请参考账户充值。 获取访问密钥,详情请参见获取访问密钥(AK和SK)。 准备开发环境,详情请参见准备开发环境。 下载与安装Java SDK,详情请参见下载与安装Java SDK。
  • 相关信息 当您完成创建桶、上传对象、下载对象等基本操作后,您还可以结合业务需求使用以下Java SDK的高阶功能。 生命周期:通过为桶配置生命周期规则,可以实现定时转换对象存储类别或定时删除对象。 桶ACL权限:Java SDK提供桶ACL访问权限方式,桶的所有者可以通过编写桶ACL,实现对桶更精细化的权限控制。 桶策略:Java SDK提供桶策略访问权限方式,桶的所有者可以通过编写桶策略,实现对桶更精细化的权限控制。 静态网站托管:您可以将静态网站文件上传至OBS的桶中,并对这些文件赋予匿名用户可读权限,然后将该桶配置成静态网站托管模式,实现使用桶域名访问该网站。 多版本控制:为桶开启多版本控制后,可以在桶中保留多个版本的对象,方便检索和还原各个版本,在意外操作或应用程序故障时帮助快速恢复数据。 服务端加密:通过服务端加密功能,对上传至OBS桶中的数据进行加密保护。 跨域资源共享(CORS):通过配置CORS规则,可以实现跨域名访问OBS。
  • Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ObjectListing; import com.obs.services.model.ObsObject; public class ListObjects001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // endpoint填写桶所在区域的endpoint。 String endPoint = "https://your-endpoint"; // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); try { // 简单列举 ObjectListing result = obsClient.listObjects("examplebucket"); for (ObsObject obsObject : result.getObjects()) { System.out.println("listObjects successfully"); System.out.println("ObjectKey:" + obsObject.getObjectKey()); System.out.println("Owner:" + obsObject.getOwner()); } } catch (ObsException e) { System.out.println("listObjects failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("listObjects failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 package main import ( "fmt" "os" "obs-sdk-go/obs" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // endpoint填写桶所在区域的endpoint。 endPoint := "https://your-endpoint" // 创建obsClient实例 obsClient, err := obs.New(ak, sk, endPoint) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.ListObjectsInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 列举桶内对象 output, err := obsClient.ListObjects(input) if err == nil { fmt.Printf("List objects under the bucket(%s) successful!\n", input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) for index, val := range output.Contents { fmt.Printf("Content[%d]-OwnerId:%s, ETag:%s, Key:%s, LastModified:%s, Size:%d\n", index, val.Owner.ID, val.ETag, val.Key, val.LastModified, val.Size) } return } fmt.Printf("List objects under the bucket(%s) fail!\n", input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.ObsObject; import java.io.ByteArrayOutputStream; import java.io.InputStream; public class GetObject001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。查看桶所在的endpoint请参见:https://support.huaweicloud.com/usermanual-obs/obs_03_0312.html。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // endpoint填写桶所在区域的endpoint。 String endPoint = "https://your-endpoint"; // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); try { // 流式下载 ObsObject obsObject = obsClient.getObject("examplebucket", "objectname"); // 读取对象内容 System.out.println("Object content:"); InputStream input = obsObject.getObjectContent(); byte[] b = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len; while ((len = input.read(b)) != -1) { bos.write(b, 0, len); } System.out.println("getObjectContent successfully"); System.out.println(new String(bos.toByteArray())); bos.close(); input.close(); } catch (ObsException e) { System.out.println("getObjectContent failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("getObjectContent failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.PutObjectRequest; import java.io.File; public class PutObject004 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // endpoint填写桶所在区域的endpoint。 String endPoint = "https://your-endpoint"; // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); try { // 文件上传 PutObjectRequest request = new PutObjectRequest(); // 上传文件到examplebucket桶中 request.setBucketName("examplebucket"); // 指定上传到examplebucket桶中的文件名称 request.setObjectKey("objectname"); // 指定本地待上传文件的路径 request.setFile(new File("localfile")); obsClient.putObject(request); System.out.println("putObject successfully"); } catch (ObsException e) { System.out.println("putObject failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code:" + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message:" + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); e.printStackTrace(); } catch (Exception e) { System.out.println("putObject failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 package main import ( "fmt" "os" "obs-sdk-go/obs" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // endpoint填写桶所在区域的endpoint。 endPoint := "https://your-endpoint" // 创建obsClient实例 obsClient, err := obs.New(ak, sk, endPoint) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.PutFileInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定上传对象,此处以 objectname 为例。 input.Key = "objectname" // 指定本地文件,此处以localfile为例 input.SourceFile = "localfile" // 文件上传 output, err := obsClient.PutFile(input) if err == nil { fmt.Printf("Put file(%s) under the bucket(%s) successful!\n", input.Key, input.Bucket) fmt.Printf("StorageClass:%s, ETag:%s\n", output.StorageClass, output.ETag) return } fmt.Printf("Put file(%s) under the bucket(%s) fail!\n", input.Key, input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 package main import ( "fmt" "os" "obs-sdk-go/obs" obs "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ) func main() { //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。 //您可以登录访问管理控制台获取访问密钥AK/SK ak := os.Getenv("AccessKeyID") sk := os.Getenv("SecretAccessKey") // endpoint填写Bucket对应的Endpoint, 这里以华北-北京四为例,其他地区请按实际情况填写。 endPoint := "https://obs.cn-north-4.myhuaweicloud.com" // endpoint填写桶所在区域的endpoint。 endPoint := "https://your-endpoint" // 创建obsClient实例 obsClient, err := obs.New(ak, sk, endPoint) if err != nil { fmt.Printf("Create obsClient error, errMsg: %s", err.Error()) } input := &obs.CreateBucketInput{} // 指定存储桶名称 input.Bucket = "examplebucket" // 指定存储桶所在区域,此处以“cn-north-4”为例,必须跟传入的Endpoint中Region保持一致。 input.Location = "cn-north-4" // 指定存储桶所在区域,必须跟传入的Endpoint中Region保持一致。 input.Location = "region" // 指定存储桶的权限控制策略,此处以obs.AclPrivate为例。 input.ACL = obs.AclPrivate // 指定存储桶的存储类型,此处以obs.StorageClassWarm为例。如果未指定该参数,则创建的桶为标准存储类型。 input.StorageClass = obs.StorageClassWarm // 指定存储桶的AZ类型,此处以“3AZ”为例。不携带时默认为单AZ,如果对应region不支持多AZ存储,则该桶的存储类型仍为单AZ。 input.AvailableZone = "3az" // 创建桶 output, err := obsClient.CreateBucket(input) if err == nil { fmt.Printf("Create bucket:%s successful!\n", input.Bucket) fmt.Printf("RequestId:%s\n", output.RequestId) return } fmt.Printf("Create bucket:%s fail!\n", input.Bucket) if obsError, ok := err.(obs.ObsError); ok { fmt.Println("An ObsError was found, which means your request sent to OBS was rejected with an error response.") fmt.Println(obsError.Error()) } else { fmt.Println("An Exception was found, which means the client encountered an internal problem when attempting to communicate with OBS, for example, the client was unable to access the network.") fmt.Println(err) } }
  • Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.AccessControlList; import com.obs.services.model.AvailableZoneEnum; import com.obs.services.model.CreateBucketRequest; import com.obs.services.model.ObsBucket; import com.obs.services.model.StorageClassEnum; public class CreateBucket001 { public static void main(String[] args) { // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥AK/SK String ak = System.getenv("ACCESS_KEY_ID"); String sk = System.getenv("SECRET_ACCESS_KEY_ID"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 String endPoint = "https://obs.cn-north-4.myhuaweicloud.com"; // endpoint填写桶所在区域的endpoint。 String endPoint = "https://your-endpoint"; // 创建ObsClient实例 // 使用永久AK/SK初始化客户端 ObsClient obsClient = new ObsClient(ak, sk,endPoint); try { CreateBucketRequest request = new CreateBucketRequest(); //示例桶名 String exampleBucket = "examplebucket"; //示例桶区域位置 String exampleLocation = "cn-north-4"; request.setBucketName(exampleBucket); // 设置桶访问权限为私有读写,默认也是私有读写 request.setAcl(AccessControlList.REST_CANNED_PRIVATE); // 设置桶的存储类别为标准存储 request.setBucketStorageClass(StorageClassEnum.STANDARD); // 设置桶区域位置(以区域为华北-北京四为例),location 需要与 endpoint的位置信息一致 request.setLocation(exampleLocation); // 指定创建多AZ桶,如果不设置,默认创建单AZ桶 request.setAvailableZone(AvailableZoneEnum.MULTI_AZ); // 创建桶 ObsBucket bucket = obsClient.createBucket(request); // 创建桶成功 System.out.println("CreateBucket successfully"); System.out.println("RequestId:"+bucket.getRequestId()); } catch (ObsException e) { System.out.println("CreateBucket failed"); // 请求失败,打印http状态码 System.out.println("HTTP Code: " + e.getResponseCode()); // 请求失败,打印服务端错误码 System.out.println("Error Code:" + e.getErrorCode()); // 请求失败,打印详细错误信息 System.out.println("Error Message: " + e.getErrorMessage()); // 请求失败,打印请求id System.out.println("Request ID:" + e.getErrorRequestId()); System.out.println("Host ID:" + e.getErrorHostId()); } catch (Exception e) { System.out.println("CreateBucket failed"); // 其他异常信息打印 e.printStackTrace(); } } }
  • 准备工作 使用Java SDK之前,您需要拥有一个华为账号并实名认证、为账号充值,接着获取访问密钥、准备开发环境,然后下载并安装Java SDK。 注册华为账号并实名认证。 如果您已有华为账号,请忽略此步骤。如果您还没有华为账号,请执行以下操作: 注册华为账号并开通华为云。 参考个人账号如何完成实名认证或企业账号如何完成实名认证,完成个人或企业账号实名认证。 为账号充值。 您需要确保账号有足够的余额,才能正常使用OBS等相关资源。请参考账户充值。 获取访问密钥,详情请参见获取访问密钥(AK和SK)。 准备开发环境,详情请参见准备开发环境。 下载与安装Java SDK,详情请参见下载与安装Java SDK。
  • 新增特性及特性增强 Webhook匹配表达式(GA) 在Kubernetes1.30版本中,Webhook匹配表达式特性进阶至GA。此特性允许对准入Webhook支持根据特定的条件进行匹配,更细粒度地控制Webhook的触发条件。详细使用方式请参考动态准入控制。 Pod调度就绪态(GA) 在Kubernetes1.30版本中,Pod调度就绪态特性进阶至GA。此特性允许对Pod添加自定义的schedulingGates,并由用户控制何时移除这些gate,当所有gates移除后,Pod才会被认为调度就绪。详细使用方式请参考Pod调度就绪态。 验证准入策略(GA) 在Kubernetes1.30版本中,验证准入策略(ValidatingAdmissionPolicy)特性进阶至GA。该特性支持通过CEL表达式声明资源的验证准入策略。详细使用方式请参考验证准入策略。 基于ContainerResource指标的Pod水平自动扩缩容(GA) 在Kubernetes1.30版本中,基于ContainerResource指标的Pod水平自动扩缩容特性进阶至GA。该特性允许HPA根据Pod中各个容器的资源使用情况来配置自动伸缩,而不仅是Pod的整体资源使用情况,便于为Pod中最重要的容器配置扩缩容阈值。详细使用方式请参考容器资源指标。 传统ServiceAccount令牌清理器(GA) 在Kubernetes1.30版本中,传统ServiceAccount令牌清理器特性进阶至GA。其作为kube-controller-manager的一部分运行,每24小时检查一次,查看是否有任何自动生成的传统ServiceAccount令牌在特定时间段内(默认为一年,通过--legacy-service-account-token-clean-up-period指定)未被使用。如果有的话,清理器会将这些令牌标记为无效,并添加kubernetes.io/legacy-token-invalid-since标签,其值为当前日期。如果一个无效的令牌在特定时间段(默认为1年,通过--legacy-service-account-token-clean-up-period指定)内未被使用,清理器将会删除它。更多使用细节请参考传统ServiceAccount令牌清理器。 Pod拓扑分布中的最小域(GA) 在Kubernetes1.30版本中,Pod拓扑分布中的最小域特性进阶至GA。此特性允许通过Pod的minDomains字段配置符合条件的域的最小数量。负载拓扑约束匹配到的域的数量如果大于minDomains,则该字段没有影响;如果小于minDomains,则会将全局最小值(符合条件的域中匹配 Pod 的最小数量)设为0,该字段必须结合whenUnsatisfiable: DoNotSchedule一起使用,实现在不满足拓扑约束的情况下让Pod不进行调度。详细使用方式参考Pod拓扑分布。
  • CCE突发弹性引擎(对接CCI)插件版本发布记录 表1 CCE突发弹性引擎(对接CCI)插件版本记录 插件版本 支持的集群版本 更新特性 1.5.15 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 - 1.5.14 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 - 1.5.13 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 支持v1.30版本集群;弹性CCI 2.0支持多子网 1.5.12 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 - 1.5.11 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 - 1.5.10 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 弹性CCI2.0支持磁盘压力驱逐 1.5.9 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 支持/etc/localtime通过HostPath挂载 1.5.8 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 适配CCE v1.29集群 1.5.2 v1.21 v1.23 v1.25 v1.27 v1.28 支持弹性至CCI 2.0 1.3.57 v1.21 v1.23 v1.25 v1.27 v1.28 适配CCE v1.28集群 1.3.54 v1.21 v1.23 v1.25 v1.27 修复部分问题 1.3.48 v1.21 v1.23 v1.25 v1.27 支持v1.25、v1.27版本集群 支持JuiceFS类型的存储 1.3.44 v1.17 v1.19 v1.21 v1.23 支持Pod配置全域弹性公网IP 1.3.35 v1.17 v1.19 v1.21 v1.23 支持原地升级镜像 支持ReadinessGates 1.3.25 v1.17 v1.19 v1.21 v1.23 支持DownwardAPI Volume 支持Projected Volume 支持自定义StorageClass 1.3.19 v1.17 v1.19 v1.21 v1.23 支持schedule profile 1.3.7 v1.17 v1.19 v1.21 v1.23 支持v1.21、v1.23版本集群 1.2.12 v1.13 v1.15 v1.17 v1.19 新增了部分metrics指标 支持HPA与CustomedHPA 支持将弹性到CCI的Pod中的hostPath转换为其它类型存储 修复Kubernetes Dashboard无法使用终端问题 1.2.5 v1.13 v1.15 v1.17 v1.19 支持 CCE Turbo 集群 自动清理CCI中不再被Pod依赖的资源 支持配置Requests与Limits不相等,弹性到CCI时的资源申请量以Limits为准 修复CCI命名空间不存在时插件卸载失败问题 增加对Pod规格超过CCI限制的创建请求的拦截 1.2.0 v1.13 v1.15 v1.17 v1.19 支持v1.19版本集群 支持SFS、SFS Turbo类型存储 支持CronJob 支持配置envFrom 日志文件自动转储 屏蔽TCPSocket类型健康检查 支持配置资源标签(pod-tag) 提升了性能和可靠性 修复了一些已知问题 1.0.5 v1.13 v1.15 v1.17 支持v1.17版本集群 父主题: 插件版本发布记录
  • 华为云容器服务CCE Autopilot于2024年9月30日00:00(北京时间)转商 发布时间:2024-08-29 华为云计划于2024年9月30日00:00(北京时间)将容器服务CCE Autopilot正式转商用。 服务正式商用后将收取集群管理费用,其余费用与公测期间保持一致,更多收费说明请参见按需计费区域单价。 更多关于CCE Autopilot的产品介绍,请参见什么是Autopilot集群。 如您有任何问题,可随时通过工单与我们联系。 感谢您对华为云的支持! 父主题: 产品变更公告
  • 华为云容器服务CCE Autopilot数据面账单变更公告 发布时间:2024-09-14 华为云计划于2024/09/18 22:00:00(北京时间)对CCE Autopilot数据面CPU、内存资源账单进行调整,调整后CCE Autopilot数据面资源账单的产品类型将从云容器引擎 CCE调整为云容器实例CCI,此次调整资源单价保持不变,已出历史账单不变,不会对您的业务使用造成影响,具体调整如下: 表1 调整前 产品类型 产品 计费模式 使用类型 单价单位 规格 云容器引擎 CCE CCE Autopilot 按需 时长 元/秒 CCE 内存资源 云容器引擎 CCE CCE Autopilot 按需 时长 元/秒 CCE CPU资源 表2 调整后 产品类型 产品 计费模式 使用类型 单价单位 规格 云容器实例 CCI 云容器实例 - Autopilot Resources 按需 时长 元/秒 Autopilot 内存资源 云容器实例 CCI 云容器实例 - Autopilot Resources 按需 时长 元/秒 Autopilot CPU资源 局点上线时间安排: 上线局点 上线时间 西南-贵阳一 2024年9月18日 22:00 广州 2024年9月19日22:00 上海一 2024年9月20日22:00 北京四 2024年9月23日22:00 新加坡 2024年9月24日22:00 曼谷 2024年9月24日22:00 如您有任何问题,可随时通过工单或者服务热线(4000-955-988或950808)与我们联系。 感谢您对华为云的支持! 父主题: 产品变更公告
共100000条