av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

使用你喜歡的編程語言,將基礎設施作為代碼進行配置

用 Node.js 或其他編程語言為你提供啟動基礎設施所需的一切服務。

網站建設公司,為您提供網站建設,網站制作,網頁設計及定制網站建設服務,專注于成都企業(yè)網站建設,高端網頁制作,對成都木屋等多個行業(yè)擁有豐富的網站建設經驗的網站建設公司。專業(yè)網站設計,網站優(yōu)化推廣哪家好,專業(yè)營銷推廣優(yōu)化,H5建站,響應式網站。

當你在 IT 和技術的世界里遨游時,你會反復遇到一些術語。其中有些術語很難量化,隨著時間的推移,可能會有不同的含義?!癉evOps” 就是一個例子,這個詞似乎(在我看來)會根據(jù)使用它的人而改變;最初的 DevOps 先驅者可能甚至不認識我們今天所說的 DevOps。

如果你是一個軟件開發(fā)者,“基礎架構即代碼Infrastructure as Code”(IaC)可能是其中一個術語。IaC 是使用與你編寫面向用戶的功能相同的軟件開發(fā)實踐來聲明應用程序運行的基礎設施。這通常意味著使用 Git 或 Mercurial 等工具進行版本控制,使用 Puppet、Chef 或 Ansible 進行配置管理。在基礎設施供應層,最常見的技術是 CloudFormation(專用于 AWS),或開源替代品 Terraform,用來創(chuàng)建供你的應用程序運行的混合云資源。

在配置管理領域有很好產品可供選擇,可以將 IaC 寫成配置文件或首選的編程語言,但這種選擇在基礎設施供應領域并不常見。

Pulumi 提供了一個使用標準編程語言來定義基礎設施的方式。它支持一系列語言,包括 JavaScript、TypeScript、Go、Python 和 C#。就像 Terraform 一樣,Pulumi 對許多熟悉的云提供商有一流的支持,比如 AWS、Azure、Google Cloud 和其他提供商。

在本文中,我將向你展示如何使用 Pulumi 以 Node.js 編寫基礎設施。

先決條件

首先,確保你已經做好了使用 Pulumi 的準備。Pulumi 支持所有主流的操作系統(tǒng),所以你安裝其先決條件的方法取決于你使用的操作系統(tǒng)。

首先,安裝你喜歡的編程語言的解釋器。我將使用 TypeScript,所以我需要安裝 node 二進制。請查閱 Node 的安裝說明,了解你的操作系統(tǒng)的信息。你可以在 Mac 或 Linux 上使用 Homebrew 來安裝:

brew install node

在 Linux 上,你可以使用你常用的軟件包管理器,如 apt 或 dnf。

$ sudo dnf install nodejs

無論哪種情況,結果都應該是 node 二進制文件在你的 $PATH 中可用。要確認它是可訪問的,運行:

node --version

接下來,安裝 Pulumi 命令行界面(CLI)。你可以在 Pulumi 的文檔中找到針對不同操作系統(tǒng)的安裝說明。在 Mac 或 Linux 上使用 brew

brew install pulumi

另外,你也可以使用安裝腳本。首先下載并審查它,然后執(zhí)行它:

$ curl -fsSL --output pulumi_installer.sh https://get.pulumi.com/
$ more  pulumi_installer.sh
$ sh ./pulumi_installer.sh

同樣,我們所希望的結果是在你的路徑上有 pulumi 二進制。檢查版本以確保你已經準備好了:

pulumi version
v2.5.0

配置 Pulumi

在你開始配置任何基礎設施之前,給 Pulumi 一個存儲其狀態(tài)的地方。

Pulumi 將其狀態(tài)存儲在后端。默認的后端是 Pulumi 的軟件即服務(它有一個針對個人用戶的免費計劃),但在這個例子中,我使用替代的文件后端。文件后端將在你的本地文件系統(tǒng)上創(chuàng)建一個文件來存儲狀態(tài):

pulumi login --local

如果你打算和別人分享這個項目,文件后臺可能不是一個好的起點。Pulumi 還可以將其狀態(tài)存儲在 AWS S3 等云對象存儲中。要使用它,請創(chuàng)建一個 S3 bucket 并登錄:

pulumi login --cloud-url s3://my-pulumi-state-bucket

