日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Pulumi實(shí)戰(zhàn)|一款架構(gòu)即代碼的開(kāi)源產(chǎn)品

本篇文章,主要介紹 Pulumi 是什么以及它的相關(guān)原理,并且使用它搭建一個(gè) Nacos 和 SpringBoot 的環(huán)境!

成都創(chuàng)新互聯(lián)公司專注于安丘網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供安丘營(yíng)銷型網(wǎng)站建設(shè),安丘網(wǎng)站制作、安丘網(wǎng)頁(yè)設(shè)計(jì)、安丘網(wǎng)站官網(wǎng)定制、微信小程序定制開(kāi)發(fā)服務(wù),打造安丘網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供安丘網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

一、Pulumi 誕生

(一)誕生原因

Pulumi 是一個(gè)架構(gòu)即代碼的開(kāi)源產(chǎn)品,使用它即可在任何提供 SDK 或者 API 的云商平臺(tái),部署和使用容器、服務(wù)器以及基礎(chǔ)架構(gòu)等云資源。

它提供了多種主流的編程語(yǔ)言,讓使用者可以通過(guò)自己最熟悉的編程語(yǔ)言,編寫(xiě)代碼去控制云平臺(tái)上面的各種云資源。而不是讓初學(xué)者去學(xué)習(xí)那些繁瑣難記的標(biāo)簽語(yǔ)言,降低了其入門(mén)的難度。

1、技術(shù)演化:

1)最初的云廠商僅僅只提供IaaS、PaaS這類云服務(wù),并沒(méi)有把它們組合起來(lái);

IaaS: Infrastructure as a service,基礎(chǔ)設(shè)施即服務(wù)。PaaS: Platform as a service, 平臺(tái)即服務(wù)。SaaS: Software as a service, 軟件即服務(wù)。

誕生一種方式:架構(gòu)即代碼/基礎(chǔ)設(shè)施代碼化,(Infrastructure As Code),即IaC。

結(jié)果:

亞馬遜誕生了類似于云服務(wù) CloudFormation 這類產(chǎn)品,這類產(chǎn)品可以使用一些簡(jiǎn)單的方法創(chuàng)建和管理一系列有關(guān)聯(lián)的AWS的資源。

2)CloudFormation 只支持AWS,ROS只支持阿里云,但是用戶可能會(huì)出于安全或者業(yè)務(wù)考慮,雞蛋不想放在同一個(gè)籃子里,就會(huì)選擇多個(gè)云商;

為了支持多個(gè)云商資源的創(chuàng)建和管理,誕生了開(kāi)源產(chǎn)品 Terraform,該產(chǎn)品支持多個(gè)云商的SDK,使用標(biāo)記語(yǔ)言的方式去創(chuàng)建和管理云資源。

缺點(diǎn):上手難度大,用戶需要額外去學(xué)習(xí)一種特定的標(biāo)記語(yǔ)言 HCL (HashiCorp Configuration Language),對(duì)新入門(mén)同學(xué)不夠友好。

2、Pulumi 登場(chǎng)

由此,誕生了我們的主角(Pulumi):

主要作用:

1)快速組合多類型云資源搭建用戶業(yè)務(wù);

2)滿足用戶多云商多區(qū)域容災(zāi)的業(yè)務(wù)需求;

3)如果使用多個(gè)云商,技術(shù)人員不需要熟練掌握兩家甚至多家云廠商的技術(shù)與服務(wù)產(chǎn)品;

4)標(biāo)記語(yǔ)言需要一定學(xué)習(xí)成本,技術(shù)人員只要會(huì)一種主流語(yǔ)言即可。

(二)Pulumi 組件

工作原理:

個(gè)人理解:

Pulumi 程序運(yùn)行后,Language host 會(huì)把程序代碼轉(zhuǎn)換成 Pulumi 能理解的方式,然后傳遞給部署引擎。

部署引擎根據(jù)資源有無(wú)以及資源類型,對(duì)資源提供商發(fā)起相關(guān)操作!

1、組件(Cli端)

1)語(yǔ)言宿主(Language Hosts)

語(yǔ)言宿主負(fù)責(zé)運(yùn)行一個(gè) Pulumi 程序,并設(shè)置一個(gè)可以向部署引擎注冊(cè)資源的環(huán)境。

a、語(yǔ)言執(zhí)行器

