在 AWS 上使用 Terraform 部署安全且可扩展的静态网站

发布: (2025年12月13日 GMT+8 18:27)
3 min read
原文: Dev.to

Source: Dev.to

概览

本小项目演示了使用 Terraform 在 AWS 上部署安全的静态网站。它提供了一个端到端的基础设施即代码解决方案,利用 Amazon S3 存储静态内容,使用 Amazon CloudFront 进行全球内容分发,确保高可用性、提升性能,并通过自定义域名实现 HTTPS 访问。

架构

Project architecture

实施步骤

步骤 1 – 创建 S3 存储桶

创建了一个 S3 存储桶用于存放静态网站文件,并阻止所有公共访问,确保该存储桶不能直接从互联网访问。

S3 bucket configuration

步骤 2 – 上传网站资源

自动将本地 www/ 目录中的所有文件上传至 S3 存储桶,并设置合适的 MIME 内容类型(HTML、CSS、JS、图片)。

File upload to S3

步骤 3 – 获取 Route 53 托管区域

查询已有的公共 Route 53 托管区域,以获取对应域名的信息。

Route 53 hosted zone lookup

步骤 4 – 申请 SSL 证书

通过 AWS Certificate Manager(用于 CloudFront)申请 SSL 证书。证书通过 Route 53 的 DNS 验证完成。

ACM certificate request

步骤 5 – 创建 CloudFront Origin Access Control (OAC)

创建 OAC,使只有 CloudFront 能通过 HTTPS 读取 S3 存储桶中的内容,同时保持对存储桶的直接公共访问被阻止。

CloudFront OAC configuration

步骤 6 – 配置 CloudFront 分配

通过 Terraform 资源定义 CloudFront 分配。该分配利用 AWS 全球 CDN 将用户连接到内容,通过在边缘位置缓存资产来降低延迟。

CloudFront distribution setup

步骤 7 – 应用 S3 存储桶策略

添加存储桶策略,仅允许使用 SourceArn 条件的 CloudFront 分配执行 s3:GetObject 操作。

S3 bucket policy

步骤 8 – 创建 Route 53 别名记录

创建一个 Route 53 别名记录,将自定义域名(例如 www.example.com)指向 CloudFront 分配,从而实现通过自定义域名的 HTTPS 访问。

Route 53 alias record

其他资源

  • YouTube 视频:
  • GitHub 仓库:

标签: Terraform AWS DevOps

Back to Blog

相关文章

阅读更多 »