現(xiàn)在你已經登錄到了狀態(tài)后端,你可以創(chuàng)建一個項目和一個堆棧了!

在你開始創(chuàng)建 Pulumi 項目之前,請先了解以下 Pulumi 術語,你將在本教程中看到這些術語。

項目

項目project是一個包含 Pulumi.yaml 文件的目錄。這個文件包含了 Pulumi 需要知道的元數(shù)據(jù),以便進行它的工作。在 Pulumi.yaml 文件中可以找到的示例字段有:

  • 運行時(例如,Python、Node、Go、.Net)
  • 項目說明(如“我的第一個 Pulumi 項目”)
  • 項目名稱

項目是一個松散的概念,可以滿足你的需求。一般來說,一個項目包含了一系列的資源,這些資源是你想要提供和控制的東西。你可以選擇擁有資源很少的小型 Pulumi 項目,也可以選擇包含所有你需要的資源的大型項目。隨著你對 Pulumi 越來越熟悉,你想如何布局你的項目會變得更加清晰。

堆棧

Pulumi 堆棧stack允許你根據(jù)可配置的值來區(qū)分你的 Pulumi 項目。一個常見的用途是將一個項目部署到不同的環(huán)境,如開發(fā)或生產環(huán)境,或不同的地區(qū),如歐洲、中東和非洲以及美國。

在入門時,你不大需要一個復雜的堆棧設置,所以本演練使用默認的堆棧名稱 dev。

在 IaC 中使用 TypeScript

你可以使用方便的 pulumi new 命令來初建bootstrap一個 Pulumi 項目。new 命令有一大堆標志和選項,可以幫助你入門 Pulumi,所以請繼續(xù)創(chuàng)建你的第一個項目:

$ pulumi new typescript
This command will walk you through creating a new Pulumi project.

Enter a value or leave blank to accept the (default), and press .
Press ^C at any time to quit.

project name: (pulumi) my-first-project
project description: (A minimal TypeScript Pulumi program) My very first Pulumi program
Created project 'my-first-project'

Please enter your desired stack name.
To create a stack in an organization, use the format / (e.g. `acmecorp/dev`).
stack name: (dev) dev
Created stack 'dev'

Installing dependencies...


> node scripts/postinstall

added 82 packages from 126 contributors and audited 82 packages in 2.84s

13 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

Finished installing dependencies

Your new project is ready to go! 

To perform an initial deployment, run 'pulumi up'

這里發(fā)生了很多事情,我將其展開來說:

第一部分是為你的 Pulumi 項目確定一個模板。我選擇了通用的 typescript 選項,但是有很多選項可供選擇。

這個 new 命令從你的模板庫中抓取模板,并將這個文件復制到本地,包括運行時的依賴關系(在本例中是 package.json)。

new 命令通過在這個目錄下運行 npm install 來安裝這些依賴關系。然后 npm install 下載并安裝運行 Pulumi 程序所需的一切,在這種情況下就是:@pulumi/pulumi NPM 包。

你已經準備好創(chuàng)建你的第一個資源了!

創(chuàng)建你的第一個云資源

資源是一個由你的基礎設施供應軟件生命周期進行管理的東西。資源一般是一個云提供商對象cloud provider object,比如 S3 桶。Pulumi 的提供商處理 Pulumi 資源,提供商是具體的云提供商。Pulumi 有大約 40 個提供商可供你使用,但對于你的第一個資源,使用一個最簡單的:隨機提供商random provider。

隨機提供者顧名思義:它冪等地創(chuàng)建一個隨機資源(例如,可以是一個字符串),并將其存儲在 Pulumi 狀態(tài)中。

使用 npm 將其添加到你的 Pulumi 項目中作為依賴關系:

npm install @pulumi/random

npm 包管理器下載并安裝隨機提供者包,并為你安裝?,F(xiàn)在你已經準備好編寫你的 Pulumi 程序了。

當你之前生成你的項目時,Pulumi 的初建過程創(chuàng)建了一個 index.ts TypeScript 文件。在你喜歡的集成開發(fā)環(huán)境(IDE)中打開它,并添加你的第一個資源:

import * as pulumi from "@pulumi/pulumi";
import * as random from "@pulumi/random";

