常用公有云接入——华为
一、介紹
1、什么是彈性云服務(wù)器?
彈性云服務(wù)器是由CPU、內(nèi)存、鏡像、云硬盤組成的一種可隨時獲取、彈性可擴展的計算服務(wù)器,同時它結(jié)合虛擬私有云、虛擬防火墻、數(shù)據(jù)多副本保存等能力,為您打造一個高效、可靠、安全的計算環(huán)境,確保您的服務(wù)持久穩(wěn)定運行。彈性云服務(wù)器創(chuàng)建成功后,您就可以像使用自己的本地PC或物理服務(wù)器一樣,在云上使用彈性云服務(wù)器。
彈性云服務(wù)器的開通是自助完成的,您只需要指定CPU、內(nèi)存、鏡像規(guī)格、登錄鑒權(quán)方式即可,同時也可以根據(jù)您的需求隨時調(diào)整您的彈性云服務(wù)器規(guī)格。
產(chǎn)品架構(gòu)
通過和其他產(chǎn)品、服務(wù)組合,彈性云服務(wù)器可以實現(xiàn)計算、存儲、網(wǎng)絡(luò)、鏡像安裝等功能:
- 彈性云服務(wù)器在不同可用區(qū)中部署(可用區(qū)之間通過內(nèi)網(wǎng)連接),一個可用區(qū)發(fā)生故障后不會影響同一區(qū)域內(nèi)的其它可用區(qū)。
- 可以通過虛擬私有云建立專屬的網(wǎng)絡(luò)環(huán)境,設(shè)置子網(wǎng)、安全組,并通過彈性公網(wǎng)IP實現(xiàn)外網(wǎng)鏈接(需帶寬支持)。
- 通過鏡像服務(wù),可以對彈性云服務(wù)器安裝鏡像,也可以通過私有鏡像批量創(chuàng)建彈性云服務(wù)器,實現(xiàn)快速的業(yè)務(wù)部署。
- 通過云硬盤服務(wù)實現(xiàn)數(shù)據(jù)存儲,并通過云硬盤備份服務(wù)實現(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ū)。通過在不同地區(qū)創(chuàng)建彈性云服務(wù)器,可以將應(yīng)用程序設(shè)計的更接近特定客戶的要求,或滿足不同地區(qū)的法律或其他要求。彈性云服務(wù)器使用定價因區(qū)域而異。
每個區(qū)域包含許多不同的稱為“可用區(qū)”的位置,即在同一區(qū)域下,電力、網(wǎng)絡(luò)隔離的物理區(qū)域,可用區(qū)之間內(nèi)網(wǎng)互通,不同可用區(qū)之間物理隔離。每個可用區(qū)都被設(shè)計成不受其他可用區(qū)故障的影響,并提供低價、低延遲的網(wǎng)絡(luò)連接,以連接到同一地區(qū)其他可用區(qū)。通過使用獨立可用區(qū)內(nèi)的彈性云服務(wù)器,可以保護您的應(yīng)用程序不受單一位置故障的影響。
3、存儲
云硬盤的類型
彈性云服務(wù)器使用的云硬盤類型有如下幾種:
- 普通IO:該類型云硬盤的最大IOPS為2200,適用于大容量、讀寫速率中等、事務(wù)性處理較少的應(yīng)用場景,例如企業(yè)的日常辦公應(yīng)用或者小型測試等。
- 高IO:該類型云硬盤的最大IOPS可達(dá)5000,最低讀寫時延為1 ms,適用于主流的高性能、高可靠應(yīng)用場景,例如企業(yè)應(yīng)用、大型開發(fā)測試以及Web服務(wù)器日志等。
- 超高IO:該類型云硬盤的最大IOPS可達(dá)33000,最低讀寫時延為1 ms,適用于超高IO,超大帶寬的讀寫密集型應(yīng)用場景,例如高性能計算應(yīng)用場景,用來部署分布式文件系統(tǒng),或者I/O密集型應(yīng)用場景,用來部署各類NoSQL/關(guān)系型數(shù)據(jù)庫。
- 超高IO (時延優(yōu)化):該類型的云硬盤提供低至1 ms的讀寫時延和高達(dá)1 GB/s的吞吐量,可運行企業(yè)核心業(yè)務(wù),如SAP HANA。?說明:
超高IO (時延優(yōu)化)云硬盤,當(dāng)前僅支持掛載到SAP HANA云服務(wù)器使用。
云硬盤的磁盤模式
云硬盤的磁盤模式分為VBD (虛擬塊存儲設(shè)備 , Virtual Block Device) 類型和SCSI (小型計算機系統(tǒng)接口, Small Computer System Interface) 類型。
- VBD類型:
當(dāng)您通過管理控制臺創(chuàng)建云硬盤時,云硬盤的磁盤模式默認(rèn)為VBD類型。VBD類型的云硬盤只支持簡單的SCSI讀寫命令。
- SCSI類型:
您可以通過管理控制臺創(chuàng)建SCSI類型的云硬盤,該類型的云硬盤支持SCSI指令透傳,允許彈性云服務(wù)器操作系統(tǒng)直接訪問底層存儲介質(zhì)。除了簡單的SCSI讀寫命令,SCSI類型的云硬盤還可以支持更高級的SCSI命令。
4、虛擬私有云
通過虛擬私有云(Virtual Private Cloud,以下簡稱VPC),您可以在自己的邏輯隔離區(qū)域中定義虛擬網(wǎng)絡(luò),為彈性云服務(wù)器構(gòu)建一個邏輯上完全隔離的專有區(qū)域。您還可以在VPC中定義安全組、VPN、IP地址段、帶寬等網(wǎng)絡(luò)特性,方便管理、配置內(nèi)部網(wǎng)絡(luò),進行安全、快捷的網(wǎng)絡(luò)變更。同時,您可以自定義安全組內(nèi)與組間彈性云服務(wù)器的訪問規(guī)則,加強彈性云服務(wù)器的安全保護。
5、鏡像
鏡像
鏡像是一個包含了軟件及必要配置的彈性云服務(wù)器模板,至少包含操作系統(tǒng),還可以包含應(yīng)用軟件(例如,數(shù)據(jù)庫軟件)和私有軟件。通過鏡像,您可以創(chuàng)建彈性云服務(wù)器。
鏡像分為公共鏡像和私有鏡像,公共鏡像為系統(tǒng)默認(rèn)提供的鏡像,私有鏡像為用戶自己創(chuàng)建的鏡像。用戶可以靈活便捷的使用公共鏡像或者私有鏡像申請彈性云服務(wù)器。同時,用戶還能通過已有的彈性云服務(wù)器創(chuàng)建私有鏡像,這樣能快速輕松地啟動能滿足您一切需求的新彈性云服務(wù)器。例如,如果您的應(yīng)用程序是網(wǎng)站或Web服務(wù),您的鏡像可能會包含Web服務(wù)器、相關(guān)靜態(tài)內(nèi)容和動態(tài)頁面代碼。因此,您通過這個鏡像創(chuàng)建彈性云服務(wù)器之后,您的Web服務(wù)器將啟動,并且您的應(yīng)用程序已準(zhǔn)備好接受請求。
鏡像類型
| 公共鏡像 | 常見的標(biāo)準(zhǔn)操作系統(tǒng)鏡像,所有用戶可見,包括操作系統(tǒng)以及預(yù)裝的公共應(yīng)用。 |
| 私有鏡像 | 用戶基于彈性云服務(wù)器或者云硬盤備份(系統(tǒng)盤備份)創(chuàng)建的個人鏡像,僅用戶自己可見。包含操作系統(tǒng)、預(yù)裝的公共應(yīng)用以及用戶的私有應(yīng)用。 私有鏡像包括系統(tǒng)鏡像和數(shù)據(jù)鏡像,其中:
|
| 共享鏡像 | 由其他用戶共享的私有鏡像。 |
| 市場鏡像 | 提供預(yù)裝操作系統(tǒng)、應(yīng)用環(huán)境和各類軟件的優(yōu)質(zhì)第三方鏡像。無需配置,可一鍵部署,滿足建站、應(yīng)用開發(fā)、可視化管理等個性化需求。 |
鏡像和彈性云服務(wù)器
鏡像是彈性云服務(wù)器的操作系統(tǒng)。可以通過鏡像創(chuàng)建彈性云服務(wù)器,也可以將彈性云服務(wù)器轉(zhuǎn)化為鏡像。
6、生命周期
生命周期是指彈性云服務(wù)器從創(chuàng)建到刪除(或釋放)歷經(jīng)的各種狀態(tài)。
| 創(chuàng)建中 | 中間狀態(tài) | 創(chuàng)建彈性云服務(wù)器實例后,在彈性云服務(wù)器狀態(tài)進入運行中之前的狀態(tài)。 | BUILD/BUILDING |
| 正在開機 | 中間狀態(tài) | 彈性云服務(wù)器實例從關(guān)機到運行中的中間狀態(tài)。 | SHUTOFF |
| 運行中 | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實例正常運行狀態(tài)。 在這個狀態(tài)的實例可以運行您的業(yè)務(wù)。 | ACTIVE |
| 正在關(guān)機 | 中間狀態(tài) | 彈性云服務(wù)器實例從運行中到關(guān)機的中間狀態(tài)。 | ACTIVE |
| 關(guān)機 | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實例被正常停止。 在這個狀態(tài)下的實例,不能對外提供業(yè)務(wù)。 | SHUTOFF |
| 重啟中 | 中間狀態(tài) | 彈性云服務(wù)器實例正在進行重啟操作。 | REBOOT |
| 更新規(guī)格中 | 中間狀態(tài) | 彈性云服務(wù)器實例接收變更請求,開始進行變更操作。 | RESIZE |
| 更新規(guī)格校驗中 | 中間狀態(tài) | 彈性云服務(wù)器實例正在校驗變更完成后的配置。 | VERIFY_RESIZE |
| 刪除中 | 中間狀態(tài) | 彈性云服務(wù)器實例處于正在被刪除的狀態(tài)。 如果長時間處于該狀態(tài),則說明出現(xiàn)異常,需要聯(lián)系管理員處理。 | ACTIVE/SHUTOFF/REBOOT/RESIZE/VERIFR_RESIZE/ /HARD_REBOOT/ REVERT_RESIZE/ERROR |
| 已刪除 | 中間狀態(tài) | 彈性云服務(wù)器實例已被正常刪除。在該狀態(tài)下的實例,不能對外提供業(yè)務(wù),并在短時間內(nèi)從系統(tǒng)中徹底清除。 | DELETED |
| 故障 | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實例處于異常狀態(tài)。 在這個狀態(tài)下的實例,不能對外提供業(yè)務(wù),需要聯(lián)系管理員進行處理。 | ERROR |
| 重裝操作系統(tǒng)中 | 中間狀態(tài) | 彈性云服務(wù)器實例接收到重裝操作系統(tǒng)請求,處于重裝操作系統(tǒng)的過程中。 | SHUTOFF |
| 重裝操作系統(tǒng)失敗 | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實例接收到重裝操作系統(tǒng)請求,進行重裝的過程中發(fā)生異常,導(dǎo)致重裝失敗。 在這個狀態(tài)下的實例,不能對外提供業(yè)務(wù),需要聯(lián)系管理員進行處理。 | SHUTOFF |
| 切換操作系統(tǒng)中 | 中間狀態(tài) | 彈性云服務(wù)器實例接收到切換操作系統(tǒng)請求,處于切換操作系統(tǒng)的過程中。 | SHUTOFF |
| 切換操作系統(tǒng)失敗 | 穩(wěn)定狀態(tài) | 彈性云服務(wù)器實例接收到切換操作系統(tǒng)請求,進行切換的過程中發(fā)生異常,導(dǎo)致切換失敗。 在這個狀態(tài)下的實例,不能對外提供業(yè)務(wù),需要聯(lián)系管理員進行處理。 | SHUTOFF |
| 強制重啟中 | 中間狀態(tài) | 彈性云服務(wù)器實例正在進行強制重啟操作。 | HARD_REBOOT |
| 更新規(guī)格回退中 | 中間狀態(tài) | 彈性云服務(wù)器實例正在回退變更規(guī)格的配置。 | REVERT_RESIZE |
| 凍結(jié) | 穩(wěn)定狀態(tài) | 云服務(wù)器實例訂單到期或欠費,被系統(tǒng)管理員停止。 在這個狀態(tài)下的實例,不能對外提供業(yè)務(wù)。系統(tǒng)保留一段時間后,如果未續(xù)費,將自動被刪除。 | SHUTOFF |
| 鎖定 | 中間狀態(tài)/穩(wěn)定狀態(tài) | 狀態(tài)欄顯示,表示云服務(wù)器被鎖定,處于保護狀態(tài)。此時,部分操作將會被禁用,具體請以界面提示為準(zhǔ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、請求URI
請求URI由如下部分組成:
{URI-scheme}://{Endpoint}/{resource-path}?{query-string}
盡管請求URI包含在請求消息頭中,但大多數(shù)語言或框架都要求您從請求消息中單獨傳遞它,所以在此單獨強調(diào)。
| URI-scheme | 表示用于傳輸請求的協(xié)議。 |
| Endpoint | 指定承載REST服務(wù)端點的服務(wù)器域名或IP,從地區(qū)和終端節(jié)點獲取。 |
| resource-path | 資源路徑,也即API訪問路徑。從具體接口的URI模塊獲取,例如“v3/auth/tokens”。 |
| query-string | 可選參數(shù),例如API版本或資源選擇標(biāo)準(zhǔn)。 |
請求方法
HTTP方法(也稱為操作或動詞),它告訴服務(wù)你正在請求什么類型的操作。
| GET | 請求服務(wù)器返回指定資源。 |
| PUT | 請求服務(wù)器更新指定資源。 |
| POST | 請求服務(wù)器新增資源或執(zhí)行特殊操作。 |
| DELETE | 請求服務(wù)器刪除指定資源,如刪除對象等。 |
| HEAD | 請求服務(wù)器資源頭部。 |
| PATCH | 請求服務(wù)器更新資源的部分內(nèi)容。 當(dāng)資源不存在的時候,PATCH可能會去創(chuàng)建一個新的資源。 |
2、請求消息頭
可選的附加請求頭字段,如指定的URI和HTTP方法所要求的字段。詳細(xì)的公共請求消息頭字段請參見?表3。
| X-Sdk-Date | 請求的發(fā)生時間,格式為YYYYMMDD'T'HHMMSS'Z'。 取值為當(dāng)前系統(tǒng)的GMT時間。 | 否 使用AK/SK認(rèn)證時該字段必選。 | 20150907T101459Z |
| Authorization | 簽名認(rèn)證信息。 該值來源于請求簽名結(jié)果。 | 否 使用AK/SK認(rèn)證時該字段必選。 | SDK-HMAC-SHA256 Credential=ZIRRKMTWPTQFQI1WKNKB/20150907//ec2/sdk_request, SignedHeaders=content-type;host;x-sdk-date, Signature=55741b6...e1994 |
| Host | 請求的服務(wù)器信息,從服務(wù)API的URL中獲取。值為hostname[:port]。端口缺省時使用默認(rèn)的端口,https的默認(rèn)端口為443。 | 否 使用AK/SK認(rèn)證時該字段必選。 | code.test.com or code.test.com:443 |
| Content-Type | 發(fā)送的實體的MIME類型。推薦用戶默認(rèn)使用application/json,如果API是對象、鏡像上傳等接口,媒體類型可按照流類型的不同進行確定。 | 是 | application/json |
| Content-Length | 請求body長度,單位為Byte。 | 否 | 3495 |
| X-Project-Id | project id,項目編號。請參考獲取項目ID章節(jié)獲取項目編號。 如果是DeC的請求或者多project的請求則必須傳入project id。 | 否 如果是專屬云場景采用AK/SK 認(rèn)證方式的接口請求或者多project場景采用AK/SK認(rèn)證的接口請求則該字段必選。 | e9993fc787d94b6c886cbaa340f9c0f4 |
| X-Auth-Token | 用戶Token。 獲取Token,請參考《統(tǒng)一身份認(rèn)證服務(wù)API參考》的“獲取用戶Token”章節(jié)。請求響應(yīng)成功后在響應(yīng)消息頭中包含的“X-Subject-Token”的值即為Token值。 | 否 使用Token認(rèn)證時該字段必選。 | 注:以下僅為Token示例片段 MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ |
3、請求消息體
該部分可選。請求消息體通常以結(jié)構(gòu)化格式(如JSON或XML)發(fā)出,與請求消息頭中Content-Type對應(yīng),傳遞除請求消息頭之外的內(nèi)容。
若請求消息體中的參數(shù)支持中文,則中文字符必須為UTF-8編碼。
4、響應(yīng)消息頭
響應(yīng)消息頭包含如下兩部分:
- 一個HTTP狀態(tài)代碼,從2xx成功代碼到4xx或5xx錯誤代碼,或者可以返回服務(wù)定義的狀態(tài)碼。
- 附加響應(yīng)頭字段,如Content-Type響應(yīng)消息頭。詳細(xì)的公共響應(yīng)消息頭字段請參考?表4。
表4?公共響應(yīng)消息頭
名稱
描述
示例
Content-Length
響應(yīng)消息體的字節(jié)長度,單位為Byte。
--
Date
系統(tǒng)響應(yīng)的GMT時間。
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對應(yīng),傳遞除響應(yīng)消息頭之外的內(nèi)容。
發(fā)送請求
共有三種方式可以基于已構(gòu)建好的請求消息發(fā)起請求,分別為:
- cURL
cURL是一個命令行工具,用來執(zhí)行各種URL操作和信息傳輸。cURL充當(dāng)?shù)氖荋TTP客戶端,可以發(fā)送HTTP請求給服務(wù)端,并接收響應(yīng)消息。cURL適用于接口調(diào)試。關(guān)于cURL詳細(xì)信息請參見https://curl.haxx.se/。
- 編碼
通過編碼調(diào)用接口,組裝請求消息,并發(fā)送處理請求消息。
- REST客戶端
Mozilla、Google都為REST提供了圖形化的瀏覽器插件,發(fā)送處理請求消息。針對Firefox,請參見FirefoxREST Client;針對Chrome,請參見Postman。
?
(2)API示例
當(dāng)您使用Token認(rèn)證方式完成認(rèn)證鑒權(quán)時,需要獲取用戶Token并在調(diào)用接口時增加“X-Auth-Token”到業(yè)務(wù)接口請求消息頭中。
- IAM獲取token的API
- ECS創(chuàng)建云服務(wù)器的API
具體步驟
請求響應(yīng)成功后,返回job_id。
若請求失敗,則會返回錯誤碼及對應(yīng)的錯誤信息說明,詳細(xì)錯誤碼信息請參考錯誤碼說明。
查詢job詳情返回狀態(tài)status為“SUCCESS”,則表示彈性云服務(wù)器創(chuàng)建成功。
請求異常返回值說明請參考通用請求返回值。
?
(3)API接口
生命周期管理
- 創(chuàng)建云服務(wù)器
- 創(chuàng)建云服務(wù)器(v1.1版本)
- 刪除云服務(wù)器
- 查詢云服務(wù)器詳情
- 查詢云服務(wù)器詳情列表
- 批量修改彈性云服務(wù)器
狀態(tài)管理
- 批量啟動云服務(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)
- 查詢云服務(wù)器是否配置了自動恢復(fù)動作
- 管理云服務(wù)器自動恢復(fù)動作
- 注冊云服務(wù)器監(jiān)控
規(guī)格管理
- 查詢規(guī)格詳情和規(guī)格擴展信息列表
- 變更云服務(wù)器規(guī)格
- 變更云服務(wù)器規(guī)格(v1.1版本)
- 查詢云服務(wù)器規(guī)格變更支持列表
網(wǎng)卡管理
- 批量添加云服務(wù)器網(wǎng)卡
- 批量刪除云服務(wù)器網(wǎng)卡
- 云服務(wù)器網(wǎng)卡配置虛擬IP地址
- 云服務(wù)器網(wǎng)卡解綁虛擬IP地址
磁盤管理
- 查詢彈性云服務(wù)器磁盤信息
- 查詢彈性云服務(wù)器單個磁盤信息
- 彈性云服務(wù)器掛載磁盤
- 批量掛載指定共享盤
- 彈性云服務(wù)器卸載磁盤
租戶配額管理
- 查詢租戶配額
查詢Job狀態(tài)
- 查詢?nèi)蝿?wù)的執(zhí)行狀態(tài)
總結(jié)
以上是生活随笔為你收集整理的常用公有云接入——华为的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑键盘上实用的8个按键功能强大键盘各个
- 下一篇: sql中索引不会被用到的几种情况