Pulumi 用于啟動(dòng)程序所用語(yǔ)言(如Node或Python)的 Runtime (運(yùn)行時(shí)),此二進(jìn)制文件隨Pulumi CLI一起分發(fā)。

名稱類似:pulumi-language-的二進(jìn)制文件。

它是語(yǔ)言處理中樞,負(fù)責(zé)為您的開(kāi)發(fā)語(yǔ)言準(zhǔn)備好與之對(duì)應(yīng)的環(huán)境。譬如:Python 3.7。

b、Runtime(運(yùn)行時(shí)/語(yǔ)言運(yùn)行器)

它會(huì)負(fù)責(zé)為您編寫(xiě)的程序做好運(yùn)行準(zhǔn)備,并在過(guò)程中監(jiān)控程序的運(yùn)行。

2)部署引擎(Deplayment  Engine)

部署引擎負(fù)責(zé),計(jì)算將基礎(chǔ)架構(gòu)的當(dāng)前狀態(tài)驅(qū)動(dòng)到程序表示的所需狀態(tài)所需的一組操作。

當(dāng)從語(yǔ)言宿主接收到資源注冊(cè)時(shí),引擎會(huì)查詢現(xiàn)有狀態(tài)以確定該資源之前是否已創(chuàng)建。

如果沒(méi)有,引擎會(huì)使用資源提供者來(lái)創(chuàng)建它。

如果它已經(jīng)存在,則引擎與資源提供者一起工作,通過(guò)將資源的舊狀態(tài)與程序表示的資源的新期望狀態(tài)進(jìn)行比較來(lái)確定發(fā)生了什么變化(如果有的話)。

如果有更改,引擎會(huì)確定它是否可以就地更新資源,或者是否必須通過(guò)創(chuàng)建新版本并刪除舊版本來(lái)替換它。

該決定取決于資源的哪些屬性正在發(fā)生變化以及資源本身的類型。

當(dāng)語(yǔ)言宿主與引擎通信它已完成 Pulumi 程序的執(zhí)行時(shí),引擎會(huì)查找任何它沒(méi)有看到新資源注冊(cè)的現(xiàn)有資源并安排這些資源以進(jìn)行刪除。

引擎已經(jīng)被封裝進(jìn)pulumi cli,無(wú)需額外安裝與部署。

3)資源提供商(云商)
a、資源插件

云商不同,插件不同。

b、SDK

云商相關(guān) SDK。

2、組件(Service 端)

該組件主要保存 Pulumi 相關(guān)的 Project、Stack 等配置。

最新版 Pulumi 默認(rèn) Service 是 Pulumi 官方的 SAAS 界面:

1)官方 Service 端

??https://app.pulumi.com/??

2)其它存儲(chǔ)方式充當(dāng) Service 端

當(dāng)然,也可以用其它存儲(chǔ)或者本地來(lái)保存這些配置!

如下面所示,我使用本地充當(dāng) Pulumi Service:

pulumi login file://D:\Lang-Python\Data\Pulumi-Service

二、為什么使用 Pulumi?

Pulumi 特點(diǎn):多語(yǔ)言,多云商的服務(wù)支持。

但是,我個(gè)人覺(jué)得,這并不是我使用他的主要原因。

因?yàn)樗亩嗾Z(yǔ)言和多云商的兩個(gè)特點(diǎn)其實(shí)并沒(méi)有讓我感覺(jué)有多么便利。

多語(yǔ)言:各大云商也基本支持了多種主流編程語(yǔ)言的SDK。

多云商:由于云商支持的資源不同,其實(shí) Pulumi 并不能做到一套代碼走天下,在多個(gè)云商處復(fù)用。

我選它的因素:

它有一個(gè)資源狀態(tài)的管理功能,該功能可以讓你在操作資源時(shí),省略了不少工作!

以及它的資源關(guān)聯(lián)性,即一個(gè)資源的輸出可以充當(dāng)另一個(gè)資源的輸入。

這兩個(gè)特點(diǎn)也是與云商原生 SDK 最大的區(qū)別!

Pulumi 中處理資源之間的關(guān)聯(lián)性,是通過(guò)其 output 機(jī)制實(shí)現(xiàn)的。

三、怎么使用Pulumi?

Pulumi 初體驗(yàn)

1、Pulumi 結(jié)構(gòu)

2、安裝 Pulumi

Pulumi支持多平臺(tái),包括Linux、Windows、MacOS等操作系統(tǒng)。

