
从繁杂的 YAML 中解放出来,让你的基础设施也拥有“代码的优雅”。
传统的基础设施即代码(IaC)方案,比如 Amazon CloudFormation 或 Terraform,大量依赖 YAML 或 JSON。这些声明式语言虽然直观,但在处理复杂逻辑、参数复用、模块化场景时,会让配置像一碗看不懂的“螺蛳粉”。
于是我们找到了 Amazon CDK(Cloud Development Kit) —— 一个用主流编程语言(如 Python、TypeScript)来定义 亚马逊云科技资源的 IaC 框架。CDK 让你可以像写业务代码一样来写基础设施逻辑,彻底摆脱 YAML 地狱。

@startuml
title 静态网站部署架构 - Amazon CDK
actor Developer
Developer -> CDK: cdk deploy
package 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 -cdk
pip install Amazon -cdk-lib constructs初始化 CDK 项目:
mkdir cdk-static-site && cd cdk-static-site
cdk init app --language python生成后会看到如下目录结构:
cdk-static-site/
├── app.py # 入口文件
├── cdk_static_site/ # 核心 Stack 目录
│ └── cdk_static_site_stack.py
├── requirements.txt
└── cdk.json打开 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 Construct
class 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.0
constructs>=10.0.0,<11.0.0创建静态资源目录:
mkdir site-content
echo "<h1>Hello from CDK!</h1>" > site-content/index.htmlcdk bootstrap # 初始化环境,仅首次执行
cdk deploy # 部署上云部署完成后,终端会输出 Amazon CloudFront 的访问 URL,你可以立刻访问部署好的静态网站。
示例 aws-cdk-examples

功能 | CloudFormation(YAML) | Amazon CDK(Python) |
|---|---|---|
逻辑复用 | ❌困难,需用 Fn::Join、Ref 等拼接 | ✅直接用函数和变量 |
条件判断 | ❌嵌套写 if 条件繁琐 | ✅用 if/else |
模块化 | ❌使用模板嵌套,复杂 | ✅像写类一样组织 Stack |
开发体验 | 😢 编辑体验差 | 🥳 可调试、可补全 |
未来的云基础设施,理应像写应用一样优雅,而 Amazon CDK 正是这个未来的开始。