从繁杂的 YAML 中解放出来,让你的基础设施也拥有“代码的优雅”。
🧭 背景:为什么我们开始用 CDK?
传统的基础设施即代码(IaC)方案,比如 Amazon CloudFormation 或 Terraform,大量依赖 YAML 或 JSON。这些声明式语言虽然直观,但在处理复杂逻辑、参数复用、模块化场景时,会让配置像一碗看不懂的“螺蛳粉”。
于是我们找到了 Amazon CDK(Cloud Development Kit) —— 一个用主流编程语言(如 Python、TypeScript)来定义 亚马逊云科技资源的 IaC 框架。CDK 让你可以像写业务代码一样来写基础设施逻辑,彻底摆脱 YAML 地狱。
新用户可获得高达 200 美元的服务抵扣金
亚马逊云科技新用户可以免费使用亚马逊云科技免费套餐(Amazon Free Tier)。注册即可获得 100 美元的服务抵扣金,在探索关键亚马逊云科技服务时可以再额外获得最多 100 美元的服务抵扣金。使用免费计划试用亚马逊云科技服务,最长可达 6 个月,无需支付任何费用,除非您选择付费计划。付费计划允许您扩展运营并获得超过 150 项亚马逊云科技服务的访问权限。
✨ 项目目标:部署一个带 Amazon S3 + Amazon CloudFront 的静态网站托管架构
架构图:
@startumltitle 静态网站部署架构 - Amazon CDKactor DeveloperDeveloper -> CDK: cdk deploypackage Amazon { [S3 Bucket] as S3 [CloudFront Distribution] as CF [IAM Role] as IAM}CDK --> S3 : 创建存储桶CDK --> CF : 创建CDN分发CDK --> IAM : 设置访问权限CF --> S3 : 读取静态资源@enduml
🧰 项目准备
首先安装 CDK CLI 工具(使用 Python 示例):
npm install -g Amazon -cdkpip install Amazon -cdk-lib constructs
初始化 CDK 项目:
mkdir cdk-static-site && cd cdk-static-sitecdk init app --language python
生成后会看到如下目录结构:
cdk-static-site/├── app.py # 入口文件├── cdk_static_site/ # 核心 Stack 目录│ └── cdk_static_site_stack.py├── requirements.txt└── cdk.json
💻 用 Python 编写资源定义逻辑
打开 cdk_static_site_stack.py
,编写如下内容:
from Amazon _cdk import ( Stack, Amazon _s3 as s3, Amazon _cloudfront as cloudfront, Amazon _s3_deployment as s3deploy,)from constructs import Constructclass CdkStaticSiteStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) # 1. 创建 S3 桶 site_bucket = s3.Bucket(self, "StaticSiteBucket", website_index_document="index.html", public_read_access=True, removal_policy=s3.RemovalPolicy.DESTROY ) # 2. 创建 CloudFront 分发 distribution = cloudfront.CloudFrontWebDistribution(self, "SiteDistribution", origin_configs=[cloudfront.SourceConfiguration( s3_origin_source=cloudfront.S3OriginConfig( s3_bucket_source=site_bucket ), behaviors=[cloudfront.Behavior(is_default_behavior=True)] )] ) # 3. 部署网站文件到 S3 s3deploy.BucketDeployment(self, "DeployWebsite", sources=[s3deploy.Source.asset("./site-content")], destination_bucket=site_bucket, distribution=distribution, distribution_paths=["/*"] )
📦 添加依赖并创建网站资源
在 requirements.txt
中加入:
Amazon -cdk-lib==2.120.0constructs>=10.0.0,<11.0.0
创建静态资源目录:
mkdir site-contentecho "<h1>Hello from CDK!</h1>" > site-content/index.html
🚀 一键部署
cdk bootstrap # 初始化环境,仅首次执行cdk deploy # 部署上云
部署完成后,终端会输出 Amazon CloudFront 的访问 URL,你可以立刻访问部署好的静态网站。
🧠 CDK vs YAML:从此不再写“看不懂的配置”
功能 | CloudFormation(YAML) | Amazon CDK(Python) |
---|---|---|
逻辑复用 | ❌困难,需用 Fn::Join、Ref 等拼接 | ✅直接用函数和变量 |
条件判断 | ❌嵌套写 if 条件繁琐 | ✅用 if/else |
模块化 | ❌使用模板嵌套,复杂 | ✅像写类一样组织 Stack |
开发体验 | 😢 编辑体验差 | 🥳 可调试、可补全 |
📌 总结:为什么推荐用 CDK?
- ✅ 编程语言即配置语言,天然支持变量、循环、逻辑判断✅ 更强的可读性和维护性✅ 支持多语言:TypeScript、Python、Java、C#✅ 与亚马逊云科技深度集成,CLI 生态完备
未来的云基础设施,理应像写应用一样优雅,而 Amazon CDK 正是这个未来的开始。
🪜 推荐阅读
以上就是本文的全部内容啦。最后提醒一下各位工友,如果后续不再使用相关服务,别忘了在控制台关闭,避免超出免费额度产生费用~
如果你觉得这篇文章有帮助,欢迎 👍 点赞 + 🧠 收藏 + 📬 关注后续,我将持续分享关于大模型、云原生和自动化部署的实战干货!