日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常用公有云接入——华为

發(fā)布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常用公有云接入——华为 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、介紹

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)備好接受請求。

鏡像類型

表1?鏡像類型列表

鏡像類型

說明

公共鏡像

常見的標(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ù)鏡像,其中:

  • 系統(tǒng)鏡像:包含用戶運行業(yè)務(wù)所需的操作系統(tǒng)、應(yīng)用軟件的鏡像。系統(tǒng)鏡像可以用于創(chuàng)建云服務(wù)器,遷移用戶業(yè)務(wù)到云。
  • 數(shù)據(jù)鏡像:只包含用戶業(yè)務(wù)數(shù)據(jù)的鏡像。數(shù)據(jù)鏡像可以用于創(chuàng)建云硬盤,將用戶的業(yè)務(wù)數(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)。

表1?彈性云服務(wù)器狀態(tài)說明

狀態(tài)

狀態(tài)屬性

說明

API對應(yī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)。

表1?URI中的參數(shù)說明

參數(shù)

描述

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ù)你正在請求什么類型的操作。

表2?HTTP方法

方法

說明

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。

表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

具體步驟

  • Token認(rèn)證,具體操作請參考獲取請求認(rèn)證。
  • 發(fā)送“POST https://ECS的Endpoint/v1/{tenant_id}/cloudservers”。
  • 在Request Header中增加“X-Auth-Token”。
  • 在Request Body中傳入?yún)?shù)如下: {"server": {"availability_zone": "az1.dc1", //可用區(qū)稱"name": "ecs-test", //自定義彈性云服務(wù)器名稱"imageRef": "ff49b1f1-3e3e-4913-89c6-a026041661e8", //鏡像ID"flavorRef": "c2.medium", //規(guī)格"root_volume": {"volumetype": "SATA", //系統(tǒng)盤類型"size": 40 //系統(tǒng)盤大小},"vpcid": "ba7992d4-db4b-4bb5-b9fb-e9652513bc0e", //云服務(wù)器所在的虛擬私有云"nics": [{"subnet_id": "2191971a-8bf2-4ead-b207-0511dc85d8a3" //子網(wǎng)ID}],"security_groups": [{"id": "6a38a731-7854-4983-a176-491c001c27db" //安全組ID}],"count": 1, //創(chuàng)建的彈性云服務(wù)器數(shù)量"key_name": "KeyPair-d3c1" //使用的密鑰名稱} }

    請求響應(yīng)成功后,返回job_id。

    若請求失敗,則會返回錯誤碼及對應(yīng)的錯誤信息說明,詳細(xì)錯誤碼信息請參考錯誤碼說明。

  • 根據(jù)job_id查詢job詳情,具體操作請參考查詢?nèi)蝿?wù)的執(zhí)行狀態(tài)。

    查詢job詳情返回狀態(tài)status為“SUCCESS”,則表示彈性云服務(wù)器創(chuàng)建成功。

    請求異常返回值說明請參考通用請求返回值。

  • 查詢job詳情的body體中可以獲取到云服務(wù)器ID,根據(jù)獲取到的云服務(wù)器ID可對彈性云服務(wù)器進行查詢、刪除、變更規(guī)格、開機、關(guān)機等操作。
  • ?

    (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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。