1)安裝Pulumi需要預(yù)先安裝Chocolatey包管理軟件:

administrator方式打開(kāi)PowerShell命令行:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

參考:https://chocolatey.org/

2)choco安裝 Pulumi

choco install pulumi

3、開(kāi)始使用 Pulumi

1)創(chuàng)建 Pulumi 項(xiàng)目

pulumi new alicloud-python

如果該機(jī)器第一次使用 Pulumi 創(chuàng)建項(xiàng)目的時(shí)候,會(huì)彈出兩個(gè)選項(xiàng):

a)輸入 Key;

b)瀏覽器登錄 Pulumi 后端服務(wù);

如果,選擇“瀏覽器登錄 Pulumi 后端服務(wù)”的選項(xiàng),程序會(huì)觸發(fā)瀏覽器打開(kāi) Pulumi 的 Web 在線登錄界面。

我使用 GitHub 賬號(hào)登錄進(jìn)去,里面是 Pulumi 的 Dashboard 。

該過(guò)程中,會(huì)同時(shí)讓你創(chuàng)建 Project 以及 Stack!

2)編寫(xiě)自己的源代碼,相關(guān)資源類型在其云商 SDK處查看

3)更新操作

pulumi up

該操作會(huì)把 stack 里面的資源進(jìn)行創(chuàng)建或更新操作!

4)銷毀操作

pulumi destroy

危險(xiǎn):該操作會(huì)銷毀 stack 處的所有資源!

四、其它特點(diǎn)

1、即時(shí)性

部分云商對(duì) Pulumi 支持度非常高,比如:Azure。

只要 Azure 上傳新資源,Pulumi 基本當(dāng)天就能使用該資源。

2、DevOps\CICD

Pulumi 自帶 Automation API 組件,可以拋棄 CLI,使用代碼包調(diào)用的方式,直接使用 Pulumi。

換言之,即程序中可以直接調(diào)用 Pulumi 程序。

3、轉(zhuǎn)換器

目前支持這幾種云商轉(zhuǎn)換成 Pulumi 程序。

比如:Terraform 轉(zhuǎn)換成 Pulumi!

??https://www.pulumi.com/tf2pulumi/??

五、搭建 Navos 和 SpringBoot 環(huán)境:

上面大致,講解了 Pulumi 的基本原理和使用方式,下面給大家展示一下,通過(guò) Pulumi 搭建一套環(huán)境的方案!

1、編寫(xiě) Shell 腳本

編寫(xiě)腳本包括多個(gè)步驟:

如上圖所示,搭建一個(gè) Spring Boot 環(huán)境,需要許多前提依賴,比如 Java/Maven/Nacos等,相關(guān)代碼,在后面。

下面是主要的配置文件,主要寫(xiě)明相關(guān)組件的安裝路徑,以及環(huán)境變量等參數(shù)。

其中的許多安裝包,都是事先下載好的,都是組件官網(wǎng)安裝包,讀者請(qǐng)自行下載。

配置文件:

#!/bin/bash
export LC_ALL=en_US.UTF-8

# 當(dāng)前目錄
BASE_DIR=$(pwd)
# 環(huán)境變量保存目錄
PROFILE_ENVS="/etc/profile.envs"

export BASE_DIR
export PROFILE_ENVS
# ****************************** JAVA CONFIG****************************** #
# Java 安裝路徑
JAVA_INSTALL="/usr/local/java11"

# Java 安裝包
JAVA_FOLDER_NAME="jdk-11.0.16"
JAVA_PACKAGE="${JAVA_FOLDER_NAME}_linux-x64_bin.tar.gz"

# JAVA_HOME_PATH
JAVA_HOME_PATH="${JAVA_INSTALL}/${JAVA_FOLDER_NAME}"

export JAVA_INSTALL
export JAVA_FOLDER_NAME
export JAVA_PACKAGE
export JAVA_HOME_PATH

# ****************************** Maven CONFIG****************************** #
# Maven 安裝路徑
MAVEN_INSTALL="/usr/local/maven386"

# Maven 安裝包
MAVEN_FOLDER_NAME="apache-maven-3.8.6"
MAVEN_PACKAGE="${MAVEN_FOLDER_NAME}-bin.tar.gz"

# MAVEN_HOME_PATH
MAVEN_HOME_PATH="${MAVEN_INSTALL}/${MAVEN_FOLDER_NAME}"

