常用公有云接入——华为
一、介紹
1、什么是彈性云服務(wù)器?
彈性云服務(wù)器是由CPU、內(nèi)存、鏡像、云硬盤(pán)組成的一種可隨時(shí)獲取、彈性可擴(kuò)展的計(jì)算服務(wù)器,同時(shí)它結(jié)合虛擬私有云、虛擬防火墻、數(shù)據(jù)多副本保存等能力,為您打造一個(gè)高效、可靠、安全的計(jì)算環(huán)境,確保您的服務(wù)持久穩(wěn)定運(yùn)行。彈性云服務(wù)器創(chuàng)建成功后,您就可以像使用自己的本地PC或物理服務(wù)器一樣,在云上使用彈性云服務(wù)器。
彈性云服務(wù)器的開(kāi)通是自助完成的,您只需要指定CPU、內(nèi)存、鏡像規(guī)格、登錄鑒權(quán)方式即可,同時(shí)也可以根據(jù)您的需求隨時(shí)調(diào)整您的彈性云服務(wù)器規(guī)格。
產(chǎn)品架構(gòu)
通過(guò)和其他產(chǎn)品、服務(wù)組合,彈性云服務(wù)器可以實(shí)現(xiàn)計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)、鏡像安裝等功能:
- 彈性云服務(wù)器在不同可用區(qū)中部署(可用區(qū)之間通過(guò)內(nèi)網(wǎng)連接),一個(gè)可用區(qū)發(fā)生故障后不會(huì)影響同一區(qū)域內(nèi)的其它可用區(qū)。
- 可以通過(guò)虛擬私有云建立專屬的網(wǎng)絡(luò)環(huán)境,設(shè)置子網(wǎng)、安全組,并通過(guò)彈性公網(wǎng)IP實(shí)現(xiàn)外網(wǎng)鏈接(需帶寬支持)。
- 通過(guò)鏡像服務(wù),可以對(duì)彈性云服務(wù)器安裝鏡像,也可以通過(guò)私有鏡像批量創(chuàng)建彈性云服務(wù)器,實(shí)現(xiàn)快速的業(yè)務(wù)部署。
- 通過(guò)云硬盤(pán)服務(wù)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),并通過(guò)云硬盤(pán)備份服務(wù)實(shí)現(xiàn)數(shù)據(jù)的備份和恢復(fù)。
圖1?ECS產(chǎn)品架構(gòu)?
2、區(qū)域和可用區(qū)
區(qū)域指彈性云服務(wù)器所在的物理位置。
同一區(qū)域內(nèi)可用區(qū)間內(nèi)網(wǎng)互通,不同區(qū)域間內(nèi)網(wǎng)不互通。
公有云在世界不同地區(qū)有數(shù)據(jù)中心。與此相應(yīng),彈性云服務(wù)器可用于不同地區(qū)。通過(guò)在不同地區(qū)創(chuàng)建彈性云服務(wù)器,可以將應(yīng)用程序設(shè)計(jì)的更接近特定客戶的要求,或滿足不同地區(qū)的法律或其他要求。彈性云服務(wù)器使用定價(jià)因區(qū)域而異。
每個(gè)區(qū)域包含許多不同的稱為“可用區(qū)”的位置,即在同一區(qū)域下,電力、網(wǎng)絡(luò)隔離的物理區(qū)域,可用區(qū)之間內(nèi)網(wǎng)互通,不同可用區(qū)之間物理隔離。每個(gè)可用區(qū)都被設(shè)計(jì)成不受其他可用區(qū)故障的影響,并提供低價(jià)、低延遲的網(wǎng)絡(luò)連接,以連接到同一地區(qū)其他可用區(qū)。通過(guò)使用獨(dú)立可用區(qū)內(nèi)的彈性云服務(wù)器,可以保護(hù)您的應(yīng)用程序不受單一位置故障的影響。
3、存儲(chǔ)
云硬盤(pán)的類型
彈性云服務(wù)器使用的云硬盤(pán)類型有如下幾種:
- 普通IO:該類型云硬盤(pán)的最大IOPS為2200,適用于大容量、讀寫(xiě)速率中等、事務(wù)性處理較少的應(yīng)用場(chǎng)景,例如企業(yè)的日常辦公應(yīng)用或者小型測(cè)試等。
- 高IO:該類型云硬盤(pán)的最大IOPS可達(dá)5000,最低讀寫(xiě)時(shí)延為1 ms,適用于主流的高性能、高可靠應(yīng)用場(chǎng)景,例如企業(yè)應(yīng)用、大型開(kāi)發(fā)測(cè)試以及Web服務(wù)器日志等。
- 超高IO:該類型云硬盤(pán)的最大IOPS可達(dá)33000,最低讀寫(xiě)時(shí)延為1 ms,適用于超高IO,超大帶寬的讀寫(xiě)密集型應(yīng)用場(chǎng)景,例如高性能計(jì)算應(yīng)用場(chǎng)景,用來(lái)部署分布式文件系統(tǒng),或者I/O密集型應(yīng)用場(chǎng)景,用來(lái)部署各類NoSQL/關(guān)系型數(shù)據(jù)庫(kù)。
- 超高IO (時(shí)延優(yōu)化):該類型的云硬盤(pán)提供低至1 ms的讀寫(xiě)時(shí)延和高達(dá)1 GB/s的吞吐量,可運(yùn)行企業(yè)核心業(yè)務(wù),如SAP HANA。?說(shuō)明:
超高IO (時(shí)延優(yōu)化)云硬盤(pán),當(dāng)前僅支持掛載到SAP HANA云服務(wù)器使用。
云硬盤(pán)的磁盤(pán)模式
云硬盤(pán)的磁盤(pán)模式分為VBD (虛擬塊存儲(chǔ)設(shè)備 , Virtual Block Device) 類型和SCSI (小型計(jì)算機(jī)系統(tǒng)接口, Small Computer System Interface) 類型。
- VBD類型:
當(dāng)您通過(guò)管理控制臺(tái)創(chuàng)建云硬盤(pán)時(shí),云硬盤(pán)的磁盤(pán)模式默認(rèn)為VBD類型。VBD類型的云硬盤(pán)只支持簡(jiǎn)單的SCSI讀寫(xiě)命令。
- SCSI類型:
您可以通過(guò)管理控制臺(tái)創(chuàng)建SCSI類型的云硬盤(pán),該類型的云硬盤(pán)支持SCSI指令透?jìng)?#xff0c;允許彈性云服務(wù)器操作系統(tǒng)直接訪問(wèn)底層存儲(chǔ)介質(zhì)。除了簡(jiǎn)單的SCSI讀寫(xiě)命令,SCSI類型的云硬盤(pán)還可以支持更高級(jí)的SCSI命令。
4、虛擬私有云
通過(guò)虛擬私有云(Virtual Private Cloud,以下簡(jiǎn)稱VPC),您可以在自己的邏輯隔離區(qū)域中定義虛擬網(wǎng)絡(luò),為彈性云服務(wù)器構(gòu)建一個(gè)邏輯上完全隔離的專有區(qū)域。您還可以在VPC中定義安全組、VPN、IP地址段、帶寬等網(wǎng)絡(luò)特性,方便管理、配置內(nèi)部網(wǎng)絡(luò),進(jìn)行安全、快捷的網(wǎng)絡(luò)變更。同時(shí),您可以自定義安全組內(nèi)與組間彈性云服務(wù)器的訪問(wèn)規(guī)則,加強(qiáng)彈性云服務(wù)器的安全保護(hù)。
5、鏡像
鏡像
鏡像是一個(gè)包含了軟件及必要配置的彈性云服務(wù)器模板,至少包含操作系統(tǒng),還可以包含應(yīng)用軟件(例如,數(shù)據(jù)庫(kù)軟件)和私有軟件。通過(guò)鏡像,您可以創(chuàng)建彈性云服務(wù)器。
鏡像分為公共鏡像和私有鏡像,公共鏡像為系統(tǒng)默認(rèn)提供的鏡像,私有鏡像為用戶自己創(chuàng)建的鏡像。用戶可以靈活便捷的使用公共鏡像或者私有鏡像申請(qǐng)彈性云服務(wù)器。同時(shí),用戶還能通過(guò)已有的彈性云服務(wù)器創(chuàng)建私有鏡像,這樣能快速輕松地啟動(dòng)能滿足您一切需求的新彈性云服務(wù)器。例如,如果您的應(yīng)用程序是網(wǎng)站或Web服務(wù),您的鏡像可能會(huì)包含Web服務(wù)器、相關(guān)靜態(tài)內(nèi)容和動(dòng)態(tài)頁(yè)面代碼。因此,您通過(guò)這個(gè)鏡像創(chuàng)建彈性云服務(wù)器之后,您的Web服務(wù)器將啟動(dòng),并且您的應(yīng)用程序已準(zhǔn)備好接受請(qǐng)求。
鏡像類型
| 公共鏡像 | 常見(jiàn)的標(biāo)準(zhǔn)操作系統(tǒng)鏡像,所有用戶可見(jiàn),包括操作系統(tǒng)以及預(yù)裝的公共應(yīng)用。 |
| 私有鏡像 | 用戶基于彈性云服務(wù)器或者云硬盤(pán)備份(系統(tǒng)盤(pán)備份)創(chuàng)建的個(gè)人鏡像,僅用戶自己可見(jiàn)。包含操作系統(tǒng)、預(yù)裝的公共應(yīng)用以及用戶的私有應(yīng)用。 私有鏡像包括系統(tǒng)鏡像和數(shù)據(jù)鏡像,其中:
|
| 共享鏡像 | 由其他用戶共享的私有鏡像。 |
| 市場(chǎng)鏡像 | 提供預(yù)裝操作系統(tǒng)、應(yīng)用環(huán)境和各類軟件的優(yōu)質(zhì)第三方鏡像。無(wú)需配置,可一鍵部署,滿足建站、應(yīng)用開(kāi)發(fā)、可視化管理等個(gè)性化需求。 |
鏡像和彈性云服務(wù)器
鏡像是彈性云服務(wù)器的操作系統(tǒng)。可以通過(guò)鏡像創(chuàng)建彈性云服務(wù)器,也可以將彈性云服務(wù)器轉(zhuǎn)化為鏡像。
6、生命周期
生命周期是指彈性云服務(wù)器從創(chuàng)建到刪除(或釋放)歷經(jīng)的各種狀態(tài)。
| 創(chuàng)建中 | 中間狀態(tài) | 創(chuàng)建彈性云服務(wù)器實(shí)例后,在彈性云服務(wù)器狀態(tài)進(jìn)入運(yùn)行中之前的狀態(tài)。 | BUILD/BUILDING |
| 正在開(kāi)機(jī) | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例從關(guān)機(jī)到運(yùn)行中的中間狀態(tài)。 | SHUTOFF |
| 運(yùn)行中 | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實(shí)例正常運(yùn)行狀態(tài)。 在這個(gè)狀態(tài)的實(shí)例可以運(yùn)行您的業(yè)務(wù)。 | ACTIVE |
| 正在關(guān)機(jī) | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例從運(yùn)行中到關(guān)機(jī)的中間狀態(tài)。 | ACTIVE |
| 關(guān)機(jī) | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實(shí)例被正常停止。 在這個(gè)狀態(tài)下的實(shí)例,不能對(duì)外提供業(yè)務(wù)。 | SHUTOFF |
| 重啟中 | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例正在進(jìn)行重啟操作。 | REBOOT |
| 更新規(guī)格中 | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例接收變更請(qǐng)求,開(kāi)始進(jìn)行變更操作。 | RESIZE |
| 更新規(guī)格校驗(yàn)中 | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例正在校驗(yàn)變更完成后的配置。 | VERIFY_RESIZE |
| 刪除中 | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例處于正在被刪除的狀態(tài)。 如果長(zhǎng)時(shí)間處于該狀態(tài),則說(shuō)明出現(xiàn)異常,需要聯(lián)系管理員處理。 | ACTIVE/SHUTOFF/REBOOT/RESIZE/VERIFR_RESIZE/ /HARD_REBOOT/ REVERT_RESIZE/ERROR |
| 已刪除 | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例已被正常刪除。在該狀態(tài)下的實(shí)例,不能對(duì)外提供業(yè)務(wù),并在短時(shí)間內(nèi)從系統(tǒng)中徹底清除。 | DELETED |
| 故障 | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實(shí)例處于異常狀態(tài)。 在這個(gè)狀態(tài)下的實(shí)例,不能對(duì)外提供業(yè)務(wù),需要聯(lián)系管理員進(jìn)行處理。 | ERROR |
| 重裝操作系統(tǒng)中 | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例接收到重裝操作系統(tǒng)請(qǐng)求,處于重裝操作系統(tǒng)的過(guò)程中。 | SHUTOFF |
| 重裝操作系統(tǒng)失敗 | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實(shí)例接收到重裝操作系統(tǒng)請(qǐng)求,進(jìn)行重裝的過(guò)程中發(fā)生異常,導(dǎo)致重裝失敗。 在這個(gè)狀態(tài)下的實(shí)例,不能對(duì)外提供業(yè)務(wù),需要聯(lián)系管理員進(jìn)行處理。 | SHUTOFF |
| 切換操作系統(tǒng)中 | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例接收到切換操作系統(tǒng)請(qǐng)求,處于切換操作系統(tǒng)的過(guò)程中。 | SHUTOFF |
| 切換操作系統(tǒng)失敗 | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實(shí)例接收到切換操作系統(tǒng)請(qǐng)求,進(jìn)行切換的過(guò)程中發(fā)生異常,導(dǎo)致切換失敗。 在這個(gè)狀態(tài)下的實(shí)例,不能對(duì)外提供業(yè)務(wù),需要聯(lián)系管理員進(jìn)行處理。 | SHUTOFF |
| 強(qiáng)制重啟中 | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例正在進(jìn)行強(qiáng)制重啟操作。 | HARD_REBOOT |
| 更新規(guī)格回退中 | 中間狀態(tài) | 彈性云服務(wù)器實(shí)例正在回退變更規(guī)格的配置。 | REVERT_RESIZE |
| 凍結(jié) | 穩(wěn)定狀態(tài) | 云服務(wù)器實(shí)例訂單到期或欠費(fèi),被系統(tǒng)管理員停止。 在這個(gè)狀態(tài)下的實(shí)例,不能對(duì)外提供業(yè)務(wù)。系統(tǒng)保留一段時(shí)間后,如果未續(xù)費(fèi),將自動(dòng)被刪除。 | SHUTOFF |
| 鎖定 | 中間狀態(tài)/穩(wěn)定狀態(tài) | 狀態(tài)欄顯示,表示云服務(wù)器被鎖定,處于保護(hù)狀態(tài)。此時(shí),部分操作將會(huì)被禁用,具體請(qǐng)以界面提示為準(zhǔn)。 您可以點(diǎn)擊鎖圖標(biāo)下方的超鏈接,查看加鎖資源。 | - |
?
二、Java SDK
GITHUT地址
package sample;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit;import com.huawei.openstack4j.model.compute.StopType; import com.huawei.openstack4j.model.compute.RebootType; import com.huawei.openstack4j.api.OSClient.OSClientV3; import com.huawei.openstack4j.model.common.Identifier; import com.huawei.openstack4j.model.compute.Action; import com.huawei.openstack4j.model.compute.Server; import com.huawei.openstack4j.model.compute.Server.Status; import com.huawei.openstack4j.openstack.OSFactory;import com.huawei.openstack4j.openstack.ecs.v1.contants.IpType; import com.huawei.openstack4j.openstack.ecs.v1.contants.NetworkChargingMode; import com.huawei.openstack4j.openstack.ecs.v1.contants.ShareType; import com.huawei.openstack4j.openstack.ecs.v1.contants.VolumeType; import com.huawei.openstack4j.openstack.ecs.v1.domain.Bandwidth; import com.huawei.openstack4j.openstack.ecs.v1.domain.CloudServer; import com.huawei.openstack4j.openstack.ecs.v1.domain.CloudServer.CloudServers; import com.huawei.openstack4j.openstack.ecs.v1.domain.DataVolume; import com.huawei.openstack4j.openstack.ecs.v1.domain.FloatingIPCreate; import com.huawei.openstack4j.openstack.ecs.v1.domain.Personality; import com.huawei.openstack4j.openstack.ecs.v1.domain.ResizeServer; import com.huawei.openstack4j.openstack.ecs.v1.domain.RootVolume; import com.huawei.openstack4j.openstack.ecs.v1.domain.ServerCreate; import com.huawei.openstack4j.openstack.ecs.v1.domain.ServerExtendParam; import sun.misc.BASE64Encoder;public class CloudServerV1 {public static void main(String[] args) throws InterruptedException {// Using credentials for authenticationString authUrl = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //endpoint UrlString user = "xxxxx"; //usernameString password = "xxxxx"; //passwordString projectId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //projectIdString userDomainId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //domainId//create connection OSClientV3 os = OSFactory.builderV3().endpoint(authUrl).credentials(user, password, Identifier.byId(userDomainId)).scopeToProject(Identifier.byId(projectId)).authenticate();int count = 1;String flavorId = "s2.xlarge.1";String imageId = "a1e6a557-e6c5-43a0-9d4e-a90fdf376afb";String vpcId = "0d85e49a-6aef-42a9-8583-c86e4317a7e2";String networkId = "319944c8-baac-46da-a3a8-f07956105a4e";String secGroup = "114f5982-ecdc-4297-ae23-e6aa17763c78";String userData_org = "#!/bin/bash \r\n echo 'root:Cloud.1234' | chpasswd ;";byte[] userData_byte = userData_org.getBytes();String userData = new BASE64Encoder().encode(userData_byte);Bandwidth bandwidth = Bandwidth.builder().size(10).shareType(ShareType.PER).chargeMode(NetworkChargingMode.TRAFFIC).build();FloatingIPCreate FIPbuild = FloatingIPCreate.builder().ipType(IpType.BGP).bandwidth(bandwidth).build();ServerCreate creation = ServerCreate.builder().name("test-name").flavorRef(flavorId).imageRef(imageId).userData(userData).vpcId(vpcId).addNetwork(networkId).availabilityZone("eu-de-02").addSecurityGroup(secGroup).addTag("key", "testvalue").publicIP(FIPbuild).keyName("KeyPair-a6c5").addMetadata("Group", "testGroup").addPersonality(Personality.builder().contents("some content").path("/etc/test.txt").build()).rootVolume(RootVolume.builder().type(VolumeType.SSD).build()).addDataVolume(DataVolume.builder().size(10).type(VolumeType.SATA).multiAttach(true).passthrough(true).build()).extendParam(ServerExtendParam.builder().autoRecovery(true).build()).count(count).build();//create serverString jobId = os.ecs().servers().create(creation);if (null != jobId) {System.out.println("create server success, jobId = " + jobId);} else {System.out.println("create server failed");}//get list of serverList<? extends Server> serverList = os.compute().servers().list();if (serverList.size() > 0) {System.out.println("get serverList success, size = " + serverList.size());} else {System.out.println("get serverList failed");}//find server, wait for server status to ACTIVEMap<String , String> filterName = new HashMap<String, String>();filterName.put("name", "test-name");List<? extends Server> servers = os.compute().servers().list(filterName);ArrayList<String> serverIds = new ArrayList<String>();servers = os.compute().servers().list(filterName);for (Server server : servers) {os.compute().servers().waitForServerStatus(server.getId(), Status.ACTIVE, 10, TimeUnit.MINUTES);//get serverCloudServer serverInfo = os.ecs().servers().get(server.getId());if (null != serverInfo) {System.out.println("get serverInfo success, name = " + serverInfo.getName());} else {System.out.println("get serverInfo server failed");}serverIds.add(server.getId());}//reboot serverString rebootJobId = os.ecs().servers().reboot(serverIds, RebootType.SOFT);if (null != rebootJobId) {System.out.println("batch reboot server success, jobId = " + rebootJobId);} else {System.out.println("batch reboot server failed");}//stop serverString stopJobId = os.ecs().servers().stop(serverIds, StopType.SOFT);if (null != stopJobId) {System.out.println("batch stop server success, jobId = " + stopJobId);} else {System.out.println("batch stop server failed");}//start serverString startJobId = os.ecs().servers().start(serverIds);if (null != startJobId) {System.out.println("batch start server success, jobId = " + startJobId);} else {System.out.println("batch start server failed");}//delete serverString deleteJobId = os.ecs().servers().delete(serverIds, false, false);if (null != deleteJobId) {System.out.println("batch delete server success, jobId = " + deleteJobId);} else {System.out.println("batch delete server failed");}//resize serverString newFlavorId = "s2.medium.2";String serverId = "ac91c721-9e8e-4147-83d9-b4f07ad607ed";ResizeServer resize = ResizeServer.builder().flavorRef(newFlavorId).build();os.compute().servers().action(serverId, Action.STOP);os.compute().servers().waitForServerStatus(serverId, Status.SHUTOFF, 3, TimeUnit.MINUTES);String resizeJobId = os.ecs().servers().resize(resize, serverId);if (null != resizeJobId) {System.out.println("Start to resize server, jobId = " + resizeJobId);} else {System.out.println("resize server failed");}//get count and list of serverCloudServers cloudServer = os.ecs().servers().listWithCount();System.out.println("server count: " + cloudServer.getCount());System.out.println("server list: " + cloudServer.getServers());//get count and list of server with parametersMap<String, String> filter = new HashMap<String, String>();filter.put("offset", "0");filter.put("status", "ACTIVE");CloudServers serverObjects = os.ecs().servers().listWithCount(filter);System.out.println("server count: " + serverObjects.getCount());System.out.println("server list: " + serverObjects.getServers());} }?
三、REST API
(1)介紹
1、請(qǐng)求URI
請(qǐng)求URI由如下部分組成:
{URI-scheme}://{Endpoint}/{resource-path}?{query-string}
盡管請(qǐng)求URI包含在請(qǐng)求消息頭中,但大多數(shù)語(yǔ)言或框架都要求您從請(qǐng)求消息中單獨(dú)傳遞它,所以在此單獨(dú)強(qiáng)調(diào)。
| URI-scheme | 表示用于傳輸請(qǐng)求的協(xié)議。 |
| Endpoint | 指定承載REST服務(wù)端點(diǎn)的服務(wù)器域名或IP,從地區(qū)和終端節(jié)點(diǎn)獲取。 |
| resource-path | 資源路徑,也即API訪問(wèn)路徑。從具體接口的URI模塊獲取,例如“v3/auth/tokens”。 |
| query-string | 可選參數(shù),例如API版本或資源選擇標(biāo)準(zhǔn)。 |
請(qǐng)求方法
HTTP方法(也稱為操作或動(dòng)詞),它告訴服務(wù)你正在請(qǐng)求什么類型的操作。
| GET | 請(qǐng)求服務(wù)器返回指定資源。 |
| PUT | 請(qǐng)求服務(wù)器更新指定資源。 |
| POST | 請(qǐng)求服務(wù)器新增資源或執(zhí)行特殊操作。 |
| DELETE | 請(qǐng)求服務(wù)器刪除指定資源,如刪除對(duì)象等。 |
| HEAD | 請(qǐng)求服務(wù)器資源頭部。 |
| PATCH | 請(qǐng)求服務(wù)器更新資源的部分內(nèi)容。 當(dāng)資源不存在的時(shí)候,PATCH可能會(huì)去創(chuàng)建一個(gè)新的資源。 |
2、請(qǐng)求消息頭
可選的附加請(qǐng)求頭字段,如指定的URI和HTTP方法所要求的字段。詳細(xì)的公共請(qǐng)求消息頭字段請(qǐng)參見(jiàn)?表3。
| X-Sdk-Date | 請(qǐng)求的發(fā)生時(shí)間,格式為YYYYMMDD'T'HHMMSS'Z'。 取值為當(dāng)前系統(tǒng)的GMT時(shí)間。 | 否 使用AK/SK認(rèn)證時(shí)該字段必選。 | 20150907T101459Z |
| Authorization | 簽名認(rèn)證信息。 該值來(lái)源于請(qǐng)求簽名結(jié)果。 | 否 使用AK/SK認(rèn)證時(shí)該字段必選。 | SDK-HMAC-SHA256 Credential=ZIRRKMTWPTQFQI1WKNKB/20150907//ec2/sdk_request, SignedHeaders=content-type;host;x-sdk-date, Signature=55741b6...e1994 |
| Host | 請(qǐng)求的服務(wù)器信息,從服務(wù)API的URL中獲取。值為hostname[:port]。端口缺省時(shí)使用默認(rèn)的端口,https的默認(rèn)端口為443。 | 否 使用AK/SK認(rèn)證時(shí)該字段必選。 | code.test.com or code.test.com:443 |
| Content-Type | 發(fā)送的實(shí)體的MIME類型。推薦用戶默認(rèn)使用application/json,如果API是對(duì)象、鏡像上傳等接口,媒體類型可按照流類型的不同進(jìn)行確定。 | 是 | application/json |
| Content-Length | 請(qǐng)求body長(zhǎng)度,單位為Byte。 | 否 | 3495 |
| X-Project-Id | project id,項(xiàng)目編號(hào)。請(qǐng)參考獲取項(xiàng)目ID章節(jié)獲取項(xiàng)目編號(hào)。 如果是DeC的請(qǐng)求或者多project的請(qǐng)求則必須傳入project id。 | 否 如果是專屬云場(chǎng)景采用AK/SK 認(rèn)證方式的接口請(qǐng)求或者多project場(chǎng)景采用AK/SK認(rèn)證的接口請(qǐng)求則該字段必選。 | e9993fc787d94b6c886cbaa340f9c0f4 |
| X-Auth-Token | 用戶Token。 獲取Token,請(qǐng)參考《統(tǒng)一身份認(rèn)證服務(wù)API參考》的“獲取用戶Token”章節(jié)。請(qǐng)求響應(yīng)成功后在響應(yīng)消息頭中包含的“X-Subject-Token”的值即為Token值。 | 否 使用Token認(rèn)證時(shí)該字段必選。 | 注:以下僅為Token示例片段 MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ |
3、請(qǐng)求消息體
該部分可選。請(qǐng)求消息體通常以結(jié)構(gòu)化格式(如JSON或XML)發(fā)出,與請(qǐng)求消息頭中Content-Type對(duì)應(yīng),傳遞除請(qǐng)求消息頭之外的內(nèi)容。
若請(qǐng)求消息體中的參數(shù)支持中文,則中文字符必須為UTF-8編碼。
4、響應(yīng)消息頭
響應(yīng)消息頭包含如下兩部分:
- 一個(gè)HTTP狀態(tài)代碼,從2xx成功代碼到4xx或5xx錯(cuò)誤代碼,或者可以返回服務(wù)定義的狀態(tài)碼。
- 附加響應(yīng)頭字段,如Content-Type響應(yīng)消息頭。詳細(xì)的公共響應(yīng)消息頭字段請(qǐng)參考?表4。
表4?公共響應(yīng)消息頭
名稱
描述
示例
Content-Length
響應(yīng)消息體的字節(jié)長(zhǎng)度,單位為Byte。
--
Date
系統(tǒng)響應(yīng)的GMT時(shí)間。
Wed, 27 Dec 2016 06:49:46 GMT
Content-Type
響應(yīng)消息體的MIME類型。
application/json
5、響應(yīng)消息體
該部分可選。響應(yīng)消息體通常以結(jié)構(gòu)化格式(如JSON或XML)返回,與響應(yīng)消息頭中Content-Type對(duì)應(yīng),傳遞除響應(yīng)消息頭之外的內(nèi)容。
發(fā)送請(qǐng)求
共有三種方式可以基于已構(gòu)建好的請(qǐng)求消息發(fā)起請(qǐng)求,分別為:
- cURL
cURL是一個(gè)命令行工具,用來(lái)執(zhí)行各種URL操作和信息傳輸。cURL充當(dāng)?shù)氖荋TTP客戶端,可以發(fā)送HTTP請(qǐng)求給服務(wù)端,并接收響應(yīng)消息。cURL適用于接口調(diào)試。關(guān)于cURL詳細(xì)信息請(qǐng)參見(jiàn)https://curl.haxx.se/。
- 編碼
通過(guò)編碼調(diào)用接口,組裝請(qǐng)求消息,并發(fā)送處理請(qǐng)求消息。
- REST客戶端
Mozilla、Google都為REST提供了圖形化的瀏覽器插件,發(fā)送處理請(qǐng)求消息。針對(duì)Firefox,請(qǐng)參見(jiàn)FirefoxREST Client;針對(duì)Chrome,請(qǐng)參見(jiàn)Postman。
?
(2)API示例
當(dāng)您使用Token認(rèn)證方式完成認(rèn)證鑒權(quán)時(shí),需要獲取用戶Token并在調(diào)用接口時(shí)增加“X-Auth-Token”到業(yè)務(wù)接口請(qǐng)求消息頭中。
- IAM獲取token的API
- ECS創(chuàng)建云服務(wù)器的API
具體步驟
請(qǐng)求響應(yīng)成功后,返回job_id。
若請(qǐng)求失敗,則會(huì)返回錯(cuò)誤碼及對(duì)應(yīng)的錯(cuò)誤信息說(shuō)明,詳細(xì)錯(cuò)誤碼信息請(qǐng)參考錯(cuò)誤碼說(shuō)明。
查詢job詳情返回狀態(tài)status為“SUCCESS”,則表示彈性云服務(wù)器創(chuàng)建成功。
請(qǐng)求異常返回值說(shuō)明請(qǐng)參考通用請(qǐng)求返回值。
?
(3)API接口
生命周期管理
- 創(chuàng)建云服務(wù)器
- 創(chuàng)建云服務(wù)器(v1.1版本)
- 刪除云服務(wù)器
- 查詢?cè)品?wù)器詳情
- 查詢?cè)品?wù)器詳情列表
- 批量修改彈性云服務(wù)器
狀態(tài)管理
- 批量啟動(dòng)云服務(wù)器
- 批量重啟云服務(wù)器
- 批量關(guān)閉云服務(wù)器
- 重裝彈性云服務(wù)器操作系統(tǒng)(安裝Cloud-init)
- 切換彈性云服務(wù)器操作系統(tǒng)(安裝Cloud-init)
- 重裝彈性云服務(wù)器操作系統(tǒng)(未安裝Cloud-init)
- 切換彈性云服務(wù)器操作系統(tǒng)(未安裝Cloud-init)
- 查詢?cè)品?wù)器是否配置了自動(dòng)恢復(fù)動(dòng)作
- 管理云服務(wù)器自動(dòng)恢復(fù)動(dòng)作
- 注冊(cè)云服務(wù)器監(jiān)控
規(guī)格管理
- 查詢規(guī)格詳情和規(guī)格擴(kuò)展信息列表
- 變更云服務(wù)器規(guī)格
- 變更云服務(wù)器規(guī)格(v1.1版本)
- 查詢?cè)品?wù)器規(guī)格變更支持列表
網(wǎng)卡管理
- 批量添加云服務(wù)器網(wǎng)卡
- 批量刪除云服務(wù)器網(wǎng)卡
- 云服務(wù)器網(wǎng)卡配置虛擬IP地址
- 云服務(wù)器網(wǎng)卡解綁虛擬IP地址
磁盤(pán)管理
- 查詢彈性云服務(wù)器磁盤(pán)信息
- 查詢彈性云服務(wù)器單個(gè)磁盤(pán)信息
- 彈性云服務(wù)器掛載磁盤(pán)
- 批量掛載指定共享盤(pán)
- 彈性云服務(wù)器卸載磁盤(pán)
租戶配額管理
- 查詢租戶配額
查詢Job狀態(tài)
- 查詢?nèi)蝿?wù)的執(zhí)行狀態(tài)
總結(jié)
以上是生活随笔為你收集整理的常用公有云接入——华为的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑键盘上实用的8个按键功能强大键盘各个
- 下一篇: sql中索引不会被用到的几种情况