const password = new random.RandomString(`password`, {
    length: 10
})

如果你對 TypeScript 或 JavaScript 非常熟悉,這看起來會非常熟悉,因為它是用你熟悉的編程語言編寫的。如果你使用的是 Pulumi 支持的其他語言之一,也是一樣的。這里是之前的那個隨機資源,但這次是用 Python 寫的:

import pulumi_random as random

password = random.RandomString("password", length=10)

一個 Pulumi 項目目前只支持單一一種語言,但每個項目都可以引用其他語言編寫的項目,這對于多語言團隊的成員來說是一個很有用的技巧。

你已經編寫了第一個 Pulumi 資源?,F(xiàn)在你需要部署它。

離開編輯器,回到命令行。在你的項目目錄下,運行 pulumi up,然后看著神奇的事情發(fā)生:

pulumi up

Previewing update (dev):
     Type                          Name                  Plan
 +   pulumi:pulumi:Stack           my-first-project-dev  create
 +   └─ random:index:RandomString  password              create

Resources:
    + 2 to create

Do you want to perform this update? yes
Updating (dev):
     Type                          Name                  Status
 +   pulumi:pulumi:Stack           my-first-project-dev  created
 +   └─ random:index:RandomString  password              created

Resources:
    + 2 created

Duration: 2s

Permalink: file:///Users/lbriggs/.pulumi/stacks/dev.json

太好了,你有了第一個 Pulumi 資源! 雖然你可能很享受這種成就感,但不幸的是,這個隨機資源并沒有那么有用:它只是一個隨機的字符串,你甚至看不到它是什么。先解決這部分問題。修改你之前的程序,在你創(chuàng)建的常量中加入 export

import * as pulumi from "@pulumi/pulumi";
import * as random from "@pulumi/random";

export const password = new random.RandomString(`password`, {
    length: 10
})

重新運行 pulumi up,看看輸出:

pulumi up
Previewing update (dev):
     Type                 Name                  Plan
     pulumi:pulumi:Stack  my-first-project-dev

Outputs:
  + password: {
      + id             : "&+r?{}J$J7"
      + keepers        : output
      + length         : 10
      + lower          : true
      + minLower       : 0
      + minNumeric     : 0
      + minSpecial     : 0
      + minUpper       : 0
      + number         : true
      + overrideSpecial: output
      + result         : "&+r?{}J$J7"
      + special        : true
      + upper          : true
      + urn            : "urn:pulumi:dev::my-first-project::random:index/randomString:RandomString::password"
    }

Resources:
    2 unchanged

Do you want to perform this update? yes
Updating (dev):
     Type                 Name                  Status
     pulumi:pulumi:Stack  my-first-project-dev

Outputs:
  + password: {
      + id        : "&+r?{}J$J7"
      + length    : 10
      + lower     : true
      + minLower  : 0
      + minNumeric: 0
      + minSpecial: 0
      + minUpper  : 0
      + number    : true
      + result    : "&+r?{}J$J7"
      + special   : true
      + upper     : true
      + urn       : "urn:pulumi:dev::my-first-project::random:index/randomString:RandomString::password"
    }

Resources:
    2 unchanged

Duration: 1s
Permalink: file:///Users/lbriggs/.pulumi/stacks/dev.json

現(xiàn)在你可以在 Outputs 的 result 部分下看到一個隨機生成的字符串。你現(xiàn)在可以看到你創(chuàng)建的資源有很多屬性。

這一切都很好,但如果你想享受 IaC,你得提供一些隨機字符串以外的東西。試試吧。

部署一個容器

到目前為止,你已經通過安裝依賴關系和注冊一個簡單的隨機資源來 體驗了初建你的 Pulumi。現(xiàn)在部署一些實際的基礎設施,盡管是在你的本地機器上。

首先,將 @pulumi/docker 提供者添加到你的堆棧中。使用你選擇的包管理器將其添加到項目中:

npm install @pulumi/docker

你已經從 npm 下拉了 Pulumi Docker 提供商包,這意味著你現(xiàn)在可以在你的項目中創(chuàng)建 Docker 鏡像。

如果你的機器上還沒有安裝 Docker,現(xiàn)在是一個極好的時機去安裝它。說明將取決于你的操作系統(tǒng),所以看看 Docker 的安裝頁面了解信息。

