华为云用户手册

  • Sdk::CheckNewVersions 场景描述 升级信息查询函数,由工业软件调用。工业软件点击查询升级信息时,调用此函数,向ISCDesk查询是否存在升级版本。如果存在升级信息,则触发“EVENT_UPDATE”升级事件,将升级事件连同升级信息一同告知工业软件,工业软件可自行决定是否退出升级或继续使用。 升级信息(强制升级)样例如下: {"operate":"Update","params":{"fromForceWin":"true"},"comeBackParams":{}} “fromForceWin”字段表示升级类别,当前包含非强制升级和强制升级两种类别。 “fromForceWin”字段值为“false”,表示非强制升级。工业软件可选择是否升级并通知ISCDesk,如果工业软件选择升级,则ISCDesk会在工业软件关闭后进行升级; “fromForceWin”字段值为“true”,表示强制升级。工业软件无法选择是否升级,ISCDesk会在工业软件关闭后进行升级。 当工业软件选择升级或存在强制升级信息时,建议工业软件执行保存并退出操作。 涉及接口 Sdk::CheckNewVersions 调用示例 ResultStatus CheckNewVersions(); 父主题: 升级相关
  • 状态码 HTTP响应状态码如表1所示。 表1 HTTP响应状态码 状态码 编码 错误码说明 100 Continue 继续请求。 这个临时响应用来通知客户端,它的部分请求已经被服务器接收,且仍未被拒绝。 101 Switching Protocols 切换协议。只能切换到更高级的协议。 例如,切换到HTTP的新版本协议。 201 Created 创建类的请求完全成功。 202 Accepted 已经接受请求,但未处理完成。 203 Non-Authoritative Information 非授权信息,请求成功。 204 NoContent 请求完全成功,同时HTTP响应不包含响应体。 在响应OPTIONS方法的HTTP请求时返回此状态码。 205 Reset Content 重置内容,服务器处理成功。 206 Partial Content 服务器成功处理了部分GET请求。 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。 301 Moved Permanently 永久移动,请求的资源已被永久的移动到新的URI,返回信息会包括新的URI。 302 Found 资源被临时移动。 303 See Other 查看其它地址。 使用GET和POST请求查看。 304 Not Modified 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。 305 Use Proxy 所请求的资源必须通过代理访问。 306 Unused 已经被废弃的HTTP状态码。 400 BadRequest 非法请求。 建议直接修改该请求,不要重试该请求。 401 Unauthorized 在客户端提供认证信息后,返回该状态码,表明服务端指出客户端所提供的认证信息不正确或非法。 402 Payment Required 保留请求。 403 Forbidden 请求被拒绝访问。 返回该状态码,表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置为拒绝访问,建议直接修改该请求,不要重试该请求。 404 NotFound 所请求的资源不存在。 建议直接修改该请求,不要重试该请求。 405 MethodNotAllowed 请求中带有该资源不支持的方法。 建议直接修改该请求,不要重试该请求。 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求。 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。 408 Request Time-out 服务器等候请求时发生超时。 客户端可以随时再次提交该请求而无需进行任何更改。 409 Conflict 服务器在完成请求时发生冲突。 返回该状态码,表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成。 410 Gone 客户端请求的资源已经不存在。 返回该状态码,表明请求的资源已被永久删除。 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。 412 Precondition Failed 未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。 414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理。 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。 416 Requested range not satisfiable 客户端请求的范围无效。 417 Expectation Failed 服务器无法满足Expect的请求头信息。 422 UnprocessableEntity 请求格式正确,但是由于含有语义错误,无法响应。 429 TooManyRequests 表明请求超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的Retry-After首部,然后等待该首部指出的时间后再重试。 500 InternalServerError 表明服务端能被请求访问到,但是不能理解用户的请求。 501 Not Implemented 服务器不支持请求的功能,无法完成请求。 502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。 503 ServiceUnavailable 被请求的服务无效。 建议直接修改该请求,不要重试该请求。 504 ServerTimeout 请求在给定的时间内无法完成。客户端仅在为请求指定超时(Timeout)参数时会得到该响应。 505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理。 父主题: 接口使用方法
  • 请求消息 请求方法:POST 请求参数说明请参见下表: 参数 是否必选 类型 取值范围 说明 activity M String 32 接口请求标识,用于区分接口请求场景。 更新实例状态场景取值:updateInstanceStatus instanceId M String 64 实例ID status M String 32 变更状态: FREEZE:冻结 UNFREEZE:解冻 testFlag O String 2 是否为调试请求。 1:调试请求 0:非调试业务 默认取值为“0”。 请求消息示例: curl -X POST 'https://www.isvwebsite.com/saasproduce?signature=95DD9FA6A8C***********5290919BCA3F78B9A254428A692CDF26E×tamp=1680509558159&nonce=9F26B85CAEB3A8439221BA293E9250BC5EA689225B523C291EA75CC76B469510' -H 'Accept:application/json' -H 'Content-Type:application/json;charset=utf8' -d'{"activity":"updateInstanceStatus","instanceId":"10e75*********1b-81d03469a10e","status":"FREEZE","testFlag":"1"}'
  • 响应消息 响应参数说明请参见下表: 参数 是否必选 类型 取值范围 参数说明 resultCode M String 6 调用结果码。 000000:表示资源同步开通 000004:表示资源异步开通 具体请参见《调用结果码说明》。 说明:如果创建实例耗时较长,建议返回0000004,云商店后续会通过查询实例信息接口查询实例开通结果 resultMsg O String 255 调用结果描述。 instanceId M String 64 实例ID 响应消息示例: { "resultCode":"000000", "resultMsg":"success." , "instanceId":"03pf80c2bae96vc49*********" }
  • 接口说明 客户购买商品并付款成功,云商店将调用本接口通知商家创建实例。 商家需要返回此订单的唯一ID(instanceId)。建议此ID直接使用该订单首次请求时云商店传入的businessId,以确保instanceId的唯一性。 在正常购买场景中,请不要阻塞此接口,如果耗时较长,建议异步创建实例,可以先生成instanceId,然后立即返回。 获取订单信息,请参考《在线开通License接口示例代码》。 云商店服务有可能重发请求,针对同一订单号(orderId)和订单行(orderLineId),商家的服务器应当返回相同的instanceId,不应该创建新的License实例,返回之前成功创建的实例id即可。 创建实例流程如下图所示:
  • 请求消息 请求参数说明请参见下表。云商店会结合商家创建上架的商品售卖模式来对应请求,商家也需要根据请求的信息来对应执行生产。 请求方式:POST 参数 是否必选 参数类型 最大字符长度 说明 activity M String 20 接口请求标识,用于区分接口请求场景。 新购场景取值:newInstance orderId M String 64 云商店订单ID。 orderLineId M String 64 云商店订单行ID。 businessId M String 64 云商店业务ID。 每一次请求,businessId皆不一致。 testFlag O String 2 是否为调试请求。 1:调试请求 0:非调试请求 默认取值为“0”。 请求消息示例: curl -X POST 'https://www.isvwebsite.com/saasproduce?signature=11C4CD6279191DE931DEF5C51531DFFA9D37969F4E356B**********8×tamp=1680508066618&nonce=50D83FDECAED6CCD8EF597F2A577950527928BA287D04E6036E92B2806FD17DA' -H 'Accept:application/json' -H 'Content-Type:application/json;charset=utf8' -d'{"activity":"newInstance","businessId":"87b947**********-69420d60e3c8","orderId":" CS 221118******","orderLineId":"CS22111********-000001","testFlag":"0"}'
  • 响应消息 响应参数说明请参见下表: 参数 是否必选 类型 取值范围 说明 resultCode M String 6 调用结果码。 具体请参见《调用结果码说明》。 resultMsg O String 255 调用结果描述。 请及时关注商家信息中客服邮箱以及云商店账号绑定的邮箱的通知,收到调用失败通知邮件及时处理接口异常。 云商店会对接口异常的情况做监控,如商品频繁出现因接口异常的情况,云商店将对该商品做下架处理。 响应消息示例: { "resultCode":"000000", "resultMsg":"success." }
  • 请求消息 请求参数说明请参见下表: 请求方法:POST 参数 是否必选 类型 取值范围 说明 activity M String 32 接口请求标识,用于区分接口请求场景。 过期场景取值:releaseInstance instanceId M String 64 实例ID orderId O String 64 退订商品触发的释放实例场景下会传递退订订单ID orderLineId O String 64 云商店订单行ID。 testFlag O String 2 是否为调试请求。 1:调试请求 0:非调试业务 默认取值为“0”。 请求消息示例: curl -X POST 'https://www.isvwebsite.com/saasproduce?signature=C4E5F264C92F737DEBECB***********80202B59027CEEFC4932×tamp=1680509885590&nonce=A49E8F86EE5BCAFBDFD3E53F1E09A29C6D9E8DACC67382EBCDD02CD55CBBB7AE' -H 'Accept:application/json' -H 'Content-Type:application/json;charset=utf8' -d'{"activity":"releaseInstance","instanceId":"10e758d0**********-81d03469a10e","orderId":"CS22111********VS","orderLineId":"CS221118*******S-000001","testFlag":"0"}'
  • 接口说明 按周期售卖的商品,用户试用转正、续费、退续费后,云商店调用该接口,更新实例的到期日期。 客户商品转正、续费下单或退订续费周期后,云商店将调用该接口请求商家执行业务变更,商家接口需要执行将到期日进行更新,并返回通知云商店。 商家需要保障更新实例接口通畅,如调用失败,将可能导致用户的业务被释放的风险。 请及时关注商家信息中客服邮箱以及云商店账号绑定的邮箱的通知,收到调用失败通知邮件及时处理接口异常。 云商店会对接口异常的情况做监控,如商品频繁出现因接口异常的情况,云商店将对该商品做下架处理。 商品更新实例流程如下图所示:
  • 请求消息 请求参数说明请参见下表: 请求方法:POST 参数 是否必选 类型 取值范围 说明 activity M String 20 接口请求标识,用于区分接口请求场景。 续费场景取值:refreshInstance scene M String 64 场景,触发实例变更的场景: TRIAL_TO_FORMAL:试用转正 RENEWAL:续费 UNSUBSCRIBE_RENEWAL_PERIOD:退续费 orderId M String 64 云商店订单ID, 试用转正时传递转正订单ID 续费时传递当前续费订单ID 退续费时传递需要退订的续费订单ID orderLineId M String 64 云商店订单行ID。 instanceId M String 64 实例ID。 productId O String 64 产品标识,租户续费或转正产品实例时,如果订购周期类型发生变化,会传入变化后的产品类型对应的productId。 expireTime M String 20 过期时间。 格式:yyyyMMddHHmmss testFlag O String 2 是否为调试请求。 1:调试请求 0:非调试请求 默认取值为“0”。 请求消息示例: curl -X POST 'https://www.isvwebsite.com/saasproduce?signature=3F6E6652B7BE26B27ABFC3D112***********20174FE8DE062×tamp=1680509496350&nonce=8BF8496A350E37BDB0E8956D39D433ED417C3FC9459DCFFE7F03BFBF69B12085' -H 'Accept:application/json' -H 'Content-Type:application/json;charset=utf8' -d'{"activity":"refreshInstance","expireTime":"20221124023618256","instanceId":"10e758d0-31ad********03469a10e","orderId":"CS2211*******VS","orderLineId":"CS221******000001","productId":"OFFI461******240","scene":"RENEWAL","testFlag":"0"}'
  • 请求消息 请求参数说明请参见下表: 请求方法:POST 参数 是否必选 类型 取值范围 说明 activity M String 20 接口请求标识,用于区分接口请求场景。 异步申请License场景取值:getLicenseAsync instanceId M String 64 业务资源实例ID effectiveTime M String 32 License生效utc时间 expireTime O String 32 License失效utc时间,包周期类型必输 eventId M String 64 云商店业务流水号,用于商家服务器结合设备指纹,区分是否是同一次申请License的请求,支持License传输中断等业务需要重试的场景 deviceFingerprint O String 1024 设备指纹或硬件识别编码,用于需要绑定设备物理标识信息生成License的场景 testFlag O String 2 是否为调试请求。 1:调试请求 0:非调试请求 默认取值为“0”。 请求消息示例: curl -X POST 'https://www.isvwebsite.com/saasproduce?signature=11C4C*********31DEF5C515*******B8A3A6D8******7A48×tamp=1680508066618&nonce=50D83FDECAED6CCD8EF597F2A577950527928BA287D04E6036E92B2806FD17DA' -H 'Accept:application/json' -H 'Content-Type:application/json;charset=utf8' -d'{"activity":"getLicenseAsync","eventId":"8****e5694*****c8","instanceId":"RA2****4LVS","effectiveTime":"2023-10-27 10:30:15 z","expireTime":"2024-10-27 10:30:15 z","deviceFingerprint":"8******6034e2*****60e1"}'
  • 接口说明 用户通过云商店向商家申请License。 请及时关注商家信息中客服邮箱以及云商店账号绑定的邮箱的通知,收到调用失败通知邮件及时处理接口异常。 云商店会对接口异常的情况做监控,如商品频繁出现因接口异常的情况,云商店将对该商品做下架处理。 云商店服务有可能重发请求,针对同一请求,商家的服务器应当返回相同的License,不应该创建新的License,返回之前成功创建的License即可。 申请License流程如下图所示: 上传License流程如下图所示:
  • 响应消息 响应参数说明请参见下表: 参数 是否必选 类型 取值范围 说明 resultCode M String 6 调用结果码。 000000:表示资源同步开通 000004:表示资源异步开通 具体请参见《调用结果码说明》。 resultMsg O String 255 调用结果描述。 请及时关注商家信息中客服邮箱以及云商店账号绑定的邮箱的通知,收到调用失败通知邮件及时处理接口异常。 云商店会对接口异常的情况做监控,如商品频繁出现因接口异常的情况,云商店将对该商品做下架处理。 响应消息示例: { "resultCode":"000000", "resultMsg":"success." }
  • 操作步骤 在main.tf文件中增加以下内容。 resource "huaweicloud_evs_volume" "myvolume" { name = "myvolume" availability_zone = data.huaweicloud_availability_zones.myaz.names[0] volume_type = "SAS" size = 10 } resource "huaweicloud_compute_volume_attach" "attached" { instance_id = huaweicloud_compute_instance.myinstance.id volume_id = huaweicloud_evs_volume.myvolume.id } 运行 terraform plan 查看资源。 确认资源无误后,运行 terraform apply 开始创建。 云硬盘挂载至云服务器后,需要登录云服务器初始化云硬盘,即格式化云硬盘,之后云硬盘才可以正常使用。
  • 操作步骤 创建OBS存储桶。 创建main.tf文件,输入以下内容,并保存在当前的执行目录中。 resource "huaweicloud_obs_bucket" "myexample" { bucket = "myexample-bucket" acl = "private" tags = { type = "bucket" env = "Test" } } 运行 terraform init 进行初始化。 运行 terraform plan 查看资源。 确认资源无误后,运行 terraform apply 开始创建。 运行 terraform show 可以查看已创建的OBS桶。 上传对象。 支持通过数据流和源文件路径上传对象,在main.tf文件中增加以下内容。 # 通过数据流上传对象 resource "huaweicloud_obs_bucket_object" "myobject1" { bucket = huaweicloud_obs_bucket.myexample.bucket key = "myobject1" content = "content of myobject1" content_type = "application/xml" } # 通过源文件路径上传对象 resource "huaweicloud_obs_bucket_object" "myobject2" { bucket = huaweicloud_obs_bucket.myexample.bucket key = "myobject2" source = "hello.txt" } # 通过源文件路径上传对象并进行服务端加密 resource "huaweicloud_obs_bucket_object" "myobject3" { bucket = huaweicloud_obs_bucket.myexample.bucket key = "myobject3" source = "hello.txt" encryption = true } 运行 terraform plan 查看资源。 确认资源无误后,运行 terraform apply 开始创建。 运行 terraform show 可以查看已上传的对象。 表1 参数说明 资源名称 参数名称 参数说明 huaweicloud_obs_bucket bucket (必填)OBS存储桶名称 约束:在OBS中必须是全局唯一的,包含3到63个字符,允许小写字母、数字、连字符(-)和点号(.),不能以句点(.)或连字符(-)开始或结束,不能包含两个连续的句点(.)或相邻的句点(.)和连字符(-),不能是IP地址。 acl (可选)OBS存储桶访问控制策略 取值范围: private:默认策略,除桶ACL授权外的其他用户无桶的访问权限。 public-read:任何用户都可以对桶内对象进行读操作。 public-read-write:任何用户都可以对桶内对象进行读/写/删除操作。 tags (可选)桶标签 huaweicloud_obs_bucket_object bucket (必填)存储桶名称 key (必填)对象名称 source (可选)待上传对象的源文件路径 content (可选)待上传对象的数据流 content_type (可选)待上传对象的MIME类型 encryption (可选)是否开启桶的默认服务端加密
  • 样例代码 https://github.com/huaweicloud/terraform-provider-huaweicloud/tree/master/examples/rds/mysql https://github.com/huaweicloud/terraform-provider-huaweicloud/tree/master/examples/rds/mysql-with-network
  • 操作步骤 规划并创建虚拟私有云、子网及安全组。 若需要创建新的网络配置,请参考典型网络配置。 若使用已创建的网络配置,需要使用data source获取对应的ID,参考样例如下。 data "huaweicloud_vpc" "myvpc" { name = var.vpc_name } data "huaweicloud_vpc_subnet" "mysubnet" { vpc_id = data.huaweicloud_vpc.myvpc.id name = var.subnet_name } data "huaweicloud_networking_secgroup" "mysecgroup" { name = var.secgroup_name } 创建RDS for MySQL实例。 示例一 使用新建网络配置创建RDS实例,并使用随机密码。 data "huaweicloud_availability_zones" "myaz" {} resource "random_password" "mypassword" { length = 12 special = true override_special = "!@#%^*-_=+" } resource "huaweicloud_rds_instance" "myinstance" { name = "mysql_instance" flavor = "rds.mysql.c2.large.ha" ha_replication_mode = "async" vpc_id = huaweicloud_vpc.myvpc.id subnet_id = huaweicloud_vpc_subnet.mysubnet.id security_group_id = huaweicloud_networking_secgroup.mysecgroup.id availability_zone = [ data.huaweicloud_availability_zones.myaz.names[0], data.huaweicloud_availability_zones.myaz.names[1] ] db { type = "MySQL" version = "8.0" password = random_password.mypassword.result } volume { type = "ULTRAHIGH" size = 40 } } 示例二 使用已有网络配置创建RDS实例 data "huaweicloud_availability_zones" "myaz" {} resource "huaweicloud_rds_instance" "myinstance" { name = "mysql_instance" flavor = "rds.mysql.c2.large.ha" ha_replication_mode = "async" vpc_id = data.huaweicloud_vpc.myvpc.id subnet_id = data.huaweicloud_vpc_subnet.mysubnet.id security_group_id = data.huaweicloud_networking_secgroup.mysecgroup.id availability_zone = [ data.huaweicloud_availability_zones.myaz.names[0], data.huaweicloud_availability_zones.myaz.names[1] ] db { type = "MySQL" version = "8.0" password = var.rds_password } volume { type = "ULTRAHIGH" size = 40 } } 配置变量。 创建variables.tf文件,输入以下内容,并保存在当前的执行目录中。您可以根据实际情况修改变量值。 variable "vpc_name" { default = "vpc-basic" } variable "vpc_cidr" { default = "172.16.0.0/16" } variable "subnet_name" { default = "subent-basic" } variable "subnet_cidr" { default = "172.16.10.0/24" } variable "subnet_gateway" { default = "172.16.10.1" } variable "primary_dns" { default = "100.125.1.250" } 创建资源。 运行 terraform init 进行初始化。 运行 terraform plan 查看资源。 确认资源无误后,运行 terraform apply 开始创建。 运行 terraform show 可以查看已创建的RDS实例信息。 表1 参数说明 资源名称 参数名称 参数说明 huaweicloud_rds_instance name (必填)数据库实例名称,同一租户下,同类型的数据库实例名称可以重名 约束:4~64个字符之间,必须以字母开头,区分大小写,可以包含字母、数字、中划线或者下划线,不能包含其他的特殊字符 flavor (必填)数据库实例规格,本教程使用"rds.mysql.c2.large.ha",实例规格信息也可以通过huaweicloud_rds_flavors查询。 ha_replication_mode (可选)备机同步参数。MySQL的取值为“async”或“semisync”。 availability_zone (必填)实例所在可用区,对于主备实例支持多个可用区,请参见地区和终端节点。 vpc_id (必填)实例所属的VPC ID subnet_id (必填)实例所属的子网网络ID security_group_id (必填)实例所属的安全组ID db type (必填)数据库引擎类型 取值范围:MySQL、PostgreSQL、SQLServer version (必填)数据库引擎版本,MySQL引擎支持5.6、5.7、8.0版本。 password (必填)数据库密码 由大小写字母、数字和特殊符号~!@#%^*-_=+?组成,长度8~32个字符。 建议您输入高强度密码,以提高安全性,防止出现密码被暴力破解等安全风险。 port (可选)数据库端口 约束:MySQL数据库端口设置范围为1024~65535(其中12017和33071被RDS系统占用不可设置),默认3306; volume type (必填)数据库实例磁盘类型 取值范围: ULTRAHIGH,表示SSD; ULTRAHIGHPRO,表示SSD尊享版,仅支持超高性能型尊享版 size (必填)数据库实例磁盘空间大小 取值范围:40GB~4000GB,必须为10的整数倍
  • 环境变量 将region,AK/SK等参数设置为环境变量的方式进行认证,例如: $ export HW_REGION_NAME="cn-north-1" $ export HW_AC CES S_KEY="my-access-key" $ export HW_SECRET_KEY="my-secret-key" 环境变量设置后,只需要声明华为云的provider即可。 provider "huaweicloud" {}
  • 参数说明 表1 Provider认证参数 参数名称 是否必选 环境变量 参数说明 region 是 HW_REGION_NAME 华为云服务所在的区域,可以从地区和终端节点获取。 如果要在不同的region中创建云服务,可以使用alias或者在云服务对应的resource中指定region参数。 access_key 是 HW_ACCESS_KEY 用户的密钥ID,查询方法请参见访问密钥。 secret_key 是 HW_SECRET_KEY 用户的私有访问密钥,查询方法请参见访问密钥。 domain_name 否 HW_DOMAIN_NAME 华为云账号名称,查询方法请参见API凭证。 project_name 否 HW_PROJECT_NAME 华为云项目名称,查询方法请参见API凭证。 enterprise_project_id 否 HW_ENTERPRISE_PROJECT_ID 企业项目ID,关于企业项目ID的获取及企业项目特性的详细信息,请参见《企业管理服务用户指南》。 max_retries 否 HW_MAX_RETRIES 遇到网络传输问题时请求的最大重试次数,默认值为5。
  • 静态凭据 通过配置provider块中的region,AK/SK等参数进行认证,例如: provider "huaweicloud" { region = "cn-north-1" access_key = "my-access-key" secret_key = "my-secret-key" } 使用静态凭据的认证方式比较简单,但需要将AK/SK以明文的形式存储在配置文件中,存在密钥泄露的安全隐患。推荐您使用环境变量的方式进行认证。
  • 应用场景 弹性伸缩服务可根据用户的业务需求,通过策略自动调整其业务的资源。具有自动调整资源、节约成本开支、提高可用性和容错能力的优势。适用以下场景: 访问流量较大的论坛网站,业务负载变化难以预测,需要根据实时监控到的云服务器CPU使用率、内存使用率等指标对云服务器数量进行动态调整。 电商网站,在进行大型促销活动时,需要定时增加云服务器数量和带宽大小,以保证促销活动顺利进行。 视频直播 网站,每天14:00~16:00播出热门节目,每天都需要在该时段增加云服务器数量,增大带宽大小,保证业务的平稳运行。
  • 应用场景 弹性云服务器(Elastic Cloud Server,ECS)是由CPU、内存、操作系统、云硬盘组成的基础的计算组件。弹性云服务器创建成功后,您就可以像使用自己的本地PC或物理服务器一样,在云上使用弹性云服务器。华为云提供了多种类型的弹性云服务器,可满足不同的使用场景。在创建之前,您需要根据实际的应用场景确认弹性云服务器的规格类型,镜像类型,磁盘种类等参数,并选择合适的网络参数和安全组规则。
  • 操作步骤 使用data source查询可用区,规格,镜像和网络参数。 创建main.tf文件,输入以下内容,并保存在当前的执行目录中。 data "huaweicloud_availability_zones" "myaz" {} data "huaweicloud_compute_flavors" "myflavor" { availability_zone = data.huaweicloud_availability_zones.myaz.names[0] performance_type = "normal" cpu_core_count = 2 memory_size = 4 } data "huaweicloud_images_image" "myimage" { name = "Ubuntu 18.04 server 64bit" most_recent = true } data "huaweicloud_vpc_subnet" "mynet" { name = "subnet-default" } data "huaweicloud_networking_secgroup" "mysecgroup" { name = "default" } 创建ECS实例并使用随机密码方式登录。 在main.tf文件中增加以下内容。 resource "random_password" "password" { length = 16 special = true override_special = "!@#$%*" } resource "huaweicloud_compute_instance" "myinstance" { name = "basic" admin_pass = random_password.password.result image_id = data.huaweicloud_images_image.myimage.id flavor_id = data.huaweicloud_compute_flavors.myflavor.ids[0] availability_zone = data.huaweicloud_availability_zones.myaz.names[0] security_group_ids = [data.huaweicloud_networking_secgroup.mysecgroup.id] network { uuid = data.huaweicloud_vpc_subnet.mynet.id } } 运行 terraform init 初始化环境。 运行 terraform plan 查看资源。 确认资源无误后,运行 terraform apply 开始创建。 运行 terraform show 查看已创建的ECS。
  • 操作步骤 在main.tf文件中增加以下内容。 resource "huaweicloud_vpc_eip" "myeip" { publicip { type = "5_bgp" } bandwidth { name = "mybandwidth" size = 8 share_type = "PER" charge_mode = "traffic" } } resource "huaweicloud_compute_eip_associate" "associated" { public_ip = huaweicloud_vpc_eip.myeip.address instance_id = huaweicloud_compute_instance.myinstance.id } 运行 terraform plan 查看资源。 确认资源无误后,运行 terraform apply 开始创建。
  • 操作步骤 配置网络。 创建main.tf文件,输入以下内容,并保存在当前的执行目录中。 resource "huaweicloud_vpc" "vpc_1" { name = var.vpc_name cidr = var.vpc_cidr } resource "huaweicloud_vpc_subnet" "subnet_1" { vpc_id = huaweicloud_vpc.vpc_1.id name = var.subnet_name cidr = var.subnet_cidr gateway_ip = var.subnet_gateway primary_dns = var.primary_dns } 创建两台ECS实例。 在main.tf文件中增加以下内容。 data "huaweicloud_availability_zones" "myaz" {} data "huaweicloud_compute_flavors" "myflavor" { availability_zone = data.huaweicloud_availability_zones.myaz.names[0] performance_type = "normal" cpu_core_count = 2 memory_size = 4 } data "huaweicloud_images_image" "myimage" { name = "Ubuntu 18.04 server 64bit" most_recent = true } data "huaweicloud_networking_secgroup" "mysecgroup" { name = "default" } resource "huaweicloud_compute_instance" "mycompute" { name = "mycompute_${count.index}" image_id = data.huaweicloud_images_image.myimage.id flavor_id = data.huaweicloud_compute_flavors.myflavor.ids[0] availability_zone = data.huaweicloud_availability_zones.myaz.names[0] security_group_ids = [data.huaweicloud_networking_secgroup.mysecgroup.id] network { uuid = huaweicloud_vpc_subnet.subnet_1.id } count = 2 } 申请虚拟IP地址并绑定ECS服务器对应的端口。 在main.tf文件中增加以下内容。 resource "huaweicloud_networking_vip" "vip_1" { network_id = huaweicloud_vpc_subnet.subnet_1.id } # associate ports to the vip resource "huaweicloud_networking_vip_associate" "vip_associated" { vip_id = huaweicloud_networking_vip.vip_1.id port_ids = [ huaweicloud_compute_instance.mycompute[0].network.0.port, huaweicloud_compute_instance.mycompute[1].network.0.port ] } 配置变量。 创建variables.tf文件,输入以下内容,并保存在当前的执行目录中。您可以根据实际情况修改变量值。 variable "vpc_name" { default = "vpc-basic" } variable "vpc_cidr" { default = "172.16.0.0/16" } variable "subnet_name" { default = "subent-basic" } variable "subnet_cidr" { default = "172.16.10.0/24" } variable "subnet_gateway" { default = "172.16.10.1" } variable "primary_dns" { default = "100.125.1.250" } 创建资源。 运行 terraform init 初始化环境。 运行 terraform plan 查看资源。 确认资源无误后,运行 terraform apply 开始创建。 运行 terraform show 查看已创建的资源。
  • 操作步骤 申请弹性公网IP。 创建main.tf文件,输入以下内容,并保存在当前的执行目录中。 resource "huaweicloud_vpc_eip" "eip_1" { publicip { type = "5_bgp" } bandwidth { name = "test" size = 5 share_type = "PER" charge_mode = "traffic" } } 申请NAT网关并配置SNAT规则。 在main.tf文件中增加以下内容。 data "huaweicloud_vpc" "vpc_1" { name = "vpc-default" } data "huaweicloud_vpc_subnet" "subnet_1" { name = "subnet-default" vpc_id = data.huaweicloud_vpc.vpc_1.id } resource "huaweicloud_nat_gateway" "nat_1" { name = "nat-gateway-basic" description = "test for terraform examples" spec = "1" vpc_id = data.huaweicloud_vpc.vpc_1.id subnet_id = data.huaweicloud_vpc_subnet.subnet_1.id } resource "huaweicloud_nat_snat_rule" "snat_1" { floating_ip_id = huaweicloud_vpc_eip.eip_1.id nat_gateway_id = huaweicloud_nat_gateway.nat_1.id network_id = data.huaweicloud_vpc_subnet.subnet_1.id } 表1 参数说明 资源名称 参数名称 参数说明 huaweicloud_nat_gateway name NAT网关的名字,支持数字、字母、_(下划线)、-(中划线)、中文。 description NAT网关的描述。 spec NAT网关的规格。取值为: “1”:小型,SNAT最大连接数10000 “2”:中型,SNAT最大连接数50000 “3”:大型,SNAT最大连接数200000 “4”:超大型,SNAT最大连接数1000000 vpc_id VPC的ID。 subnet_id 子网的网络ID。 huaweicloud_nat_snat_rule floating_ip_id 弹性公网IP的id,多个弹性公网IP使用逗号分隔。 约束:弹性公网IP的id个数不能超过20个。 nat_gateway_id NAT网关的ID。 network_id 规则使用的网络ID。 创建资源。 运行 terraform init 初始化环境。 运行 terraform plan 查看资源。 确认资源无误后,运行 terraform apply 开始创建。
  • 步骤五:配置DaemonSet 将日志配置组名称填写到variables.tf中groups数组内。 groups有且只能填写一个元素,设计为数组是因为架构从上层统一了与DaemonSet的配置格式。 在“日志配置组”页面,单击已创建的日志配置组所在行“操作”列的“配置详情”。 在日志配置组详情页面,选择2.0版本或者3.0版本,并拷贝日志配置组自动生成的IaC代码到业务IaC中。 IaC 2.0格式 在tfdefinition的main.tf中添加: # ============ daemonSet配置 ============ daemonset = var.daemonset # ============ 集群标签配置 ============ resource_tag = var.resource_tag 在tfdefinition的variables.tf中添加: variable "daemonset" { default = [ { # 接入DaemonSet类型,必填 name = "AIOps" # 开启与否,必填 enable = true # 日志路径,选填。固定值:/opt/huawei/logs log_path = "/opt/huawei/logs" # 日志存储限制,选填。默认为最大值 100G limit_size = "100G" # 日志配置分组,必填,当前AIOps场景有且只能填写一个元素 groups = ["logConfigGroupName"] } ] } IaC 3.0格式 resources.yaml中的配置: # ========== daemonSet 实例参数配置 ========== daemonSet: - name: AIOps enable: true logPath: '/opt/huawei/logs' limitSize: 100G groups: ["logConfigGroupName"]
  • 步骤三:创建日志采集配置 在“容器日志接入”页面,选择左侧导航栏的“日志采集配置”。 单击“创建日志采集配置”。 配置日志采集参数,参数说明如表6所示,配置完成后,单击“确定”。 表6 日志采集配置参数说明 参数名称 参数说明 日志项目 选择已创建的日志项目。 日志空间 选择已创建的日志空间。 配置名称 自定义日志采集配置名称。 配置类型 选择日志采集配置类型,选择“FILEBEAT”。 日志类型 输入采集日志类型。 日志路径 填写实际日志路径,可使用通配符进行匹配。 说明: 注意避免同一台主机上下发的多个采集任务重复采集相同的日志文件,会导致filebeat进程异常。 日志TPS TPS表示单实例每秒日志条数,请准确填写,用于推荐资源自动计算。 日志模式 选择日志采集模式,是单行模式还是多行模式。 首行正则表达式 日志模式选择多行模式时,需要输入首行正则表达式。 日志提取规则 根据填写的配置参数会自动生成提取规则。
  • 步骤三:创建日志采集配置 在“容器日志接入”页面,选择左侧导航栏的“日志采集配置”。 单击“创建日志采集配置”。 配置日志采集参数,参数说明如表6所示,配置完成后,单击“确定”。 表6 日志采集配置参数说明 参数名称 参数说明 日志项目 选择已创建的日志项目。 日志空间 选择已创建的日志空间。 配置名称 自定义日志采集配置名称。 配置类型 选择日志采集配置类型,选择“FILEBEAT”。 日志类型 输入采集日志类型。 日志路径 填写实际日志路径,可使用通配符进行匹配。 说明: 注意避免同一台主机上下发的多个采集任务重复采集相同的日志文件,会导致filebeat进程异常。 日志TPS TPS表示单实例每秒日志条数,请准确填写,用于推荐资源自动计算。 日志模式 选择日志采集模式,是单行模式还是多行模式。 首行正则表达式 日志模式选择多行模式时,需要输入首行正则表达式。 日志提取规则 根据填写的配置参数会自动生成提取规则。
  • 步骤五:配置DaemonSet 将日志配置组名称填写到variables.tf中groups数组内。 groups有且只能填写一个元素,设计为数组是因为架构从上层统一了与DaemonSet的配置格式。 在“日志配置组”页面,单击已创建的日志配置组所在行“操作”列的“配置详情”。 在日志配置组详情页面,选择2.0版本或者3.0版本,并拷贝日志配置组自动生成的IaC代码到业务IaC中。 IaC 2.0格式 在tfdefinition的main.tf中添加: # ============ daemonSet配置 ============ daemonset = var.daemonset # ============ 集群标签配置 ============ resource_tag = var.resource_tag 在tfdefinition的variables.tf中添加: variable "daemonset" { default = [ { # 接入DaemonSet类型,必填 name = "AIOps" # 开启与否,必填 enable = true # 日志路径,选填。固定值:/opt/huawei/logs log_path = "/opt/huawei/logs" # 日志存储限制,选填。默认为最大值 100G limit_size = "100G" # 日志配置分组,必填,当前AIOps场景有且只能填写一个元素 groups = ["logConfigGroupName"] } ] } IaC 3.0格式 resources.yaml中的配置: # ========== daemonSet 实例参数配置 ========== daemonSet: - name: AIOps enable: true logPath: '/opt/huawei/logs' limitSize: 100G groups: ["logConfigGroupName"]
共100000条