数据湖实战:用 Amazon Glue + Athena 构建企业级数据分析基座

从繁杂的 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 的静态网站托管架构

架构图:

less 复制代码
@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 示例):

vbnet 复制代码
npm install -g Amazon -cdk
pip install Amazon -cdk-lib constructs

初始化 CDK 项目:

arduino 复制代码
mkdir cdk-static-site && cd cdk-static-site
cdk init app --language python

生成后会看到如下目录结构:

csharp 复制代码
cdk-static-site/
├── app.py                # 入口文件
├── cdk_static_site/      # 核心 Stack 目录
│   └── cdk_static_site_stack.py
├── requirements.txt
└── cdk.json

💻 用 Python 编写资源定义逻辑

打开 cdk_static_site_stack.py,编写如下内容:

ini 复制代码
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 中加入:

ini 复制代码
Amazon -cdk-lib==2.120.0
constructs>=10.0.0,<11.0.0

创建静态资源目录:

css 复制代码
mkdir site-content
echo "<h1>Hello from CDK!</h1>" > site-content/index.html

🚀 一键部署

bash 复制代码
cdk bootstrap     # 初始化环境,仅首次执行
cdk deploy        # 部署上云

部署完成后,终端会输出 Amazon CloudFront 的访问 URL,你可以立刻访问部署好的静态网站。

示例 aws-cdk-examples


🧠 CDK vs YAML:从此不再写"看不懂的配置"

功能 CloudFormation(YAML) Amazon CDK(Python)
逻辑复用 ❌困难,需用 Fn::Join、Ref 等拼接 ✅直接用函数和变量
条件判断 ❌嵌套写 if 条件繁琐 ✅用 if/else
模块化 ❌使用模板嵌套,复杂 ✅像写类一样组织 Stack
开发体验 😢 编辑体验差 🥳 可调试、可补全

📌 总结:为什么推荐用 CDK?

  • ✅ 编程语言即配置语言,天然支持变量、循环、逻辑判断
  • ✅ 更强的可读性和维护性
  • ✅ 支持多语言:TypeScript、Python、Java、C#
  • ✅ 与亚马逊云科技深度集成,CLI 生态完备

未来的云基础设施,理应像写应用一样优雅,而 Amazon CDK 正是这个未来的开始。


🪜 推荐阅读


以上就是本文的全部内容啦。最后提醒一下各位工友,如果后续不再使用相关服务,别忘了在控制台关闭,避免超出免费额度产生费用~

如果你觉得这篇文章有帮助,欢迎 👍 点赞 + 🧠 收藏 + 📬 关注后续,我将持续分享关于大模型、云原生和自动化部署的实战干货!

相关推荐
Lee川17 分钟前
深度拆解:基于面向对象思维的“就地编辑”组件全模块解析
javascript·架构
勤劳打代码18 分钟前
Flutter 架构日记 — 状态管理
flutter·架构·前端框架
子兮曰6 小时前
后端字段又改了?我撸了一个 BFF 数据适配器,从此再也不怕接口“屎山”!
前端·javascript·架构
卓卓不是桌桌8 小时前
如何优雅地处理 iframe 跨域通信?这是我的开源方案
javascript·架构
Qlly8 小时前
DDD 架构为什么适合 MCP Server 开发?
人工智能·后端·架构
用户881586910911 天前
AI Agent 协作系统架构设计与实践
架构
鹏北海1 天前
Qiankun 微前端实战踩坑历程
前端·架构
货拉拉技术1 天前
货拉拉海豚平台-大模型推理加速工程化实践
人工智能·后端·架构
RoyLin1 天前
libkrun 深度解析:架构设计、模块实现与 Windows WHPX 后端
架构
CoovallyAIHub2 天前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github