精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

AIOps系列 | 基礎設施即代碼

開發 前端
文章系統闡述了基礎設施即代碼(IaC)的核心概念、與AIOps的關聯及顯著優勢,并聚焦IaC工具Terraform,深入解析其定義、架構、核心命令、狀態管理、項目布局等關鍵內容,最后通過在阿里云平臺部署VPC、ECS、K8S及Nginx的實戰案例,完整呈現了Terraform在模塊化和多環境支持下的應用流程。

概述

講 AIOps 的時候為什么要講 基礎設施即代碼(Infrastructure as Code,簡稱IaC) 呢?

在企業中,不論是先進的技術也好,還是優秀的思想也罷,終究都是服務于業務,這些業務都是部署在各種基礎設施之上,包括 AIOps 本身的應用,所以可以理解 IaC 是 AIOps 實現自動化的基礎平臺。

在 AIOps 的加持下,IaC 可以變得更聰明,比如:

  • 自動識別資源的浪費或瓶頸
  • 根據負載預測推薦最優的實例類型
  • 在部署失敗的時候提供根因分析和修復建議

那什么是 基礎設施即代碼(以下簡稱IaC) 呢?

顧名思義,基礎設施即代碼(Infrastructure as Code,簡稱 IaC) 就是一種通過 代碼 來定義、管理和部署 IT 基礎設施的技術方法。換句話說就是 把以前“手動點擊配置服務器”的過程,變成像寫程序一樣用“代碼”來描述和部署基礎設施。

舉個例子,過去你可能這樣做:

  • 登錄云平臺控制臺
  • 手動創建 VPC、子網、安全組
  • 創建 EC2 實例并安裝軟件
  • 配置負載均衡器和數據庫

現在你可以這樣寫一段代碼(比如用 Terraform):

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

然后運行:

terraform apply

系統就會自動幫你創建一個 AWS 實例。

通過 IaC 可以將重復簡單的工作簡單化,它主要有以下優勢:

特性

描述

?? 可重復

每次部署都是一樣的結果,避免“在我機器上能跑”的問題

?? 可版本化

使用 Git 管理基礎設施的變更歷史

?? 可自動化

能與 CI/CD 流程集成,實現一鍵部署

?? 易于擴展

快速復制環境(開發、測試、生產)

??? 可維護性強

修改配置只需改代碼,無需手動操作

常見的一些 IaC 工具有:


類型

工具

說明

聲明式(Declarative)

Terraform、Kubernetes(YAML)、AWS CloudFormation

描述目標狀態,工具負責實現

命令式(Imperative)

Ansible、SaltStack、Chef、Puppet

編寫具體指令一步步執行

容器編排

Docker Compose、Helm Charts

定義容器化應用的部署結構

云廠商專用

AWS CDK、Azure Bicep

結合云平臺特性的 IaC 工具

我們知道了 IaC 的優勢以及常用的工具集,那我們具體能用它做什么呢?



我們可以:

  1. 通過聲明式方式定義和創建基礎設施,使基礎設施的管理類似于編寫代碼,實現創建和更新的自動化。
  2. 統一管理所有資源,無論這些資源最初是否由IC工具創建或管理,都可以導入進行統一的管理,提升整體的資源管控效率。
  3. 提供更安全的基礎設施更改流程,通過預先列出影響范圍并經由工程師確認后再執行變更,確保更改的安全性和準確性。
  4. 與CICD工具整合,形成基礎設施管理的自動化工作流,例如在工作流中自動開通開發環境所需的云基礎設施,實現環境快速搭建和標準化。
  5. 提供可復用的模塊,編寫的IC代碼可以作為模塊供其他團隊復用,促進團隊間協作和代碼的標準化使用,實現基礎設施管理流程的標準化和高效性。

在眾多 IaC 工具中, Terraform 一直是優選工具,所以下面會主要介紹 Terraform 。

什么是Terraform

Terraform 是 IaC 的一個開源工具,它由 HashiCorp 開發,用于安全高效地 預配、管理和銷毀基礎設施資源 。它就像是一把“萬能鑰匙”,你可以用它來創建服務器、數據庫、網絡、容器、負載均衡器等資源,而無需手動點擊云平臺界面或寫腳本去一個個配置。

圖片圖片

它的核心優勢有:

Terraform 采用 HCL(HashiCorp Configuration Language) 語言來定義這些文檔,HCL 比較簡單易學,它是一種DSL(即領域特定語言),用于簡化基礎設施參數配置的復雜性,它具有以下優勢:

  • 保留YAML和JSON的可讀性優勢,同時引入動態編程特性,使其在編寫時類似編程語言,但專注于配置
  • 使用HCL描述和編寫JSON對象時,代碼變得更清晰且簡潔

比如要在AWS上創建一臺EC2,只需要使用 HCL 編寫以下文檔:

