从 AWS 静态网站部署到使用 Terraform 的高级基础设施即代码 (IaC)
- 简介
- 第一部分:使用 AWS 构建并部署基于 Web 的简历
- 第二部分:使用 Terraform 在 Azure 上部署在线简历
- 第三部分:Terraform 进阶
- 进一步学习的资源库
- 用于更好 Web 开发的 HTML 和 CSS 资源
- 结论
简介
本文将引导您完成从在 AWS 上手动部署静态网站,到在 Azure 上使用 Terraform 进行自动化部署,并进一步深入探讨使用 Terraform 以及 Terraform 云开发工具包 (CDKTF) 的基础设施即代码实践。
第一部分:使用 AWS 构建并部署基于 Web 的简历
第 0 步:手动操作
使用 S3、Route 53、AWS Certificate Manager 和 CloudFront 等 AWS 服务部署一个简单的简历网站。这种适合初学者且经济高效的方法展示了云部署的基础知识。
前置要求
- 用于版本控制的 GitHub 账户。
- Visual Studio Code 或您偏好的代码编辑器。
- AWS 账户。
- 本地计算机已安装 Git。
部署步骤
- 使用 HTML、CSS 和 JavaScript 构建您的简历。
- 上传至 AWS S3 并配置静态网站托管。
- 使用 Route 53 配置自定义域名。
- 使用 AWS Certificate Manager 设置 SSL/TLS。
- 创建 CloudFront 分发。
- 可选:与 GitHub 集成以实现持续部署。
结论
- 优点:适合初学者、经济高效、可定制。
- 缺点:手动流程、特定于 AWS、需要定期维护。
第二部分:使用 Terraform 在 Azure 上部署在线简历
第 1 步:使用硬编码值的 Terraform HCL
使用 Terraform 在 Azure 上部署在线简历,利用 Azure 的存储账户、CDN 和 DNS 进行全球分发。
前置要求
部署步骤
设置提供程序配置、变量以及资源,如资源组、存储账户、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 的高级基础设施即代码实践,本指南为开发人员提供了高效管理和扩展云基础设施所需的知识。

