让 CDK Stack 到点自毁:cdk-constructs 临时资源 TTL 自动销毁机制详解
让 CDK Stack 到点自毁cdk-constructs 临时资源 TTL 自动销毁机制详解【免费下载链接】cdk-constructsA collection of higher-level reusable cdk constructs项目地址: https://gitcode.com/gh_mirrors/cd/cdk-constructs本文带你快速理解cdk-constructs仓库中的cdk-temp-stack组件它能让一个CDK Stack 在设定的 TTL存活时间到期后自动销毁实现 AWS 临时资源的到点自毁避免忘记清理而产生额外费用。为什么需要临时资源自动销毁 在开发、测试、联调或临时搭建演示环境时我们经常会创建一套CDK 临时基础设施一个 VPC、几个 Lambda、一个测试数据库……用完就该删。但现实中Stack 往往被遗忘在 AWS 账户里持续计费。cdk-temp-stack解决的正是这个痛点给 Stack 加一个存活时间TTL到期后自动删除整个 Stack 及其所有资源。你只需声明ttl剩下的交给 CloudFormation EventBridge Lambda 自动化完成。 核心价值把记得删这件容易忘的事变成自动删的确定性流程。cdk-temp-stack 是如何实现的 整个机制非常小巧核心只有 3 个文件非常适合学习 AWS 自动化清理的设计思路文件作用packages/cdk-temp-stack/src/time-to-live.tsTimeToLive构件定时规则 删除函数packages/cdk-temp-stack/src/temp-stack.tsTempStack开箱即用的自毁栈packages/cdk-temp-stack/src/lambdas/delete-stack/index.ts执行DeleteStack的 Lambda核心构件 TimeToLiveTimeToLive是一个标准的Construct它在你的 Stack 内做三件事创建一个 Lambda 函数delete-stack负责真正执行删除创建一条 EventBridge 定时规则调度表达式为rate(ttl)即每隔 TTL 触发一次把 Lambda 挂到规则上并把当前 Stack 的AWS::StackId作为事件参数传入。⚠️ 源码中还有一段很贴心的设计onPrepare()会给栈内其他所有资源添加对TimeToLive的依赖确保定时删除函数最后才被部署、最先被回收避免清理者自己还没就绪就被删的尴尬。删除函数 delete-stack真正干活的只有几行——它拿到stackId后调用 CloudFormation 的deleteStackAPIawait cfn.deleteStack({ StackName: stackId }).promise();注意为了让 Lambda 能删掉栈内任意类型的资源它的 IAM 角色被授予了*权限。这是一个以安全换简洁的取舍——生产环境请务必结合最小权限原则自行收敛。双重保护一个栈只能有一个 TTLTimeToLive内置了validate()校验同一个 Stack 中只允许存在一个TimeToLive实例。如果重复添加cdk synth会直接报错防止出现多个互相冲突的删除规则。快速上手两种使用方式 方式一继承 TempStack最省事适合整条新链路都是临时的场景。让自定义栈直接继承TempStack构造时传入ttl即可export class TempInfraStack extends TempStack { constructor(scope: Construct, id: string, props: TempStackProps) { super(scope, id, props); new Vpc(this, VPC); // 临时资源照写照加 } }入口处指定存活时间例如 10 分钟后自毁new TempInfraStack(app, TempInfraStack, { env: { region: process.env.DEFAULT_REGION, account: process.env.CDK_DEFAULT_ACCOUNT }, ttl: Duration.minutes(10), });方式二向已有栈添加 TimeToLive更灵活如果你想给一个已存在的普通Stack加自毁能力直接实例化TimeToLive构件即可无需改动栈的继承关系new TimeToLive(this, TimeToLive, { ttl: Duration.minutes(10), });✅ 两种方式最终落到同一套资源区别只是TempStack帮你预装好了TimeToLive。完整可运行的示例见examples/temp-stack-example/含temp-infra-stack.ts与temp-infra-app.ts。部署后会发生什么 ⏱️cdk deploy部署成功Stack 正常提供能力EventBridge 规则按rate(ttl)周期触发每次触发都会调用delete-stackLambda 删除整个 StackStack 删除后定时规则也随之消失——实现用完即走的闭环。同时合成阶段会在控制台打印一条醒目提示Warning! The stack destroys itself in X minutes.提醒你这不是一个长命的栈。注意事项与最佳实践 TTL 是周期而非一次性闹钟调度用rate()所以它本质是每隔 TTL 触发一次删除。删除成功后栈已不存在自然不会再次触发。权限需谨慎delete-stackLambda 默认持有*权限生产场景建议显式收窄为cloudformation:DeleteStack等最小集。不要叠加多个 TTL一个栈仅保留一个TimeToLive否则合成阶段会报错。适合场景CI/CD 临时测试环境、按需演示、短时压测、临时调试链路。想深入了解 API完整的TempStack/TimeToLive接口文档见packages/cdk-temp-stack/API.md使用指南见packages/cdk-temp-stack/README.md。一句话总结cdk-temp-stack用极小的代码量把CDK 临时资源到点自毁做成了可复用构件——只需声明一个ttl你的测试栈就能在到期后自动清理省心又省钱。【免费下载链接】cdk-constructsA collection of higher-level reusable cdk constructs项目地址: https://gitcode.com/gh_mirrors/cd/cdk-constructs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