export MAVEN_INSTALL
export MAVEN_FOLDER_NAME
export MAVEN_PACKAGE
export MAVEN_HOME_PATH

# ****************************** Nacos CONFIG****************************** #
# Nacos 安裝路徑
NACOS_INSTALL="/usr/local/nacos211"

# Nacos 安裝包
NACOS_FOLDER_NAME="nacos"
NACOS_PACKAGE="nacos-server-2.1.1.tar.gz"

# NACOS_HOME_PATH
NACOS_HOME_PATH="${NACOS_INSTALL}/${NACOS_FOLDER_NAME}"

export NACOS_INSTALL
export NACOS_FOLDER_NAME
export NACOS_PACKAGE
export NACOS_HOME_PATH

# ****************************** SpringBoot Boot CONFIG****************************** #
# SpringBoot Boot 工作臺(tái)
SPRING_BOOT_WORKFLOW="/opt/boot_workflow"
SPRING_BOOT_GROUP_ID="com.gavin"
SPRING_BOOT_ARTIFACT_ID="na-boot"
SPRING_BOOT_VERSION="0.0.1-snapshot"

export SPRING_BOOT_WORKFLOW
export SPRING_BOOT_GROUP_ID
export SPRING_BOOT_ARTIFACT_ID
export SPRING_BOOT_VERSION

方法庫(kù):

add_dir() {
dirs=$*
log "mkdir -p ${dirs}"
mkdir -p "${dirs}" >/dev/null 2>&1
LAST_INFO=$?
if [[ ${LAST_INFO} -eq 0 ]]; then
ok "Folder \"${dirs}\" Create Success"
else
err "Folder \"${dirs}\" Create Failed"
fi
}

1)安裝 Java

function install_java() {
cd "${BASE_DIR}" || return 1

# 添加安裝目錄
add_dir "${JAVA_INSTALL}"

# 解壓縮到安裝目錄
tar -zxf "packages/${JAVA_PACKAGE}" -C "${JAVA_INSTALL}/"

# 添加環(huán)境變量
cat >"${PROFILE_ENVS}/java.sh" <export JAVA_HOME=${JAVA_HOME_PATH}
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
EOF
echo "source ${PROFILE_ENVS}/java.sh" >>/etc/profile

source /etc/profile

# 添加軟鏈接
ln -s "${JAVA_HOME_PATH}/bin/java" /usr/bin/java
ln -s "${JAVA_HOME_PATH}/bin/javac" /usr/bin/javac
}

2)安裝 Maven

function install_maven() {
cd "${BASE_DIR}" || return 1

# 添加安裝目錄
add_dir "${MAVEN_INSTALL}"

# 解壓縮到安裝目錄
tar -zxf "packages/${MAVEN_PACKAGE}" -C "${MAVEN_INSTALL}/"

# 新建倉(cāng)庫(kù)目錄
add_dir "${MAVEN_HOME_PATH}/repository"

# 更換阿里云鏡像并設(shè)置maven倉(cāng)庫(kù)位置
cat >"${MAVEN_HOME_PATH}/conf/settings.xml" <
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocatinotallow="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">








alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central


${MAVEN_HOME_PATH}/repository



EOF

# 添加環(huán)境變量
cat >"${PROFILE_ENVS}/maven.sh" <export MAVEN_HOME=${MAVEN_HOME_PATH}
export PATH=$PATH:$MAVEN_HOME/bin
EOF
echo "source ${PROFILE_ENVS}/maven.sh" >>/etc/profile

source /etc/profile

# 添加軟鏈接
ln -s "${MAVEN_HOME_PATH}/bin/mvn" /usr/bin/mvn
}

3)安裝 Navos

function start_nacos() {
# 單機(jī)模式運(yùn)行 nacos
bash "${NACOS_HOME_PATH}/bin/startup.sh" -m standalone
}

function install_nacos() {
cd "${BASE_DIR}" || return 1

# 添加安裝目錄
add_dir "${NACOS_INSTALL}"

# 解壓縮到安裝目錄
tar -zxf "packages/${NACOS_PACKAGE}" -C "${NACOS_INSTALL}/"

# 啟動(dòng) nacos
start_nacos
}

4)創(chuàng)建 Spring Boot

