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

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

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

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

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

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

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

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

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

其他资源
- YouTube 视频:
- GitHub 仓库:
标签: Terraform AWS DevOps