# main.tf

# 指定 AWS 提供商
provider "aws" {
  region = "us-west-2"
}

# 創建 EC2 實例
resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0" # Amazon Linux 2 AMI ID
  instance_type = "t2.micro"
}

運行 terraform init 和 terraform apply 后,你的 AWS 控制臺中就會出現這臺新創建的 EC2 實例。

Terraform架構

在 Terraform 的執行過程中,主要包含以下幾個組件配置:

  • Terraform Config:使用 HCL 編寫的聲明式配置,用于描述用戶希望的狀態
  • Terraform Core:它是Terraform的核心編排引擎,負責處理基礎設施的變更,它會通過用戶編寫的HCL代碼轉換成期望的基礎設施最終狀態。
  • Terraform Provider:Provider是Terraform和云廠商通信的插件,負責將 HCL 配置映射為云平臺的具體 API 請求。不同云廠商有不同的Provider,這些Provider一般由云廠商自己維護。
  • Terraform State:State文件用于記錄當前基礎設施的真實狀態,由Terraform進行管理,用于保持配置和實際狀態是一致的,當有變更操作的時候,Terraform就會對比期望狀態和實際狀態,然后生成對應的變更計劃。

圖片圖片

特別說明

  1. 注意 Provider 版本兼容性
  • 引入不同 Provider 時,需關注其版本,避免因上游更新導致代碼異常或參數廢棄。
  1. 推薦固定版本以確保穩定性
  • 建議使用固定版本號 ,防止因自動更新帶來的不兼容問題。
  1. 使用“波浪號加大于號(~>)”進行版本約束
  • 這是一種悲觀約束符 ,用于限制 Provider 的版本范圍。
  • 它允許小版本更新(如 bug 修復、功能增強) ,但禁止大版本升級(可能帶來破壞性變更) 。

比如,采用以下配置表示允許使用 5.0.0 到 5.999.999 之間的版本,但不會升級到 6.0

provider "aws" {
  version = "~> 5.0"
}

Terraform的核心命令

Terraform 的命令可以使用 terraform -help 來查看,這里介紹一個常用的命令。

基礎命令

常用的基礎命令有:

  • terraform init:初始化工作目錄,下載provider插件等依賴
  • terraform plan:查看將要執行的操作,不會實際執行
  • terraform apply:執行配置,該命令執行后會實際執行
  • terraform destroy:銷毀所有由terraform創建的資源

狀態管理命令

常用的狀態管理命令有:

  • terraform state list:列出當前狀態中的所有資源
  • terraform state show <resource>:查看某資源的具體信息
  • terraform state rm <resource>:從狀態中移除某個資源(不刪除真實資源)
  • terraform state pull:從遠端拉取狀態到本地
  • terraform state push:更新本地的狀態到遠端
  • terraform refresh:從基礎設施實際狀態更新 state 狀態
  • terraform import <resource> <id>:將已有資源導入到terraform中

查詢與調試命令

常用的查詢與調試命令有:

  • terraform show:顯示當前狀態文件的內容
  • terraform output:顯示outputs中定義的輸出值
  • terraform graph:生成資源配置的依賴圖
  • terraform validate:檢查配置語法是否正確

其他命令

還有一些比較實用的命令:

  • terraform fmt:格式化.tf文件,統一風格
  • terraform taint <resource>:標記某個資源為“污染”,下次apply的時候重建
  • terraform workspace:管理多個環境(dev / staging / prod)

Terraform State

這里著重把 Terraform State 拿出來講,是因為它是 Terraform 生命周期中必不可少的元素,它保存了真實基礎設施的所有元數據。默認情況下,這些信息保存在一個名為 "terraform.tfstate" 的文件中。

Terraform 使用狀態來創建執行計劃并更改您的基礎設施。當 Terraform 通過配置文件創建或者更改了遠端對象時,它會將該遠端對象的標識記錄在與之對應的資源實例中,并保存在狀態文件中,之后,Terraform 可能會根據未來的配置更改更新或刪除該對象。

圖片圖片

每個在資源塊中創建的基礎設施資源都是通過其resource_name在 Terraform 狀態中進行標識的,其對資源的管理流程大致如下:

  • 當第一次通過 terraform apply 應用 Terraform 配置時,會創建基礎設施資源,同時自動生成一個狀態文件,該文件引用資源塊中聲明的名稱
  • 如果一個資源已經在 Terraform 狀態文件中有標識,那么 Terraform 會將配置文件與狀態文件和當前的資源遠端的實際狀態進行比較,并根據比較結果,會生成一個執行計劃
  • 當執行該計劃時,它會更新資源的狀態以匹配配置文件中的定義,如果由于遠端 API 限制無法實現就地更新參數,那么該執行計劃將會先銷毀資源,然后再重新創建新的資源;如果是一個資源銷毀的計劃,將發起資源的銷毀操作
  • 計劃執行成功后,Terraform 狀態文件會更新以反映當前的基礎設施狀態
  • 如果某資源已從當前 Terraform 配置中移除但在狀態文件中仍然存在,Terraform 則會比較配置文件并銷毀不再存在的資源

