Ubuntu TechHive
static-website-deployment-manual-to-automated-with-terraform.md
静态网站部署 🚀 - 从手动到使用 Terraform 的自动化实现
article.细节

静态网站部署 🚀 - 从手动到使用 Terraform 的自动化实现

reading.进展 2 分钟阅读数

静态网站部署说明 🚀 - 从手动到使用 Terraform 的自动化部署

从 AWS 静态网站部署到使用 Terraform 的高级基础设施即代码 (IaC)

简介

本文将引导您完成从在 AWS 上手动部署静态网站,到在 Azure 上使用 Terraform 进行自动化部署,并进一步深入探讨使用 Terraform 以及 Terraform 云开发工具包 (CDKTF) 的基础设施即代码实践。

第一部分:使用 AWS 构建并部署基于 Web 的简历

第 0 步:手动操作

使用 S3、Route 53、AWS Certificate Manager 和 CloudFront 等 AWS 服务部署一个简单的简历网站。这种适合初学者且经济高效的方法展示了云部署的基础知识。

前置要求

部署步骤

  1. 使用 HTML、CSS 和 JavaScript 构建您的简历。
  2. 上传至 AWS S3 并配置静态网站托管。
  3. 使用 Route 53 配置自定义域名。
  4. 使用 AWS Certificate Manager 设置 SSL/TLS。
  5. 创建 CloudFront 分发
  • 可选:与 GitHub 集成以实现持续部署。

结论

  • 优点:适合初学者、经济高效、可定制。
  • 缺点:手动流程、特定于 AWS、需要定期维护。

第二部分:使用 Terraform 在 Azure 上部署在线简历

第 1 步:使用硬编码值的 Terraform HCL

使用 Terraform 在 Azure 上部署在线简历,利用 Azure 的存储账户、CDN 和 DNS 进行全球分发。

前置要求

  • 拥有有效订阅的 Azure 账户
  • 本地计算机已安装 Terraform
  • 具备 Terraform 和 Azure 服务的基础知识。
  • 已安装 Azure CLI
  • 本地计算机已安装 Git。

部署步骤

设置提供程序配置、变量以及资源,如资源组、存储账户、CDN 配置文件和 CDN 终结点。 参考“十二要素应用”原则和 Terraform 输入变量以实现动态配置。

提供程序配置

provider "azurerm" {
  features {}
}

变量定义和局部值

variable "location" {
  description = "创建资源的 Azure 区域。"
  default     = "East US"
}

variable "storage_account_name" {
  description = "用于托管简历网站的存储账户名称。"
  default     = "achilledevopsdemo123" # 确保名称唯一
}

variable "resource_group_name" {
  description = "资源组名称。"
  default     = "AchilleDevOpsDemoRG"
}

variable "cdn_profile_name" {
  description = "CDN 配置文件名称。"
  default     = "AchilleDevOpsCDNProfile"
}

variable "cdn_endpoint_name" {
  description = "CDN 终结点名称。"
  default     = "AchilleDevOpsCDNEndpoint"
}

资源组

resource "azurerm_resource_group" "rg" {
  name     = var.resource_group_name
  location = var.location
}

存储账户

resource "azurerm_storage_account" "resume" {
  name                     = var.storage_account_name
  resource_group_name      = azurerm_resource_group.rg.name
  location                 = var.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
  static_website {
    index_document = "index.html"
  }
}

CDN 配置文件和终结点

resource "azurerm_cdn_profile" "resume_cdn_profile" {
  name                = var.cdn_profile_name
  location            = var.location
  resource_group_name = azurerm_resource_group.rg.name
  sku                 = "Standard_Microsoft"
}

resource "azurerm_cdn_endpoint" "resume_cdn_endpoint" {
  name                = var.cdn_endpoint_name
  profile_name        = azurerm_cdn_profile.resume_cdn_profile.name
  location            = var.location
  resource_group_name = azurerm_resource_group.rg.name
  origin {
    name      = "resumeOrigin"
    host_name = local.storage_account_hostname
  }
}