function create_spring_boot() {
# 添加項(xiàng)目目錄
add_dir "${SPRING_BOOT_WORKFLOW}"

# 進(jìn)入項(xiàng)目目錄
cd "${SPRING_BOOT_WORKFLOW}" || return 1

# maven 創(chuàng)建項(xiàng)目
echo "y" | mvn archetype:generate -DgroupId="${SPRING_BOOT_GROUP_ID}" \
-DartifactId="${SPRING_BOOT_ARTIFACT_ID}" \
-DarchetypeArtifactId=maven-archetype-quickstart \
-Dversinotallow="${SPRING_BOOT_VERSION}"

# 編譯 SpringBoot Boot
compile_spring_boot

# 啟動(dòng) SpringBoot Boot
start_spring_boot
}

function compile_spring_boot() {
cd "${SPRING_BOOT_WORKFLOW}/${SPRING_BOOT_ARTIFACT_ID}/" || return 1

mvn compile
}

function start_spring_boot() {
cd "${SPRING_BOOT_WORKFLOW}/${SPRING_BOOT_ARTIFACT_ID}/" || return 1

# 啟動(dòng)
nohup mvn spring-boot:run -Dspring-boot.run.profiles=prod &
}

5)主執(zhí)行函數(shù)

#!/bin/bash
export LC_ALL=en_US.UTF-8
source ./config.sh
source ./functions.sh
source ./scripts/java.sh
source ./scripts/maven.sh
source ./scripts/nacos.sh
source ./scripts/spring_boot.sh

# 前置處理
pre_deal() {
yum_install_pkg "rsync"
yum_install_pkg "tree"
yum_install_pkg "lsof"
yum_install_pkg "lrzsz"
}

# 前置處理
pre_deal

# 添加 profile 環(huán)境文件夾
add_dir "${PROFILE_ENVS}"

# 安裝 Java
install_java

# 安裝 Maven
install_maven

# 安裝 Nacos
install_nacos

# 創(chuàng)建 SpringBoot Boot 項(xiàng)目
create_spring_boot

6)替換 Java 文件

為了,測(cè)試說(shuō)明,替換 Maven 生成的 Spring Boot 初始代碼!

App.java

package com.gavin;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@EnableAutoConfiguration // 作用: 開(kāi)啟自動(dòng)配置 初始化spring環(huán)境 springmvc環(huán)境
@ComponentScan // 作用: 用來(lái)掃描相關(guān)注解 掃描范圍 當(dāng)前入口類所在的包及子包(com.gavin及其子包)
public class App {
public static void main(String[] args) {
// springApplication: spring應(yīng)用類 作用: 用來(lái)啟動(dòng)springboot應(yīng)用
// 參數(shù)1: 傳入入口類 類對(duì)象 參數(shù)2: main函數(shù)的參數(shù)
SpringApplication.run(App.class, args);
}
}

創(chuàng)建 controller 文件夾:

helloController.java

package com.gavin.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class helloController {
@GetMapping("/hello")
public String hello() {
System.out.println("Hello SpringBoot!!!");
return "Hello SpringBoot";
}
}

2、生成阿里云鏡像

1)Packer介紹

傳統(tǒng)模式下,我們制作鏡像,都是在本地或者公司服務(wù)器上,安裝好相應(yīng)的軟件,然后打成鏡像文件,比較麻煩。

現(xiàn)在介紹一個(gè)直接在云商打包鏡像的利器:Packer,它是與 Terrform 同一個(gè)公司的產(chǎn)品。

官網(wǎng)地址:

Packer by HashiCorp

它利用相關(guān)腳本,即可輕松制作線上鏡像。

2)安裝 Packer

CentOS/RHEL

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install packer

Windows

https://releases.hashicorp.com/packer/1.8.3/packer_1.8.3_windows_386.zip
https://releases.hashicorp.com/packer/1.8.3/packer_1.8.3_windows_amd64.zip

3)打包鏡像腳本

把之前寫(xiě)的腳本壓縮成一個(gè)文件,方便 Packer 執(zhí)行!

SpringBoot.zip

4)創(chuàng)建打包鏡像配置

spring_boot.json

{
"variables": {
"access_key": "ACCESS_KEY",
"secret_key": "SECRET_KEY"
},
"builders": [{
"type":"alicloud-ecs",
"access_key":"ACCESS_KEY",
"secret_key":"SECRET_KEY",
"region":"cn-hangzhou",
"image_name":"packer_spring_boot_image",
"source_image":"centos_7_03_64_20G_alibase_20170818.vhd",
"ssh_username":"root",
"instance_type":"ecs.n2.small",
"internet_charge_type":"PayByTraffic",
"io_optimized":"true"
}],
"provisioners": [{
"type": "file",
"source": "SpringBoot.zip",
"destination": "/tmp/"
},{
"type": "shell",
"inline": [
"sleep 30",
"cd /tmp",
"yum install -y unzip",
"unzip SpringBoot.zip",
"cd SpringBoot",
"sudo chmod 755 main.sh",
"./main.sh"
]
}]
}

