打开网易新闻 查看精彩图片

全球已有超1.2万名工程师参与Cloud Resume Challenge,完成率不足11%。这个由前AWS社区经理Forrest Brazeal发起的项目,要求参与者从零搭建完整云架构——不是本地跑通,而是真刀真枪上线生产环境。

Dinku Saworku花了三周走完Azure版本全流程。他的简历现在 live 在 dinkisaworku.com,背后是7个Azure服务的精密编排,以及一套全自动CI/CD流水线。更关键的是:整个基础设施用Terraform写成代码,域名和DNS之外零手动配置。

认证门槛:11%完成率的隐形筛选器

认证门槛:11%完成率的隐形筛选器

挑战第一步不是写代码,是考证。Saworku起步时已持有AZ-900、AZ-104、AZ-305三张微软认证——这相当于Azure生态的「驾驶证+行驶证+运营证」。

Brazeal的设计意图很明确:云架构不是玩具项目,不懂IAM权限模型、不懂VNet网络规划、不懂存储冗余策略,后续步骤会寸步难行。数据显示,47%的放弃发生在认证阶段。

「很多人想跳过这一步直接动手,结果在Step 4配置存储账户时卡三天,」Saworku复盘道,「AZ-104考的RBAC(基于角色的访问控制)和存储防火墙,正好是Terraform报错时你需要懂的。」

前端:故意不用框架的「逆潮流」选择

前端:故意不用框架的「逆潮流」选择

简历页面是单文件HTML+CSS,零JavaScript框架、零构建工具。Saworku选了Google Fonts的三款字体——Bebas Neue做标题、DM Mono跑代码块、Syne撑正文,搭出暗色赛博朋克风。

动效靠原生CSS实现:滚动触发的reveal动画、跟随光标的自定义指针、背景浮动的blob渐变。这种「复古」做法在2024年显得刻意,但恰好规避了一个真实陷阱:前端构建链的复杂度会淹没云架构的学习主线。

「我想让面试官看到,我能用基础技术做出完整体验,」Saworku解释,「而不是把webpack配置错误当成项目难点写进博客。」

Terraform:从Day 1就拒绝点击门户

Terraform:从Day 1就拒绝点击门户

Azure门户的图形界面是新手陷阱——点一点就能跑通demo,但生产环境需要可复现、可审计、可回滚的基础设施。Saworku的存储账户配置长这样:

打开网易新闻 查看精彩图片

resource "azurerm_storage_account" "resume" { name = "dinkisacvstorage" account_tier = "Standard" account_replication_type = "LRS" static_website { index_document = "my_resume.html" error_404_document = "my_resume.html" } }

LRS(本地冗余存储)的选择有讲究:单区域部署降低成本,静态网站不需要跨地域高可用。这个决策被编码进.tf文件,意味着任何人git clone后terraform apply,能得到完全一致的环境。

但代码即基础设施也有代价。Saworku踩过一个典型坑:Terraform的replace()函数漏了右括号,plan阶段没报错,apply时炸掉整个Front Door配置。「现在我的pre-commit钩子强制跑terraform validate,」他说,「省下的debug时间够考半张证。」

Azure Front Door:CDN退役后的被迫升级

Azure Front Door:CDN退役后的被迫升级

经典Azure CDN已停止新配置文件创建,Saworku被迫迁移到Front Door Standard。这个「被迫」反而带来意外收益:内置HTTPS证书管理、全球边缘缓存、HTTP到HTTPS的强制跳转——三项需求一个服务覆盖。

架构图里,Front Door坐在Blob存储前面,形成「边缘节点→源站」的缓存层。访问者首次请求从南非约翰内斯堡的存储拉取,后续命中新加坡或法兰克福的边缘节点,延迟从340ms压到45ms。

证书管理曾是云部署的暗礁。Let's Encrypt的90天续期、证书链配置错误、根证书过期事件——Front Door把这些埋进托管层,Saworku的Terraform代码里只剩一行ssl_certificate_type = "FrontDoor"。

无后端架构:一个Python函数的 visitor counter

无后端架构:一个Python函数的 visitor counter

简历需要展示「有人访问过」——但传统服务器太重了。Saworku的解法:浏览器JS直接fetch Azure Function,Python HTTP触发器读写CosmosDB Table API。

这个设计把成本压到接近零。Function按执行次数计费,CosmosDB Table API是NoSQL里最便宜的选项,两者都属serverless(无服务器)——没流量时不产生费用。Saworku的月度账单:$0.47。

但serverless有冷启动惩罚。Function首次唤醒需要2-3秒,访客可能看到计数器延迟更新。Saworku的妥协:前端先渲染页面,计数器异步加载,「像旧时代的网站统计徽章,晚几秒出现不算bug。」

GitHub Actions:推送即部署的闭环

GitHub Actions:推送即部署的闭环

打开网易新闻 查看精彩图片

代码仓库分成前后端两个repo,共享一套自动化逻辑:

前端推送 → GitHub Actions → 编译静态文件 → 上传Blob存储 → 调用Azure API刷新CDN缓存

后端推送 → GitHub Actions → 跑pytest单元测试 → Terraform plan → 人工确认后apply → 部署Function

关键差异在安全边界。前端流水线用存储账户的SAS令牌(共享访问签名),权限只限Blob读写;后端流水线需要服务主体(Service Principal)的客户端密钥,能操作整个资源组。Saworku把密钥存进GitHub Secrets, rotated每90天。

「测试阶段我犯过错,」他回忆,「pytest没覆盖到CosmosDB连接字符串的格式校验,导致一次部署后API 500错误。现在CI里加了集成测试,用Azure Storage Emulator模拟本地环境。」

Cloudflare:10美元/年的DNS保险

Cloudflare:10美元/年的DNS保险

唯一没用Terraform管理的是域名。Saworku在Cloudflare注册dinkisaworku.com,年费约10美元,CNAME记录指向Front Door的默认域名。

这个选择有现实考量:Azure DNS不支持某些顶级域的注册,Cloudflare的DNS解析速度常年排全球前三。更重要的是,Cloudflare的DNS记录变更实时生效,Azure DNS有5-10分钟延迟——调试HTTPS证书时,这差值决定你是等一杯咖啡还是通宵。

但这也意味着架构存在「半手动」环节。Saworku的Terraform代码里注释了一行:# TODO: migrate DNS to azurerm_dns_zone,「等Azure支持这个TLD就迁过去,现在先让简历活着。」

三周挑战结束,Saworku的GitHub仓库收获127个star,简历页面累计4000+访问。他把项目写进LinkedIn后,收到两家云厂商的面试邀请——不是因为他「会Azure」,而是因为他能解释清楚为什么选LRS而不是GRS(异地冗余),以及Front Door的缓存失效策略如何设计。

Cloud Resume Challenge的隐藏规则:完成不是终点,博客和仓库是技术影响力的复利账户。Brazeal在挑战说明里埋了一句话——「你的简历应该能证明自己」,现在Saworku的版本确实做到了。

下一个问题是:当面试官点开你的GitHub,能看到一个 live 的、可交互的、有完整CI/CD的项目吗?还是只有README里的「熟练云计算」五个字?