Terraform 默認將本地狀態文件保存在當前工作目錄中,擴展名為 .tfstate,因此它們不需要額外的維護。本地狀態文件適用于只有一個開發人員工作的項目,當多個開發人員同時運行 Terraform 并且每臺機器都有對當前基礎設施的理解和配置時,默認的本地狀態文件的配置方式就會變得棘手。

在團隊協作開發場景中使用本地狀態時主要存在以下幾個問題:

  1. 本地狀態沒有共享訪問權限:當使用 Terraform 更新你的基礎設施,團隊中的每個成員都需要訪問相同的狀態文件,這意味著這些文件必須存儲在一個共享的位置,比如 ECS 實例特定的位置,而這無形增加了管理成本。
  2. 不能鎖定本地狀態文件:如果兩個團隊成員同時運行 Terraform,他們可能會遇到競爭條件,因為多個 Terraform 進程可能同時在更新狀態文件。在這種情況下,可能帶來導致沖突、數據丟失和狀態文件損壞等風險。
  3. 本地狀態文件不保密:當信息以明文形式存儲在狀態文件中時,敏感數據將存在被暴露的風險,例如數據庫憑證,SSH 登錄密碼等。

因此,在團隊協作開發的場景中,推薦使用遠程替代本地存儲,這種存儲模式下會:

  • 遠端狀態文件會自動更新:每次使用 plan 或者 apply 命令的時候會自動從遠端加載狀態文件,每次執行apply之后也會把狀態文件自動同步到遠端存儲中。
  • 遠端狀態文件支持狀態鎖定:當執行 terraform 的時候,可以對遠端狀態文件進行加鎖,這樣在多個開發人員同時運行 terraform apply 的時候不會因同時更新而損壞。
  • 遠端狀態文件存儲比本地存儲更安全:比如像 OSS 這類遠端存儲不僅支持精細化控制訪問權限,還支持傳輸和遠端加密功能。

比如采用 阿里云OSS 作為后端存儲,其配置如下:

terraform {
  backend "oss" {
    bucket = "bucket-for-terraform-state"
    prefix   = "path/mystate"
    key   = "version-1.tfstate"
    region = "cn-beijing"
    tablestore_endpoint = "https://terraform-remote.cn-hangzhou.ots.aliyuncs.com"
    tablestore_table = "statelock"
  }
}

其中:

  • bucket:為阿里云OSS Bucket的名稱
  • prefix:在Bucket中存放狀態文件的路徑前綴
  • key:狀態文件的名稱
  • region:Bucket所在區域
  • tablestore_endpoint:tablestore的訪問地址,用于狀態鎖
  • tablestore_table:用于狀態鎖的tablestore表名

說明:當你運行 terraform apply 或 destroy 時,Terraform 會嘗試對狀態文件加鎖。如果已有其他人在操作,就會提示“lock failed”,防止并發修改導致錯誤。

Terraform項目布局

任何項目的開發都需要比較好的項目布局,Terraform 也不例外,在簡單的項目中推薦使用 Terraform Layout 的項目布局方式,將文件拆分成四個文件:

  • main.tf:表示主要的業務邏輯
  • outputs.tf:定義輸出的內容
  • variables.tf:定義變量參數
  • version.tf:定義依賴和版本

其中, main.tf 是業務的主邏輯,比如這里要創建一個EC2,定義如下:

resource "aws_instance" "my-example" {
   ami = "ami-xxxxxxx"
   instance_type = var.instance_type
}

這里的 var.instance_type 是定義的變量,所以我們還要創建一個 variables.tf,內容如下:

variable "instance_type" {
  description = "EC2 實例類型"
  default     = "t2.micro"
}

然后,我們喜歡得到創建后的EC2實例的IP,所以我們還要定義 outputs.tf,如下:

output "public_ip" {
  value = aws_instance.my-example.public_ip
}

另外,還有一個 version.tf,這個文件主要是用來固定版本的,避免上游版本變化導致腳本出現不可預知的BUG。其定義大概如下:

# versions.tf

terraform {
  required_version = ">= 1.6.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }

    random = {
      source  = "hashicorp/random"
      version = "~> 3.0"
    }

    # 示例:阿里云 Provider
    alicloud = {
      source  = "aliyun/alicloud"
      version = "~> 1.2.0"
    }
  }
}

如果項目比較復雜,可以將 main.tf 再進行拆分,比如我們要使用 terraform 部署 vpc、rds,則可以將其按模塊進行拆分,如下:

main.tf
variables.tf
outputs.tf
modules/
  └── vpc/
      ├── main.tf
      ├── variables.tf
      └── outputs.tf
  └── rds/
      ├── main.tf
      ├── variables.tf
      └── outputs.tf

然后在 main.tf 中去引用即可,如下:

module "vpc" {
  source = "./modules/vpc"

  cidr_block = "10.0.0.0/16"
  tags       = { Name = "my-vpc" }
}

如果你的項目涉及多個環境(dev/staging/prod),且要提高代碼的復用,我們可以將目錄結構定義如下:

project-root/
├── environments/
│   ├── dev/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   ├── staging/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   └── prod/
│       ├── main.tf
│       ├── variables.tf
│       └── outputs.tf
├── modules/              # 可選:用于復用的模塊
│   ├── vpc/
│   └── rds/
├── versions.tf           # 固定版本號(推薦)
└── backend.tf            # 遠程后端配置(可選)

在具體使用的時候我們應該先創建 workspace ,然后再執行。比如要在 dev 環境執行命令,則用:

$ terraform workspace new dev    # 創建 dev 的workspace
$ cd environments/dev            # 切換到dev的主入口
$ terrafotm apply --auto-apprve # 在dev workspace 中創建資源
# 如果不清楚目前有哪些 workspace,可以使用 terraform workspace list 查看
$ terraform workspace list
# 如果想切換到某個 workspace,可以使用 terraform workspace select <workspace> 進行切換
$ terraform workspace select dev
# 如果要刪除某個 workspace 中的資源,可以使用 terraform destroy --auto-approve 命令
$ terraform destroy --auto-approve

Terraform實戰

下面我們將以 模塊化 + 多環境支持 的方式設計這個 Terraform 項目,并以 阿里云(Alibaba Cloud) 平臺為例進行說明。

Tips:代碼未經調試,原因是沒錢

整體的項目需求是:

  • 創建VPC
  • 創建ECS
  • 在ECS中部署K8S,版本是1.32.1
  • 在K8S中部署Nginx,版本是latest

整體的項目目錄結構規劃如下:

terraform-k8s-on-ecs/
├── environments/
│   └── dev/
│       ├── main.tf
│       ├── variables.tf
│       └── outputs.tf
├── modules/
│   ├── vpc/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   ├── ecs/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   ├── k8s-install/
│   │   ├── main.tf
│   │   ├── install-k8s.sh
│   │   └── variables.tf
│   └── k8s-deploy-nginx/
│       ├── main.tf
│       └── nginx-deployment.yaml
├── versions.tf
└── providers.tf

1、固定版本號

# versions.tf

terraform {
  required_version = ">= 1.6.0"

  required_providers {
    alicloud = {
      source  = "aliyun/alicloud"
      version = "~> 1.2.0"
    }

    null = {
      source  = "hashicorp/null"
      version = "~> 3.0"
    }

    template = {
      source  = "hashicorp/template"
      version = "~> 2.0"
    }
  }
}

2、創建VPC模塊

(1)定義變量
# modules/vpc/variables.tf

variable "vpc_name" {
  description = "VPC 名稱"
  type        = string
}

variable "cidr_block" {
  description = "VPC CIDR"
  type        = string
  default     = "10.0.0.0/16"
}

variable "subnet_cidr" {
  description = "子網 CIDR"
  type        = string
  default     = "10.0.1.0/24"
}

variable "zone_id" {
  description = "可用區 ID"
  type        = string
}
(2)定義主入口
# modules/vpc/main.tf

resource "alicloud_vpc" "main" {
  vpc_name   = var.vpc_name
  cidr_block = var.cidr_block
}

resource "alicloud_vswitch" "main" {
  vswitch_name = "${var.vpc_name}-vsw"
  cidr_block   = var.subnet_cidr
  vpc_id       = alicloud_vpc.main.id
  zone_id      = var.zone_id
}

3、創建ECS模塊

(1)定義變量
# modules/ecs/variables.tf

variable "instance_name" {
  description = "ECS 實例名稱"
  type        = string
}

variable "image_id" {
  description = "鏡像 ID(如 centos_7_9_x64_20G_alibase_20220310.vhd)"
  type        = string
}

variable "instance_type" {
  description = "實例類型(如 ecs.n4.small)"
  type        = string
}

variable "vpc_id" {
  description = "VPC ID"
  type        = string
}

variable "vswitch_id" {
  description = "VSwitch ID"
  type        = string
}

variable "zone_id" {
  description = "可用區 ID"
  type        = string
}

variable "root_password" {
  description = "ECS root 密碼"
  type        = string
}
(2)定義主入口
# modules/ecs/main.tf

resource "alicloud_security_group" "k8s-node" {
  name   = "k8s-node-sg"
  vpc_id = var.vpc_id
}