5)執(zhí)行鏡像打包(Windows)

F:\PackerSoftware\packer\packer.exe validate spring_boot.json
F:\PackerSoftware\packer\packer.exe build spring_boot.json

3、編寫(xiě) Pulumi 代碼(Python)

下面就是真正用到 Pulumi 的地方了,我們編寫(xiě),一系列 Python 代碼,實(shí)現(xiàn) Spring Boot 項(xiàng)目的完成。

1)創(chuàng)建 VPC

import pulumi_alicloud as alicloud

def create_network(pre_name):
# VPC
vpc_name = "{}_vpc".format(pre_name)
vpc = alicloud.vpc.Network(vpc_name, cidr_block="172.16.0.0/12")

return vpc

2)創(chuàng)建 Switch

import pulumi_alicloud as alicloud

def create_switch(pre_name, az, vpc):
# 交換機(jī)
vswitch_name = "{}_vswitch".format(pre_name)
vswitch = alicloud.vpc.Switch(vswitch_name, zone_id=az, cidr_block="172.16.1.0/24", vpc_id=vpc.id)

return vswitch

3)創(chuàng)建安全組以及安全規(guī)則

需要開(kāi)放的安全組規(guī)則端口為:22、80。22 為 SSH 端口,80 為 Sprint Boot 寫(xiě)的簡(jiǎn)單 Demo 需要放開(kāi)的 HTTP 端口號(hào)。

import pulumi
import pulumi_alicloud as alicloud

def create_security_group(pre_name, vpc):
# 安全組
sg_name = "{}_sg".format(pre_name)
sg_description = "{} security groups".format(pre_name)
sg = alicloud.ecs.SecurityGroup(sg_name, descriptinotallow=sg_description, vpc_id=vpc.id)

return sg

def create_security_group_rule(pre_name, sg, port_range):
# 安全組規(guī)則
sg_rule_name = "{}_sg_rule".format(pre_name)
sg_rule = alicloud.ecs.SecurityGroupRule(
sg_rule_name,
security_group_id=sg.id,
ip_protocol="tcp",
type="ingress",
nic_type="intranet",
port_range=port_range,
cidr_ip="0.0.0.0/0"
)

return sg_rule

4)創(chuàng)建 ECS

鏡像ID為上一步驟(生成阿里云鏡像),生成的鏡像的ID。

import pulumi
import pulumi_alicloud as alicloud

def create_instance(
pre_name,
availability_znotallow=None,
vswitch=None,
sg=None,
password=None,
user_data=None,
instance_type=None,
image_id=None
):
# 實(shí)例
sg_ids = [sg.id]
instance_name = "{}-instance".format(pre_name)
instance = alicloud.ecs.Instance(
instance_name,
availability_znotallow=availability_zone,
instance_type=instance_type,
security_groups=sg_ids,
image_id=image_id,
instance_name=instance_name,
vswitch_id=vswitch.id,
internet_max_bandwidth_out=10,
password=password,
user_data=user_data
)

pulumi.export("{}-IP".format(instance_name), instance.public_ip)

return instance

4、創(chuàng)建實(shí)例

1) pulumi up

pulumi up

2)查看結(jié)果

打開(kāi)瀏覽器,輸入“實(shí)例IP/test/hello”,即可看到 Spring Boot 返回的內(nèi)容!

3) pulumi destroy

如果該實(shí)例不想用了,直接銷毀即可!

5、總結(jié)

六、后記

綜上,本文簡(jiǎn)單介紹了 Pulumi 的基本原理以及簡(jiǎn)單用法。主要是為了起拋磚引玉的作用,個(gè)人認(rèn)為 Pulumi 的好處和用法還有待探索。希望這篇文章能給讀者一定的幫助,謝謝!


當(dāng)前題目:Pulumi實(shí)戰(zhàn)|一款架構(gòu)即代碼的開(kāi)源產(chǎn)品
文章分享:http://www.dlmjj.cn/article/ccdcojs.html