精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日本高清不卡的在线| 日韩一二在线观看| 欧美日韩亚洲一区二区三区在线观看| 国产尤物在线视频| 欧美日韩有码| 日韩欧美一区二区视频| 成人综合视频在线| 日本三级在线播放完整版| 国产精品自拍一区| 热久久这里只有精品| 久草福利资源在线| 乱亲女h秽乱长久久久| 欧美日韩在线观看一区二区| 国产又粗又长又爽视频| 青梅竹马是消防员在线| 国产在线精品一区在线观看麻豆| 午夜免费日韩视频| 国产探花视频在线| 偷拍自拍一区| 日韩一区二区麻豆国产| 一级在线免费视频| 理论不卡电影大全神| 日韩毛片视频在线看| 久久综合色一本| 性生活视频软件| 麻豆精品视频在线观看| 欧美一级成年大片在线观看 | 成人av网站在线| 国产精品一区二区三区毛片淫片| 久久精品性爱视频| 日韩在线视频精品| 亚洲欧洲日产国码av系列天堂| 免费不卡av网站| 中文字幕日本一区二区| 亚洲a一区二区| 欧美xxxx吸乳| 日本三级视频在线观看| 国产亚洲午夜高清国产拍精品 | 欧美美女在线| 亚洲精品乱码久久久久久按摩观| 黄色一级片免费播放| 91伊人久久| 91搞黄在线观看| 亚洲国产精品久久久久爰色欲| 久草成色在线| 亚洲一区二区中文在线| 国产在线拍揄自揄拍无码| 自拍视频在线网| 欧美激情在线免费观看| 免费h精品视频在线播放| 人妻丰满熟妇av无码区hd| 国产精品自拍av| 国产日韩中文在线| 91 中文字幕| 国内精品自线一区二区三区视频| 国产精品视频精品| 一级黄色片视频| 久久国产精品第一页| 国产精品久久77777| 日韩国产成人在线| 免费成人你懂的| 成人有码视频在线播放| 99精品在线视频观看| 国产精品18久久久久久久网站| 亚洲精品欧美一区二区三区| 国产欧美第一页| 国产大片一区二区| 国产麻豆日韩| 巨骚激情综合| 国产精品久久久久影院色老大| 婷婷久久青草热一区二区| 国产福利第一视频在线播放| 国产拍欧美日韩视频二区| 亚洲精品一区二区三| 免费网站成人| 亚洲成av人片观看| 欧美性大战久久久久xxx| 欧美freesex| 欧美日韩一级二级三级| 天堂在线精品视频| 久久九九热re6这里有精品| 亚洲激情视频在线观看| 日韩人妻无码精品综合区| 清纯唯美综合亚洲| 欧美乱人伦中文字幕在线| 五月天综合在线| 天堂资源在线中文精品| 国产日本欧美视频| 亚洲欧美高清视频| 久久久www成人免费毛片麻豆| 亚洲 国产 欧美一区| 91香蕉在线观看| 一本到三区不卡视频| 亚洲美女爱爱视频| 精品少妇一区| 中文字幕日韩av| 久久国产精品波多野结衣av| 欧美中文字幕| 亚洲va电影大全| 日韩大胆视频| 综合av第一页| 任你操这里只有精品| 亚洲二区av| 日韩h在线观看| 亚洲成人生活片| 久久中文在线| 国产精品高清一区二区三区| 成人亚洲综合天堂| 亚洲高清三级视频| 日本中文字幕观看| 久久91麻豆精品一区| 美女黄色丝袜一区| 国产精品自拍第一页| 国产成人av电影在线观看| 日韩wuma| 忘忧草在线影院两性视频| 6080日韩午夜伦伦午夜伦| 黄色免费视频网站| 亚洲成人99| 国产精品入口日韩视频大尺度| 免费观看的毛片| 亚洲欧美在线视频| 91视频免费版污| 青青草原在线亚洲| 久久久免费精品视频| 一区二区的视频| 久久精品人人做人人爽97| www.日本三级| 麻豆精品国产| 久久精品成人动漫| 成人小视频在线播放| av成人免费在线观看| 精品一区二区三区毛片| 久久er热在这里只有精品66| 亚洲精品视频免费| 久久视频免费在线观看| 国产精品一区二区在线观看不卡 | 淫片在线观看| 91国偷自产一区二区三区观看| 中文乱码人妻一区二区三区视频| 欧美日本精品| 114国产精品久久免费观看| 国产精品久久久久久久龚玥菲 | 萌白酱国产一区二区| 在线观看视频中文字幕| 国产欧美一区二区精品仙草咪| 精品一卡二卡三卡| 婷婷精品在线观看| 日本最新高清不卡中文字幕| 欧美一级淫片aaaaaa| 亚洲国产一区二区三区| 免费观看污网站| 影音先锋国产精品| 国产伦精品一区二区三区四区视频 | 成人午夜一级| 在线午夜精品自拍| 亚洲在线精品视频| 中文字幕亚洲一区二区av在线| 日韩av卡一卡二| 欧美疯狂party性派对| 国产精品综合久久久| 丝袜美腿美女被狂躁在线观看| 精品视频在线看| www.97视频| 国产高清久久久久| 91免费黄视频| 自拍偷拍一区| 国产美女直播视频一区| 麻豆最新免费在线视频| 欧美一级电影网站| 黄色小视频在线免费看| 99久久综合精品| 免费观看成人网| 国产精品88久久久久久| 99c视频在线| 无遮挡爽大片在线观看视频| 亚洲视频欧洲视频| 一区二区三区午夜| 亚洲成人777| 中国女人特级毛片| 精品一区二区三区免费播放 | 久久精品免费| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 91精品亚洲一区在线观看| 欧美国产在线电影| 日本电影一区二区在线观看| 欧美色图在线观看| 久草网视频在线观看| 91麻豆国产自产在线观看| 欧美一级特黄a| 黄色欧美日韩| 视频三区二区一区| 99精品国产一区二区三区2021 | 北岛玲一区二区三区四区| 99久久久无码国产精品6| 99久久婷婷这里只有精品| 国产精品三区在线| 粉嫩91精品久久久久久久99蜜桃| 欧美国产日韩视频| av影片免费在线观看| 精品国产91洋老外米糕| 亚洲天堂999| 福利一区视频在线观看| 在线视频这里只有精品| 成人aaaa免费全部观看| 不卡的在线视频| 亚洲一区二区伦理| 9191国产视频| 日韩欧美高清| 久久大片网站| 影音先锋欧美激情| 国产啪精品视频| 欧美黑人巨大xxxxx| 欧美国产日本在线| 久久五月精品| 伊人伊成久久人综合网小说| 亚洲大尺度视频| 欧美妇女性影城| av一级在线观看| 精品久久久久久| 久久久久久久久久91| 国产精品欧美极品| 国产熟妇久久777777| 成人福利视频在线看| 在线a免费观看| 日本色综合中文字幕| 日本精品一区在线观看| 亚洲精品乱码| 久久亚洲国产成人精品无码区| 99国产精品免费视频观看| 日本一区二区在线| 蜜乳av综合| 久久久久网址| 久久狠狠久久| 狠狠色伊人亚洲综合网站色| 91精品啪在线观看国产爱臀| 成人福利在线视频| 亚洲人成777| 91美女片黄在线观| 婷婷久久免费视频| 国产欧美一区二区三区在线看| 亚洲精品.com| 国产成人中文字幕| 亚洲一区二区三区四区| 日韩av日韩在线观看| 成人片免费看| 国产97在线|日韩| 日韩欧美一区二区三区在线观看 | 一区二区在线视频观看| 97人人澡人人爽| 亚洲日本视频在线| 国产不卡一区二区在线观看| 91在线一区| 精品国产_亚洲人成在线| 欧美成a人免费观看久久| 国产一区高清视频| 亚欧洲精品视频在线观看| 九9re精品视频在线观看re6| 日韩精品福利一区二区三区| 久久99热只有频精品91密拍| 亚洲婷婷伊人| 亚洲黄色成人久久久| 欧美gayvideo| 美女av免费观看| 国产日韩欧美高清免费| 国产1区2区在线| 另类小说综合欧美亚洲| 亚洲精品中文字幕乱码无线| 国产福利一区二区三区视频| 天天躁日日躁狠狠躁av| 91麻豆福利精品推荐| 亚洲精品午夜视频| 中文字幕一区二区三区不卡| 久草中文在线视频| 色综合久久综合中文综合网| 亚洲无码精品在线播放| 欧美一级二级三级蜜桃| 天天综合天天色| 在线观看91久久久久久| 怡红院在线播放| 欧美一性一乱一交一视频| 成人在线观看免费视频| 99se婷婷在线视频观看| 亚洲精品小区久久久久久| 亚洲精品一区二区三区蜜桃久| 欧美另类综合| 已婚少妇美妙人妻系列| 国产一区二区免费看| 亚洲精品在线视频免费观看| 欧美国产97人人爽人人喊| 国产黄色片在线免费观看| 婷婷成人综合网| ,亚洲人成毛片在线播放| 亚洲国产福利在线| 天堂资源在线中文| 91精品国产网站| 在线播放成人| 免费电影一区| 欧美国产免费| 婷婷激情四射五月天| 国产69精品一区二区亚洲孕妇| 99久久人妻无码精品系列| 一区二区三区中文免费| 无码人妻精品一区二区三区蜜桃91| 91精品国产综合久久精品| 色哟哟在线观看| 欧美高清视频在线观看| 欧美free嫩15| 久久久免费看| 欧美日本免费| 特级西西444www| 欧美国产欧美亚州国产日韩mv天天看完整| 久久久久久久九九九九| 欧美伦理视频网站| 久久精品蜜桃| 海角国产乱辈乱精品视频| 欧美黄色a视频| 日韩成人av网站| 午夜在线视频一区二区区别| 在线播放av网址| 亚洲激情五月婷婷| 亚洲中文字幕在线观看| 亚洲小视频在线| 欧美gv在线| 精品中文字幕人| 一区免费视频| 日韩成人av影院| 亚洲一区二区视频在线| 国产伦子伦对白视频| 中文字幕av一区二区| 成人va天堂| 欧美国产综合视频| 亚洲综合社区| 玖草视频在线观看| 五月天激情小说综合| 刘玥91精选国产在线观看| 久久91亚洲精品中文字幕奶水 | 国产日韩三区| 国产一区日韩欧美| 成人做爰69片免费| 一区二区三区自拍| www日本在线| 欧美黄色三级网站| 91蜜桃臀久久一区二区| 日韩精品久久一区二区| 国产高清亚洲一区| 久久精品人妻一区二区三区| 欧美大片一区二区| 蜜桃传媒在线观看免费进入 | 精品日韩一区| 91看片在线免费观看| 欧美国产一区在线| 亚洲天堂2021av| 久久不射热爱视频精品| 亚洲成人黄色| 欧美视频免费看欧美视频| 99久久免费精品| 日本中文在线播放| 亚洲人成电影网站色xx| 色婷婷综合久久久中字幕精品久久 | www.久久精品.com| 久久久久久久久久国产精品| 美女视频亚洲色图| 日韩欧美xxxx| 国产精品久久久久aaaa| 99久久免费国产精精品| 欧美激情亚洲精品| 校花撩起jk露出白色内裤国产精品| 亚洲国产精品久久久久爰色欲| 中文字幕免费不卡在线| 国产麻豆一精品一男同| 久久久久久久999精品视频| 国产女人18毛片水真多18精品| 男人天堂999| 中文字幕日韩精品一区| 亚洲av无码乱码国产精品| 68精品国产免费久久久久久婷婷| 国产成人ay| 伊人成人免费视频| 天天免费综合色| 色多多视频在线观看| 成人一区二区在线| 三级亚洲高清视频| 成熟的女同志hd| 亚洲老板91色精品久久| 国产高清视频一区二区| 免费看又黄又无码的网站| 中文字幕va一区二区三区| 精品国自产拍在线观看| 青草成人免费视频| 欧美xxx在线观看| 性欧美一区二区| 欧美电影精品一区二区| 欧洲av一区二区| 欧美人与动牲交xxxxbbbb| 国产亚洲欧美一区在线观看| 99久久久国产精品无码网爆| 日韩av手机在线| 在线观看日韩av电影| 91精品久久久久久久久久久久|