resource "alicloud_instance" "k8s-master" {
  instance_name        = var.instance_name
  image_id             = var.image_id
  instance_type        = var.instance_type
  availability_zone    = var.zone_id
  system_disk_category = "cloud_efficiency"
  system_disk_size     = 40
  vswitch_id           = var.vswitch_id
  security_groups      = [alicloud_security_group.k8s-node.id]
  internet_max_bandwidth_out = 100
  password             = var.root_password
}

4、創建Kubernetes集群(采用kubeadm)

(1)創建安裝K8S腳本
# modules/k8s-install/install-k8s.sh

#!/bin/bash

# 安裝 Docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker

# 安裝 kubelet kubeadm kubectl
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg  https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg 
exclude=kube*
EOF

yum install -y kubelet-1.32.1 kubeadm-1.32.1 kubectl-1.32.1
systemctl enable kubelet
systemctl start kubelet

# 初始化集群
kubeadm init --pod-network-cidr=10.244.0.0/16

# 配置 kubectl
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 安裝 CNI(Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
(1)定義變量
# modules/k8s-install/variables.tf

variable "ecs_public_ip" {
  description = "ECS 公網 IP"
  type        = string
}

variable "root_password" {
  description = "ECS root 密碼"
  type        = string
}
(2)定義主入口
# modules/k8s-install/main.tf

resource "null_resource" "install_k8s" {
  connection {
    type     = "ssh"
    user     = "root"
    password = var.root_password
    host     = var.ecs_public_ip
  }

  provisioner "file" {
    source      = "${path.module}/install-k8s.sh"
    destination = "/root/install-k8s.sh"
  }

  provisioner "remote-exec" {
    inline = [
      "chmod +x /root/install-k8s.sh",
      "/root/install-k8s.sh"
    ]
  }
}

5、在K8S中部署Nginx

(1)創建NG的Deployment
# modules/k8s-deploy-nginx/nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort
(2)、定義變量
# modules/k8s-deploy-nginx/variables.tf

variable "ecs_public_ip" {
  description = "ECS 公網 IP"
  type        = string
}

variable "root_password" {
  description = "ECS root 密碼"
  type        = string
}
(3)、定義主入口
# modules/k8s-deploy-nginx/main.tf

resource "null_resource" "deploy_nginx" {
  depends_on = [module.k8s-install]

  connection {
    type     = "ssh"
    user     = "root"
    password = var.root_password
    host     = var.ecs_public_ip
  }

  provisioner "file" {
    source      = "${path.module}/nginx-deployment.yaml"
    destination = "/root/nginx-deployment.yaml"
  }

  provisioner "remote-exec" {
    inline = [
      "kubectl apply -f /root/nginx-deployment.yaml"
    ]
  }
}

6、配置開發環境的主業務邏輯

# environments/dev/main.tf

# 創建 VPC
module "vpc" {
  source = "../../modules/vpc"

  vpc_name    = "dev-vpc"
  cidr_block  = "10.0.0.0/16"
  subnet_cidr = "10.0.1.0/24"
  zone_id     = "cn-beijing-a"
}

# 創建 ECS,依賴 VPC
module "ecs" {
  source = "../../modules/ecs"

  instance_name = "k8s-master"
  image_id      = "centos_7_9_x64_20G_alibase_20220310.vhd"
  instance_type = "ecs.n4.small"
  vpc_id        = module.vpc.vpc_id
  vswitch_id    = module.vpc.vswitch_id
  zone_id       = "cn-beijing-a"
  root_password = "your-root-password-123"
}

# 安裝 Kubernetes,依賴 ECS
module "k8s-install" {
  source = "../../modules/k8s-install"

  ecs_public_ip = module.ecs.ecs_public_ip
  root_password = "your-root-password-123"

  depends_on = [module.ecs]  # 等 ECS 創建完成后再安裝 K8s
}

# 部署 Nginx,依賴 Kubernetes 安裝完成
module "deploy-nginx" {
  source = "../../modules/k8s-deploy-nginx"

  ecs_public_ip = module.ecs.ecs_public_ip
  root_password = "your-root-password-123"

  depends_on = [module.k8s-install]  # 等 K8s 安裝完成后再部署應用
}

配置輸出:

# environments/dev/outputs.tf

output "vpc_id" {
  value = module.vpc.vpc_id
}

output "ecs_public_ip" {
  value = module.ecs.ecs_public_ip
}

output "k8s_config" {
  value = "/root/.kube/config"
}

7、部署

當所有腳本開發完成后,為了保證后續的可擴展,整體的命令執行流程是:

# 切換到 dev 目錄下
$ cd environments/dev
# 創建 dev workspace
$ terraform workspace new dev
# 初始化下載依賴
$ terraform init
# 預執行
$ terraform plan
# 執行部署
$ terraform apply

總結

綜上所述,文章系統闡述了基礎設施即代碼(IaC)的核心概念、與AIOps的關聯及顯著優勢,并聚焦IaC工具Terraform,深入解析其定義、架構、核心命令、狀態管理、項目布局等關鍵內容,最后通過在阿里云平臺部署VPC、ECS、K8S及Nginx的實戰案例,完整呈現了Terraform在模塊化和多環境支持下的應用流程。這不僅展現了IaC通過代碼化管理基礎設施的高效性與規范性,也為實際運維中利用Terraform實現自動化部署提供了清晰的思路與參考。

引用

[1] https://developer.hashicorp.com/terraform/docs

[2] https://help.aliyun.com/zh/terraform/what-is-terraform?spm=a2c4g.help-menu-95817.d_0_1.dee2c092b7ORVO

責任編輯:武曉燕 來源: 運維開發故事
相關推薦

2017-09-16 17:28:55

基礎設施代碼持續交付

2020-02-24 11:08:27

云計算網絡攻擊數據

2025-08-12 04:00:00

2024-02-04 09:13:24

基礎設施代碼DevOps

2022-04-11 19:08:06

設施作用域pod

2016-08-18 16:55:00

基礎設施

2022-06-17 10:24:57

IaC

2022-01-10 08:00:00

云原生云計算技術

2021-06-18 11:02:12

云計算infrastruct云安全

2022-04-12 19:38:44

PostgresOperator數據庫

2021-07-26 09:53:58

IaC基礎設施即代碼云數據中心

2021-11-11 09:00:00

IaC工具自動化

2016-08-30 10:20:57

云計算

2017-06-22 17:23:13

超融合塑合代碼

2021-05-20 09:00:00

數字化轉型IT技術

2022-02-10 11:54:34

即時基礎設施基礎設施數字化轉型

2023-11-02 00:16:26

2023-07-17 18:43:26

測試基礎設施開發

2019-02-25 12:16:02

服務器功能服務

2017-12-04 12:49:16

跨國互聯網基礎設施即代碼
點贊
收藏

51CTO技術棧公眾號

2024亚洲男人天堂| 日韩女同互慰一区二区| 视频一区视频二区视频三区高| 91黑人精品一区二区三区| 久久一区91| 337p日本欧洲亚洲大胆色噜噜| 成人一区二区三| h片在线观看网站| 91免费精品国自产拍在线不卡 | 日韩性xxx| 亚洲日本电影在线| 欧美日韩精品综合| 国产精品日韩无码| 美女91精品| 欧美精品日韩www.p站| 国产精品天天干| 一区二区三区亚洲变态调教大结局| 色欲综合视频天天天| 国产在线无码精品| 国产精品毛片一区二区三区四区| 国产精品亚洲а∨天堂免在线| 日韩免费在线视频| 久久久全国免费视频| 久久精品国产99久久| 精品在线观看国产| 麻豆传媒在线看| 欧美成人xxxx| 在线视频国产一区| 国产91在线免费| 丰满大乳少妇在线观看网站| 一区精品在线播放| 亚洲精品第一区二区三区| 欧美色图另类| 99久久精品免费观看| 97se在线视频| 国产精品系列视频| 久久激情五月婷婷| 国产精品日本精品| 黄色片网站在线免费观看| 亚洲福利电影| 欧美肥婆姓交大片| 一区二区在线观看免费视频| 欧美第一精品| 久久激情视频久久| 战狼4完整免费观看在线播放版| 久久爱www成人| 亚洲精品美女久久| 日本少妇毛茸茸| 欧美巨大xxxx| 精品视频一区在线视频| 一出一进一爽一粗一大视频| 国产精品美女在线观看直播| 亚洲国产精久久久久久| 国产视频久久久久久| 麻豆一区二区| 亚洲毛片在线免费观看| 亚洲成人黄色av| 狠狠色丁香婷婷综合影院| 亚洲乱码国产乱码精品精天堂| www.超碰97| 深爱激情综合| 丝袜情趣国产精品| 久久久久久久久久97| 综合精品久久| 久久久噜噜噜久久| 亚洲视频免费播放| 久久美女性网| 91精品国产综合久久香蕉922| 亚洲熟女乱色一区二区三区久久久| 麻豆精品久久久| 91九色视频在线| 亚洲高清视频网站| 99热在这里有精品免费| 欧美亚洲另类久久综合| 日韩伦理在线电影| 亚洲综合久久久久| 国产91美女视频| 欧美高清影院| 亚洲爱爱爱爱爱| 日韩乱码人妻无码中文字幕久久| 欧美一区电影| 欧美丰满少妇xxxxx做受| 国产精品a成v人在线播放| 久久亚洲影院| 91色中文字幕| 色在线免费视频| 综合久久久久综合| 免费一级特黄特色毛片久久看| 国产欧美一区二区三区精品酒店| 欧美日韩免费观看一区二区三区| 亚洲一区二区三区三州| 亚瑟一区二区三区四区| 中文在线不卡视频| 亚洲色图综合区| 久久国产精品99国产| 成人网在线视频| 天堂资源中文在线| 亚洲人成7777| 欧美 激情 在线| 久久精品九色| 国产小视频91| 日韩av女优在线观看| 久久精品国产久精国产爱| 国产欧美日韩伦理| 里番在线观看网站| 日韩欧美亚洲国产一区| 日本成人在线免费观看| 国产一区不卡| 亚州av一区二区| 国产露脸无套对白在线播放| xnxx国产精品| 久草视频国产在线| 亚洲资源在线| 国产亚洲欧洲高清| 亚欧洲精品在线视频| 国内精品写真在线观看| 日韩av一区二区三区美女毛片| 国产福利在线免费观看| 8v天堂国产在线一区二区| av中文字幕免费观看| 99av国产精品欲麻豆| 91久久精品国产91久久性色| 黄色毛片在线观看| 午夜精品在线看| 男女视频在线观看网站| 欧美日韩一二| 欧美一区二三区| 欧美一区二区三区激情| 一区二区三区四区高清精品免费观看| 91n.com在线观看| 精品在线91| 国产91精品久久久久| 成人精品在线播放| 一区二区三区欧美激情| 天美一区二区三区| 婷婷另类小说| 成人高h视频在线| 午夜视频在线观看网站| 在线影院国内精品| 欧美 日韩 国产 成人 在线观看 | 一区二区三区四区不卡在线 | 最近2019年日本中文免费字幕| 伊人手机在线视频| 91看片淫黄大片一级| 噜噜噜久久亚洲精品国产品麻豆| 国产精品传媒| 91精品国产自产91精品| 男同在线观看| 色综合久久中文综合久久牛| 在线不卡av电影| 久热re这里精品视频在线6| 欧美二区三区| 三级成人在线| 中国china体内裑精亚洲片| 久久永久免费视频| 国产精品妹子av| 国模私拍视频在线观看| 亚洲成人一区| 国产传媒一区二区| 蜜桃视频在线观看免费视频| 日韩成人免费视频| 一级黄色av片| 国产精品大尺度| 久久无码人妻一区二区三区| 一区福利视频| 日本不卡高清视频一区| 91国拍精品国产粉嫩亚洲一区| 在线成人激情视频| 99久久精品国产一区二区成人| 亚洲激情五月婷婷| 国产麻豆剧传媒精品国产av| 可以看av的网站久久看| 亚洲精品白虎| 成人直播在线观看| 日本中文字幕不卡免费| 自拍视频在线播放| 欧美一区二区三区思思人| 久久久久免费看| 91农村精品一区二区在线| 国产一二三四在线视频| 欧美1区视频| 久久国产精品免费一区| 国产91在线播放精品| 欧美巨大黑人极品精男| 五月天久久久久久| 精品视频色一区| 久久综合综合久久| 中文幕一区二区三区久久蜜桃| 色综合五月婷婷| 免费日韩av| 穿情趣内衣被c到高潮视频| 老汉色老汉首页av亚洲| 国产精品影片在线观看| 2018av在线| 久久精品人人做人人爽| 五月婷婷丁香花| 欧美丰满少妇xxxxx高潮对白| 国产午夜精品无码一区二区| 欧美激情资源网| 国产精品果冻传媒| 久久超碰97中文字幕| 国产黄页在线观看| 欧美一区二区| 性欧美.com| 蜜桃一区av| 亚洲va欧美va国产综合剧情| 在线看片国产福利你懂的| 欧美成人黑人xx视频免费观看| 欧美香蕉爽爽人人爽| 精品美女一区二区| 一二三区中文字幕| 色综合欧美在线| 久久精品免费在线| 亚洲欧美韩国综合色| 国产成人福利在线| 99综合电影在线视频| 一级黄色片在线免费观看| 天堂在线亚洲视频| 欧美不卡在线播放| 国内精品久久久久久久影视麻豆 | 91免费在线看片| 91视视频在线观看入口直接观看www | 8x福利精品第一导航| 免费在线不卡av| 疯狂做受xxxx高潮欧美日本| 久久中文字幕无码| 亚洲精品免费一二三区| 国产乱子轮xxx农村| 国产午夜精品美女毛片视频| 韩国无码一区二区三区精品| 成人h版在线观看| 18禁一区二区三区| 国产精品原创巨作av| 亚洲黄色av片| 久久国产精品色| 亚洲黄色av网址| 青娱乐精品视频| 91高清国产视频| 免费不卡在线视频| 啊啊啊国产视频| 日韩精品成人一区二区在线| 北条麻妃在线视频| 久久久久一区| 亚洲少妇第一页| 日韩av一区二区在线影视| 欧美黄色一级片视频| 天堂蜜桃一区二区三区| 成人午夜激情av| 琪琪一区二区三区| 黄色一级片免费的| 久久99久久99小草精品免视看| 日本高清一区二区视频| 国产揄拍国内精品对白| 日韩精品――色哟哟| 成人午夜又粗又硬又大| 亚洲一区二区在线免费| 91色porny在线视频| 乐播av一区二区三区| 欧美激情一区二区三区蜜桃视频| 91社区视频在线观看| 亚洲三级在线免费观看| 激情综合网五月婷婷| 第一福利永久视频精品| 国产99免费视频| 欧美嫩在线观看| 国产丝袜视频在线观看| 精品免费视频.| 青青草在线免费视频| 在线视频精品一| www在线免费观看视频| 性欧美亚洲xxxx乳在线观看| 成人做爰视频www网站小优视频| 国产精品视频99| 日韩三级av高清片| 国产在线精品一区| 精品福利久久久| 日本精品免费视频| 99精品视频免费观看视频| 亚洲成人av免费看| 国产一区二区精品久久99| 日韩成人av一区二区| 亚洲国产高清在线| 免费中文字幕视频| 色综合久久综合| www.色婷婷.com| 亚洲免费电影一区| 黄av在线免费观看| 日韩av电影中文字幕| 24小时成人在线视频| 久久久com| 在线观看免费一区二区| 国产麻花豆剧传媒精品mv在线| 麻豆国产精品一区二区三区 | 91成品人影院| 日韩av网站电影| 毛片激情在线观看| 26uuu另类亚洲欧美日本老年| 小说区图片区亚洲| 久久av一区二区三区亚洲| 天天色天天射综合网| www国产黄色| 国产麻豆精品视频| 国产传媒国产传媒| 午夜成人免费视频| 国产又粗又黄又爽视频| 亚洲欧美日韩国产成人| 女同视频在线观看| 国产在线一区二区三区| 精品影片在线观看的网站| 久久99久久99精品| 国内精品久久久久影院一蜜桃| 中文字幕av观看| 亚洲一区二区三区四区在线| 国产精品嫩草影院桃色| 亚洲一区二区精品| 欧美a级在线观看| 不卡视频一区二区三区| 日韩欧美电影| 久草在在线视频| 91麻豆精品一区二区三区| 久草免费新视频| 欧美一区二区三区免费在线看| 成年人在线视频| 秋霞成人午夜鲁丝一区二区三区| 超碰成人97| 成年在线观看视频| 黄色精品一二区| 天堂网av2018| 欧美日韩精品专区| wwwxxx在线观看| 国产精品69久久久久| 亚洲综合福利| 久草青青在线观看| 91在线观看一区二区| 中文字幕在线字幕中文| 欧美精品一区二区三区四区| 欧美黑人猛交| 99精品欧美一区二区三区| 综合久久婷婷| 巨乳女教师的诱惑| 亚洲欧美日韩一区二区| 国产精品伦一区二区三区| 日韩视频永久免费观看| 高清一区二区中文字幕| 中文字幕av久久| 国产在线精品一区二区不卡了| 天天看天天摸天天操| 欧美一区二区视频在线观看| 成人黄色在线电影| 成人综合电影| 亚洲国产91| 亚洲久久久久久| 日韩欧美有码在线| 成人激情电影在线看| 国产在线一区二区三区| 在线中文一区| www男人天堂| 欧美日韩另类字幕中文| 毛片免费在线| 国产欧美一区二区| 中文在线日韩| bl动漫在线观看| 色噜噜狠狠一区二区三区果冻| www黄在线观看| av在线不卡一区| 一区二区三区福利| 国产女主播喷水高潮网红在线| 欧美性猛交xxxx乱大交退制版| 欧美私人网站| 国产精品嫩草在线观看| 国产精品毛片一区二区三区| 能直接看的av| 日韩欧美在线网站| 国产在线精彩视频| 亚洲高清在线播放| 国产成人8x视频一区二区| 国产精品免费av一区二区| 夜夜躁日日躁狠狠久久88av | 秋霞电影网一区二区| 九九精品视频免费| 亚洲精品按摩视频| 黄色成人在线视频| 久久福利一区二区| 国产视频在线观看一区二区三区| 亚洲网站免费观看| 国内成人精品视频| 欧美视频网址| av免费观看不卡| 精品1区2区3区| sm性调教片在线观看| 亚洲一区三区电影在线观看| 成人免费不卡视频| 中文字幕资源网| 国内精品国产三级国产在线专| 国产一区二区三区四区二区| 无码国产精品久久一区免费| 欧美午夜电影一区| 8x8ⅹ拨牐拨牐拨牐在线观看| 亚洲不卡1区| 91丨porny丨蝌蚪视频|