怎么把springboot部署到阿里云_听说“一分钟就能部署阿里云ECS集群”?
生活随笔
收集整理的這篇文章主要介紹了
怎么把springboot部署到阿里云_听说“一分钟就能部署阿里云ECS集群”?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
導(dǎo)讀
“企業(yè)上云”是當(dāng)下大勢所趨,“提效、降成本” 也是企業(yè)上云、遷云和管理云必須關(guān)注的問題。今天我們將從一個集群部署的場景出發(fā),介紹阿里云如何借助生態(tài)工具Terraform持續(xù)降低企業(yè)上云、遷云和管理云成本。
1.為什么要有資源編排傳統(tǒng)運(yùn)維模式下,業(yè)務(wù)上線需經(jīng)過設(shè)備采購,機(jī)器上架,網(wǎng)絡(luò)環(huán)境搭建和系統(tǒng)安裝等準(zhǔn)備階段。隨著云計算的興起,各大公有云廠商均提供了非常友好的交互界面,用戶借助一個瀏覽器就可以按需采購各種云資源,快速實(shí)現(xiàn)業(yè)務(wù)架構(gòu)的搭建。然而,隨著業(yè)務(wù)架構(gòu)的不斷擴(kuò)展,云資源采購的規(guī)模和種類也在持續(xù)增加。當(dāng)用戶需要快速采購大量不同類型的云資源時,云管理頁面間大量的交互操作反而降低了云資源的采購效率。在阿里云控制臺上初始化一個經(jīng)典的VPC網(wǎng)絡(luò)架構(gòu),從創(chuàng)建VPC、交換機(jī)VSwitch到創(chuàng)建Nat網(wǎng)關(guān)、彈性IP再到配置路由等工作,大概要花費(fèi)20分鐘甚至更久。同時,工作成果的不可復(fù)制性,帶來的是跨Region和跨云平臺場景下的重復(fù)勞動。事實(shí)上,對業(yè)務(wù)運(yùn)維人員而言,只關(guān)心對資源的配置,無需關(guān)心這些資源的創(chuàng)建步驟。如同喝咖啡,只需要告訴服務(wù)員喝什么,加不加冰等就夠了。如果有一份完整的云資源采購清單,這張清單清楚的記錄了所需要購買的云資源的種類,規(guī)格,數(shù)量以及各云資源之間的關(guān)系,然后一鍵完成購買,并且當(dāng)業(yè)務(wù)需求發(fā)生變化時,只需要變更清單就可以實(shí)現(xiàn)對云資源的快速變更,那么效率就會提高很多。在云計算中這被稱作資源編排,目前很多云平臺也提供了資源編排的能力,如阿里云的ROS,AWS的CloudFormation等。將云資源、服務(wù)或者操作步驟以代碼的形式定義在模板中,借助編排引擎,實(shí)現(xiàn)資源的自動化管理,這就是基礎(chǔ)設(shè)施即代碼(Infrastructure as Code,簡稱IaC),也是資源編排最高效的實(shí)現(xiàn)模式。然而,多種云編排服務(wù)帶來的是高昂的學(xué)習(xí)成本、低效的代碼復(fù)用率和復(fù)雜的多云協(xié)同工作流程。每一種服務(wù)僅限于管理自家的單一云平臺上,無法滿足對多個云平臺,多種層級(如IaaS,PaaS)資源的統(tǒng)一管理。如何解決如上問題,是否可以使用統(tǒng)一的編排工具,共用一套語法實(shí)現(xiàn)對包括阿里云在內(nèi)的多云的統(tǒng)一管理呢?這就是本文所要介紹的主角 - Terraform。
2.Terraform簡介
Terraform是由Hashicorp公司于2014年推出的一個開源項目,是一個典型的IaC工具。在Terraform中,Infrastructure是一個廣泛的抽象,幾乎涵蓋了所有可以被管理的資源和服務(wù),如計算資源虛擬機(jī),存儲資源磁盤、對象存儲,網(wǎng)絡(luò)資源虛擬網(wǎng)絡(luò)、交換機(jī)、路由器、IP、負(fù)載均衡等,安全資源防火墻、其他安全產(chǎn)品和設(shè)備,數(shù)據(jù)庫資源MySQL、PostgreSQL等等。Terraform與前文提到的ROS等各家的資源編排服務(wù)相比,主要有幾個特點(diǎn):- 開源:從誕生之初,Terraform就是一個開源項目,任何開發(fā)者都可以對其貢獻(xiàn)代碼,完善功能。
- 多云管理:支持對多種云服務(wù)的統(tǒng)一管理,各云服務(wù)廠商提供自家的管理插件Provider(后文會提到),用戶只需要學(xué)習(xí)統(tǒng)一的Terraform語法,選擇不同的Provider,定義不同的資源模板即可。
對不同云服務(wù)廠商云資源的描述可以定義在同一個模板中,相互之間不會產(chǎn)生干擾。 - 面向客戶端:只要在操作機(jī)器上完成對Terraform的安裝,就可以通過簡單的Terraform命令實(shí)現(xiàn)對云資源的一鍵管理,非常方便,無需再借助與API、SDK等方式整合后進(jìn)行調(diào)用。
- 使用場景不同:配置管理工具側(cè)重于操作系統(tǒng)級別配置和管理,如機(jī)器的啟停,系統(tǒng)軟件的安裝和配置等,它的目的是為了實(shí)現(xiàn)對機(jī)器及其上應(yīng)用的控制和管理,而資源編排解決的是基礎(chǔ)設(shè)施整體資源棧的編排和管理問題,觸達(dá)的資源更廣。
- 工作模式不同:資源編排是面向聲明式的。聲明式只關(guān)心最終的操作結(jié)果,對用戶而言,只關(guān)心我定義的那堆資源是否都已經(jīng)創(chuàng)建完成。如果結(jié)果和聲明的不一致,則會觸發(fā)變更操作,直到最終狀態(tài)。而配置管理工具是面向過程式的,過程式需要關(guān)心每一步的操作結(jié)果,在執(zhí)行時通常是串行的,直到所有步驟結(jié)束,如先創(chuàng)建VPC,VSwitch,安全組,然后再利用創(chuàng)建好的資源創(chuàng)建ECS實(shí)例,SLB實(shí)例等。可以理解為按順序自動化執(zhí)行所有的操作。
3.阿里云Terraform初探
接下來,本文將通過一些簡單的操作和介紹,引導(dǎo)大家在阿里云上快速入門Terraform,后續(xù)也會有一系列文章介紹更高級的功能。3.1 安裝Terraform
正如前面提到的,Terraform是一個面向客戶端的工具,在使用Terraform之前,需要在本地安裝Terraform,可參考官方的安裝文檔:https://learn.hashicorp.com/terraform/getting-started/install。如果不想安裝,可以使用阿里云提供的在線服務(wù)Cloud Shell:https://shell.aliyun.com,內(nèi)置了Terraform的運(yùn)行環(huán)境。3.2 Provider:基礎(chǔ)設(shè)施管理驅(qū)動
Provider 是Terraform中一個非常重要的組件,是一個用來管理基礎(chǔ)設(shè)施的后端驅(qū)動,可以理解為Terraform的插件。每個云服務(wù)廠商實(shí)現(xiàn)面向各家云服務(wù)的Provider,其中包含資源元數(shù)據(jù)的定義,上層請求的處理和后端OpenAPI的調(diào)用和響應(yīng)處理。Terraform調(diào)用不同的Provider完成不同類型資源的統(tǒng)一管理。目前大多數(shù)云平臺均實(shí)現(xiàn)了各自的Provider,阿里云提供的Provider為 alicloud。Provider無需手動安裝,Terraform會在 init階段根據(jù)模板中的定義自動加載。Provider通過關(guān)鍵 provider聲明,語法如下:provider?"alicloud"?{ profile = "terraform" region = "cn-hangzhou"}以上代碼顯示聲明了需要加載的Provider插件為 alicloud,大括號中指定了該P(yáng)rovider的配置,其中 profile表示阿里云的認(rèn)證信息可以從Credential文件?~/.aliyun/config.json中名為 terraform的配置信息中讀取;region指明了當(dāng)前模板中定義的資源會被創(chuàng)建在杭州區(qū)域。如果不想使用 profile,可以直接在如上配置中硬編碼 access_key和 secret_key,但是硬編碼的方式存在密鑰泄漏的風(fēng)險,不推薦。運(yùn)行 terraform init自動加載Provider:Provider 也可以省略,即隱式定義。通過環(huán)境變量 ALICLOUD_ACCESS_KEY、ALICLOUD_SECRET_KEY和 ALICLOUD_REGION來設(shè)置Provider所需的必填參數(shù)。?init時,Terraform將通過下文即將講到的Resource和Data Source來識別相應(yīng)的Provider,進(jìn)而完成加載。3.3 Resource:資源的定義和管理
Resource是Terraform中的一個重要概念,是Provider的重要組成部分。每個Resource定義了特定基礎(chǔ)設(shè)施資源的屬性,通過對Create、Update、Read和Delete方法的實(shí)現(xiàn)來管理特定資源的生命周期。3.3.1 Resource 的聲明和定義
Resource通過關(guān)鍵字 resource來聲明,對一個特定資源的定義如下:# 定義一個ECS實(shí)例resource "alicloud_instance" "default" { image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd" instance_type = "ecs.sn1ne.large" instance_name = "my-first-vm" ...}對資源的定義包含如下幾個部分:- alicloud_instance?為資源類型,定義當(dāng)前資源的類型,告訴Terraform這個Resource是阿里云的虛擬機(jī)還是其他資源,如VPC、SLB等。
- default?為資源名稱,資源名稱用來標(biāo)識所定義的資源,在同一個模板(即當(dāng)前運(yùn)行目錄下所有以 .tf?結(jié)尾的文件)中對同一資源類型的標(biāo)識必須唯一。
- 大括號里面的內(nèi)容為參數(shù)配置,用來定義資源屬性,比如實(shí)例的鏡像、規(guī)格、名稱,VPC的網(wǎng)段等。
3.3.2?Resource 的創(chuàng)建
完成對資源的定義,可以先通過?terraform plan預(yù)覽模板中所定義的資源:shell@Alicloud:~$ terraform plan...An execution plan has been generated and is shown below.Resource actions are indicated with the following symbols: + createTerraform will perform the following actions: # alicloud_instance.default will be created + resource "alicloud_instance" "default" { + availability_zone = (known after apply) + host_name = (known after apply) + image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd" + instance_charge_type = "PostPaid" + instance_name = "my-first-vm" + instance_type = "ecs.sn1ne.large" ... }Plan: 1 to add, 0 to change, 0 to destroy.如上輸出可知,Terraform將創(chuàng)建一個資源?alicloud_instance.default,其中某些屬性如 host_name為?known after apply,這個意思是說該參數(shù)的值需要在執(zhí)行 terraform apply之后才能知道,通常這種字段值如果沒有顯示設(shè)置,后端系統(tǒng)將自動生成的或者通過其他Resource和Data Source來設(shè)置。確認(rèn)無誤后,執(zhí)行 terraform apply開始創(chuàng)建資源:shell@Alicloud:~$ terraform applyAn execution plan has been generated and is shown below.Resource actions are indicated with the following symbols: + createTerraform will perform the following actions: # alicloud_instance.default will be created + resource "alicloud_instance" "default" { + availability_zone = (known after apply) ... }Plan: 1 to add, 0 to change, 0 to destroy.Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yesalicloud_instance.default: Creating...alicloud_instance.default: Still creating... [10s elapsed]alicloud_instance.default: Still creating... [20s elapsed]alicloud_instance.default: Creation complete after 23s [id=i-bp18hno0jw73fcbrykt7]Apply complete! Resources: 1 added, 0 changed, 0 destroyed.?為了安全起見, apply之后需要輸入 yes確認(rèn),執(zhí)行完畢后輸出創(chuàng)建后的ECS實(shí)例 ID為?i-bp18hno0jw73fcbrykt7。登錄ECS控制臺驗證如下:3.3.3?Resource 的變更
對于IaC的工具,資源的變更非常簡單,只需要修改模板中定義的屬性值即可。Terraform對資源的變更有兩種情況:- 原地變更(update in-place):即在不改變資源生命周期的情況下,實(shí)現(xiàn)對資源自身屬性的修改,如變更資源的名稱,描述,標(biāo)簽等。
- 重建變更(destroy and then create replacement):某些資源屬性不支持變更,這種情況下,如果修改資源的屬性,Terraform將會先刪除原有的資源,然后按照最新的模板定義創(chuàng)建新的Resource,間接實(shí)現(xiàn)資源的變更操作。對于不支持變更的屬性,阿里云Provider的文檔中,會對該屬性字段顯示聲明為 ForceNew?。
3.3.4? Resource 的查看
想要查看創(chuàng)建完的資源,最簡單的方式是執(zhí)行命令 terraform show,此時終端將會快速展示出所有當(dāng)前模板中定義的資源及其屬性:shell@Alicloud:~$ terraform show# alicloud_instance.default:resource "alicloud_instance" "default" { availability_zone = "cn-hangzhou-g" deletion_protection = false id = "i-bp16oytazedmtelzdgo2" image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd" instance_charge_type = "PostPaid" instance_name = "update-my-first-vm" instance_type = "ecs.sn1ne.large" ... tags = { "Newtag" = "update name" } ...}這種方法固然簡單,但是如果當(dāng)資源非常多的時候,在所有資源中尋找目標(biāo)資源就比較吃力了。此時,可以通過 terraform state模式來實(shí)現(xiàn)對目標(biāo)資源的查看。首先,執(zhí)行 terraform state list羅列出當(dāng)前的所有資源,每個資源顯示格式為 .:shell@Alicloud:~$ terraform state listalicloud_instance.default接著,找到對應(yīng)的資源,執(zhí)行 terraform state show .即可實(shí)現(xiàn)對目標(biāo)資源的查看:shell@Alicloud:~$ terraform state show alicloud_instance.default# alicloud_instance.default:resource "alicloud_instance" "default" { availability_zone = "cn-hangzhou-g" deletion_protection = false id = "i-bp16oytazedmtelzdgo2" image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd" instance_charge_type = "PostPaid" instance_name = "update-my-first-vm" instance_type = "ecs.sn1ne.large" ... tags = { "Newtag" = "update name" } ...}可以看到,其結(jié)果與只有一個資源時 terraform show的結(jié)果是一致的。3.3.5? Resource 的釋放
通常情況下,資源的釋放是通過命令 terraform destroy來執(zhí)行,但是這個命令會將模板中所有定義的資源都刪除,如下:shell@Alicloud:~$ terraform destroy alicloud_instance.default: Refreshing state... [id=i-bp16oytazedmtelzdgo2]An execution plan has been generated and is shown below.Resource actions are indicated with the following symbols: - destroyTerraform will perform the following actions: # alicloud_instance.default will be destroyed - resource "alicloud_instance" "default" { ... - id = "i-bp16oytazedmtelzdgo2" -> null ... - instance_name = "update-my-first-vm" -> null ... }Plan: 0 to add, 0 to change, 1 to destroy.Do you really want to destroy all resources? Terraform will destroy all your managed infrastructure, as shown above. There is no undo. Only 'yes' will be accepted to confirm. Enter a value: yesalicloud_instance.default: Destroying... [id=i-bp16oytazedmtelzdgo2]alicloud_instance.default: Still destroying... [id=i-bp16oytazedmtelzdgo2, 10s elapsed]alicloud_instance.default: Destruction complete after 11sDestroy complete! Resources: 1 destroyed.如果想要刪除其中的某個資源,可以通過 -target=.來指定要刪除的資源,如 terraform destroy -target=alicloud_instance.default,其結(jié)果跟只有一個資源的刪除是一致的。除此之外,歸功于Terraform狀態(tài)的一致性(后面會講到)的特點(diǎn),還有一種間接刪除資源的方式。上文中提到,當(dāng)模板發(fā)生變更的時候,?apply命令會判斷資源不一致而導(dǎo)致觸發(fā)資源的變更,因此,我們可以在模板中把想要刪除的資源定義移除,然后運(yùn)行?apply命令來完成資源的移除。3.4 State:資源的狀態(tài)存儲
細(xì)心的讀者可能會發(fā)現(xiàn),在執(zhí)行 show和 state list命令時,執(zhí)行速度非常快,隨著命令的結(jié)束,資源的屬性就被快速展示,而其他命令的執(zhí)行都需要等幾秒鐘甚至幾分鐘,這個跟Terraform的實(shí)現(xiàn)機(jī)制有關(guān)。Terraform在完成資源的創(chuàng)建和修改之后,會將資源的最新的狀態(tài)和屬性存儲在一個稱之為 state的文件中,文件名默認(rèn)為 terraform.tfstate,文件的默認(rèn)存儲位置是資源模板所在的目錄。這個 state文件可以看作是Terraform存儲資源屬性的“數(shù)據(jù)庫”,當(dāng)執(zhí)行 show和 state list命令時,Terraform直接讀取的是 state文件,無需調(diào)用云平臺的API,而其他的命令需要與API交互后返回。state文件非常重要, 它只從屬于一個特定的模板,模板變, state變。因此,如果 state文件被損壞或者被刪除,Terraform會認(rèn)為其管理的資源發(fā)生了變更和移除(雖然實(shí)際的資源可能依然存在于云平臺),此時再執(zhí)行?apply命令將會按照模板的定義變跟或者重建資源,直到模板對資源的定義與?state中保存的保持一致。state與模板的依附關(guān)系在團(tuán)隊協(xié)作管理的時候尤為重要,在拷貝模板代碼的同時,如果想維護(hù)同一套資源,?state也需要一起拷貝,這在無形中增加了代碼維護(hù)的成本。為了解決這個問題,Terraform提供了遠(yuǎn)端存儲 state的能力 remote state,正如前文提到的,可以將 state文件存放在阿里云的OSS上,以實(shí)現(xiàn)模板與 state的管理分離。模板與 state的高度一致性也是Terraform的一個亮點(diǎn),可以說雖然Terraform是面向客戶端的,但它也是有狀態(tài),這也意味著Terraform所管理的資源,不能通過其他工具和服務(wù)(如控制臺,阿里云CLI,API等)來變更資源,否則,Terraform會在下次執(zhí)行 apply時因為狀態(tài)的不一致而觸發(fā)變更。3.5 Data Source:基礎(chǔ)設(shè)施的動態(tài)查詢
對資源的查詢是運(yùn)維人員或者系統(tǒng)最常使用的操作,比如,查看某個Region下有哪些可用區(qū),某個可用區(qū)下有哪些實(shí)例規(guī)格,每個Region下有哪些鏡像,當(dāng)前賬號下有多少機(jī)器等。通過對資源及其屬性的查詢可以幫助和引導(dǎo)開發(fā)者進(jìn)行下一步的操作。除此之外,在編寫Terraform模板時,Resource使用的參數(shù)有些是固定的靜態(tài)變量,但有些情況下參數(shù)變量不確定或者可選值不清楚或者參數(shù)可能隨時變化。比如我們創(chuàng)建ECS 實(shí)例時,通常需要指定我們自己的鏡像ID和實(shí)例規(guī)格,首先要知道某個鏡像ID對應(yīng)的字符串,特定CPU核數(shù)和內(nèi)存對應(yīng)的實(shí)例規(guī)格;創(chuàng)建VSwitch的時候,需要知道某個Region下有哪些可用區(qū)等,當(dāng)然,我們可以通過控制臺或者幫助文檔手動查詢到這些信息,但是一方面查找不方便,另一方面,我們的模板可能隨時會更新。如果在代碼中硬編碼ImageID,InstanceType和可用區(qū)等信息,一旦我們更新這些信息,模板就需要重新修改代碼,非常不靈活。在Terraform 中,Data Source 提供的就是一個查詢資源的功能,每個Data Source實(shí)現(xiàn)對一個特定資源的動態(tài)查詢:在模板中定義過濾條件,執(zhí)行?plan或者 apply即可動態(tài)返回符合條件的資源。在編寫Resource代碼時非常方便,通過引用的方式可將Data Source的結(jié)果動態(tài)呈現(xiàn)給Resource。Data Source通過?data關(guān)鍵字聲明,如下:// Images data source for image_iddata "alicloud_images" "default" { most_recent = true owners = "system" name_regex = "^ubuntu_18.*_64"}data "alicloud_zones" "default" { available_resource_creation = "VSwitch" enable_details = true}// Instance_types data source for instance_typedata "alicloud_instance_types" "default" { availability_zone = data.alicloud_zones.default.zones.0.id cpu_core_count = 2 memory_size = 4}resource "alicloud_instance" "web" { image_id = data.alicloud_images.default.images[0].id instance_type = data.alicloud_instance_types.default.instance_types[0].id instance_name = "my-first-vm" system_disk_category = "cloud_ssd" ...}如上例子中的ECS Instance沒有指定鏡像ImageID和實(shí)例規(guī)格,而是通過?data引用:Terraform運(yùn)行時將首先根據(jù)鏡像名稱前綴選擇系統(tǒng)鏡像,如果同時有多個鏡像滿足條件,則選擇最新的鏡像。實(shí)例規(guī)格也是類似,在符合創(chuàng)建VSwitch的某個可用區(qū)下選擇2核4G的實(shí)例規(guī)格進(jìn)行返回,并將其中的第一個值賦值給Resource Instance。4.一分鐘部署ECS集群
讀到此處,我們再回頭考慮文章開始提到的:在阿里云控制臺上需要20分鐘甚至更久的時間來初始化一個經(jīng)典的VPC網(wǎng)絡(luò)架構(gòu)。如果要在這個架構(gòu)中搭建一個ECS集群,那么花費(fèi)的時間將會更長。如圖展示了在一個VPC網(wǎng)絡(luò)環(huán)境下,搭建一個單可用區(qū)的ECS集群,并通過Nat網(wǎng)關(guān)和EIP實(shí)現(xiàn)與公網(wǎng)環(huán)境的互通。對于這樣的一個網(wǎng)絡(luò)架構(gòu),如果通過控制臺來一步步搭建,至少需要十幾步的操作和若干頁面間的來回切換,費(fèi)時又費(fèi)力。但如果交給Terraform來做,借助已經(jīng)實(shí)現(xiàn)的Module terraform-alicloud-ecs-cluster,只需一鍵就可在1分鐘內(nèi)搞定16個資源。// 在杭州部署含6個節(jié)點(diǎn)的集群module "cluster" { source = "terraform-aicloud-modules/ecs-cluster/alicloud" region_id = "cn-hangzhou" cluster_size = 6 instance_name = "one-min-deploy-ecs-cluster"}(一鍵部署ECS集群)如果想實(shí)現(xiàn)網(wǎng)絡(luò)架構(gòu)的跨Region復(fù)制或者同時部署,只需修改或者增加Region,執(zhí)行 apply命令即可。// 在杭州部署含6個節(jié)點(diǎn)的集群module "cluster-cn" { source = "terraform-aicloud-modules/ecs-cluster/alicloud" region = "cn-hangzhou" cluster_size = 6 instance_name = "one-min-deploy-ecs-cluster"}// 在德國部署含8個節(jié)點(diǎn)的集群module "cluster-eu" { source = "terraform-aicloud-modules/ecs-cluster/alicloud" region = "eu-central-1" cluster_size = 8 instance_name = "one-min-deploy-ecs-cluster"}...總結(jié)“提效、降成本”在Terraform幫助企業(yè)上云,遷云和管理云中得到了很好的體現(xiàn)。正如上文演示,借助Terraform強(qiáng)大的功能和簡單的編寫語法,一分鐘內(nèi)實(shí)現(xiàn)6個節(jié)點(diǎn)ECS集群的快速部署和多Region的快速復(fù)制,極大地提升了部署效率。阿里云對Terraform的支持力度只會越來越大,保持與控制臺資源管理功能的一致性是阿里云Provider追求的目標(biāo),更多的產(chǎn)品和功能將在Terraform中持續(xù)體現(xiàn),基于Module的解決方案也將陸續(xù)推出,真正做到一個工具實(shí)現(xiàn)對阿里云所有資源的統(tǒng)一管理。Terraform的用法非常多樣靈活,本文只是帶領(lǐng)大家熟悉如何在阿里云上使用Terraform,后續(xù)將推出一系列文章來介紹更多高級的功能,敬請期待。
往
期
導(dǎo)
讀
1.如何打造多語言云計算SDK體系——阿里云SDK體系介紹2.云服務(wù)OpenAPI設(shè)計7大挑戰(zhàn)3.云棲精彩回顧 | 開放平臺專場大咖們都聊了些啥?
總結(jié)
以上是生活随笔為你收集整理的怎么把springboot部署到阿里云_听说“一分钟就能部署阿里云ECS集群”?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 山药籽的功效与作用、禁忌和食用方法
- 下一篇: 姜竹茹的功效与作用、禁忌和食用方法