输出

网站 URL 和 CDN 终结点主机名

output "static_website_url" {
  value = azurerm_storage_account.resume.primary_web_endpoint
}

output "cdn_endpoint_hostname" {
  value = azurerm_cdn_endpoint.resume_cdn_endpoint.host_name
}

使用 Terraform 的优缺点

  • 优点:基础设施即代码、与提供程序无关、状态管理、模块化设计。
  • 缺点:学习曲线、状态管理复杂性、大型基础设施的性能问题。

第三部分:Terraform 进阶

第 4 步:Terraform CDK 转换

Terraform 云开发工具包 (CDKTF) 允许您使用熟悉的编程语言定义云基础设施。本步骤涵盖 CDKTF 的设置和基本用法,重点介绍 Python 环境,展示初始设置、项目初始化和资源部署。

在 Windows 上设置 CDKTF

开始之前,请确保您的计算机上已安装 Node.js 和 Python。CDKTF 依赖这两者来执行基础设施即代码。

准备与初始化

首先,使用 npm 全局安装 CDKTF CLI,初始化一个新项目,并为开发准备环境。

npm install -g cdktf-cli
mkdir cdktf-project
cd cdktf-project
cdktf init --template="python-pip" --local --project-name="MyCDKTFProject" --project-description="My CDKTF project" --main-stack="main"

此命令使用 Python 初始化一个新的 CDKTF 项目。`–local` 标志用于在本地存储状态,但在生产环境中,您应该配置远程状态存储。

激活 Python 虚拟环境

CDKTF 项目使用 Python 虚拟环境来管理依赖项。使用以下命令激活它:

source .venv/bin/activate
安装依赖项

初始化项目后,安装必要的依赖项,包括 AWS、Azure 和 Google Cloud 的 CDKTF 提供程序。

pip install cdktf cdktf-cli constructs
cdktf get

`cdktf get` 会为 `cdktf.json` 中指定的提供程序生成绑定。

定义基础设施

使用 Python 定义您的基础设施。例如,在 `main.py` 中定义一个 AWS S3 存储桶:

from constructs import Construct
from cdktf import App, TerraformStack
from imports.aws import AwsProvider, s3

class MyStack(TerraformStack):
    def __init__(self, scope: Construct, ns: str):
        super().__init__(scope, ns)
        AwsProvider(self, 'Aws', region='us-east-1')
        
        s3.Bucket(self, 'MyBucket',
            bucket='my-unique-bucket-name'
        )

app = App()
MyStack(app, "my-stack")
app.synth()

此代码片段定义了一个包含单个 S3 存储桶的堆栈。

部署基础设施

定义好基础设施后,使用 CDKTF CLI 进行计划和部署。

cdktf plan
cdktf deploy

`cdktf plan` 会生成执行计划,显示 CDKTF 将执行的操作。`cdktf deploy` 会在您的云提供程序中配置资源。

清理资源

为避免产生不必要的费用,请在完成后销毁资源。

cdktf destroy

`cdktf destroy` 会移除已部署的资源。

CDKTF Windows 设置

对于 Windows 用户,过程类似。请确保使用 PowerShell 执行命令,并使用以下命令激活 Python 虚拟环境:

.venv\Scripts\Activate.ps1

按照上述步骤操作,并根据 Windows 环境的需要调整路径和命令。

进一步学习的资源库

提供有关 AWS、Azure、Terraform、Git、GitHub、GitLab、HTML 和 CSS 的综合链接和资源。

用于更好 Web 开发的 HTML 和 CSS 资源

重点介绍学习 HTML 和 CSS 的教程、课程和书籍。

结论

从在 AWS 上部署静态网站到采用 Terraform 和 Terraform CDK 的高级基础设施即代码实践,本指南为开发人员提供了高效管理和扩展云基础设施所需的知识。