再次打開你喜歡的 IDE,運行一個 Docker 容器。修改你之前的 index.ts 文件,讓它看起來像這樣:

import * as pulumi from "@pulumi/pulumi";
import * as random from "@pulumi/random";
import * as docker from "@pulumi/docker";

const password = new random.RandomString(`password`, {
    length: 10
})

const container = new docker.Container(`my-password`, {
    image: 'hashicorp/http-echo',
    command: [ pulumi.interpolate`-text=Your super secret password is: ${password.result}` ],
    ports: [{
        internal: 5678,
        external: 5678,
    }]
})

export const id = container.id

這將創(chuàng)建一個容器,創(chuàng)建一個 Web 服務器。Web 服務器的輸出是你隨機生成的字符串,在本例中是一個密碼。運行這個,看看會發(fā)生什么:

pulumi up

Previewing update (dev):
     Type                       Name                  Plan
     pulumi:pulumi:Stack        my-first-project-dev
 +   └─ docker:index:Container  my-password           create

Outputs:
  + id      : output
  ~ password: {
        id        : "&+r?{}J$J7"
        length    : 10
        lower     : true
        minLower  : 0
        minNumeric: 0
        minSpecial: 0
        minUpper  : 0
        number    : true
        result    : "&+r?{}J$J7"
        special   : true
        upper     : true
        urn       : "urn:pulumi:dev::my-first-project::random:index/randomString:RandomString::password"
    }

Resources:
    + 1 to create
    2 unchanged

Do you want to perform this update? yes
Updating (dev):
     Type                       Name                  Status
     pulumi:pulumi:Stack        my-first-project-dev
 +   └─ docker:index:Container  my-password           created

Outputs:
  + id      : "e73b34aeca34a64b72b61b0b9b8438637ce28853937bc359a1528ca99f49ddda"
    password: {
        id        : "&+r?{}J$J7"
        length    : 10
        lower     : true
        minLower  : 0
        minNumeric: 0
        minSpecial: 0
        minUpper  : 0
        number    : true
        result    : "&+r?{}J$J7"
        special   : true
        upper     : true
        urn       : "urn:pulumi:dev::my-first-project::random:index/randomString:RandomString::password"
    }

Resources:
    + 1 created
    2 unchanged

Duration: 2s
Permalink: file:///Users/lbriggs/.pulumi/stacks/dev.json

你會注意到在 Outputs 部分,你輸出的值已經改變了,它只是一個 Docker 容器 ID。檢查你的非常簡單的密碼生成器是否工作:

curl http://localhost:5678
Your super secret password is: &+r?{}J$J7

就是這樣! 你剛剛用 TypeScript 配置了你的第一個基礎架構。

關于 Pulumi 輸出的快速說明

你會注意到在創(chuàng)建 Docker 容器的代碼中,它使用了一個特殊的 pulumi.interpolate 調用。如果你熟悉 TypeScript,你可能會好奇為什么需要這樣做(因為它是 Pulumi 特有的)。這有一個有趣的原因。

當 Pulumi 創(chuàng)建一個資源時,直到程序執(zhí)行時有一些值是 Pulumi 不知道的。在 Pulumi 中,這些值被稱為 Outputs。這些 Outputs 可以在上面的代碼中看到,例如,在你的第一個隨機資源中,你使用 export 關鍵字來輸出隨機資源的屬性,你還輸出了你創(chuàng)建的容器的容器 ID。

因為 Pulumi 直到執(zhí)行時才知道這些 Outputs 的值,所以在操作字符串時,它需要特殊的助手來使用它們。如果你想了解更多關于這個特殊的編程模型,請觀看這個短視頻。

總結

隨著混合云基礎架構中出現(xiàn)的復雜性,IaC 在很多方面都有了發(fā)展。在基礎設施供應領域,Pulumi 是一個很好的選擇,它可以使用你最喜歡的編程語言來供應你所需要的一切基礎設施,然后你可以在你最喜歡的配置管理工具中進行標記,以采取下一步措施。



網站標題:使用你喜歡的編程語言,將基礎設施作為代碼進行配置
瀏覽路徑:http://uogjgqi.cn/article/cohedoe.html
掃二維碼與項目經理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網交流