AWS顶尖云 AWS顶尖云 立即咨询
返回列表

亚马逊云高权重账号 AWS CDK 实战教程:通过代码定义和部署云端资源的完整操作指南

亚马逊aws / 2026-10-21 16:02:06

如果需要更深入咨询了解可以联系全球代理上TG: @cloudcup  他们在云平台领域有更专业的知识和建议,他们有国际阿里云,国际腾讯云,国际华为云,aws亚马逊,谷歌云一级代理的渠道,微软云开户充值。oss防风控上传加密系统。客服1V1服务,支持免实名、免备案、免绑卡。开通即享专属VIP优惠、充值秒到账、官网下单享双重售后支持。

用户搜索“AWS CDK 实战:通过代码定义和部署云端资源”,通常不是为了看概念,而是已经准备把基础设施从手工点控制台切换到代码管理,或者已经写了 CDK 代码,却在部署时遇到权限、网络、实例连接、数据库访问、证书绑定、堆栈删除失败等问题。最常见的目标包括:用代码一次性创建 VPC、子网、安全组、EC2、RDS、S3;把环境分成 dev、test、prod;减少手工配置差异;在更新资源时避免误删;以及在部署后能真正连上服务器和数据库。

下面的内容不做概念铺垫,直接围绕“怎么做、哪里容易错、怎么排查”展开。

一、开始前先确认:你真正需要准备什么

在 AWS CDK 落地前,最容易忽略的是权限和本地环境。很多“部署失败”并不是代码问题,而是账号、Region 或 Bootstrap 没准备好。

1. 账号与权限要求

项目建议要求常见问题
AWS 账号可访问目标账号与目标 Region切错账号,资源部署到错误环境
IAM 权限至少能创建 CloudFormation、IAM、EC2、RDS、VPC、S3、SSM 日志相关资源部署到一半报 AccessDenied
CLI 配置aws configure 配置好 Access Key、Secret、RegionCDK 使用了默认 profile,和预期账号不一致
Bootstrap 权限允许执行 cdk bootstrap首次部署无法上传资产

2. 本地环境建议

建议使用 Node.js LTS 版本,并安装 AWS CLI 与 CDK CLI。

工具建议版本检查命令
Node.js18 或 20 LTSnode -v
npm与 Node 匹配npm -v
AWS CLIv2aws --version
AWS CDK CLI最新稳定版cdk --version

安装命令示例:

<code>npm install -g aws-cdk</code>

<code>aws configure</code>

如果你有多个 AWS 账号,建议从一开始就使用 profile,例如:

<code>aws configure --profile devops-prod</code>

后续所有命令都显式带上 profile,避免资源部署错账号。

二、创建 CDK 项目时,先把目录结构和环境分层定好

很多人一开始直接把所有资源写进一个 stack,后期一改就牵一发而动全身。更稳妥的做法是至少区分网络层、计算层、数据库层。

1. 初始化项目

在空目录执行:

<code>mkdir aws-cdk-practice && cd aws-cdk-practice</code>

<code>cdk init app --language typescript</code>

安装常用依赖:

<code>npm install aws-cdk-lib constructs</code>

2. 第一次部署前必须执行 Bootstrap

亚马逊云高权重账号 这是用户最容易跳过的一步。没有 Bootstrap,涉及资产上传、Docker 镜像、跨账号部署时会直接失败。

命令示例:

<code>cdk bootstrap aws://123456789012/ap-southeast-1 --profile devops-prod</code>

参数填写建议如下:

参数填写方式注意事项
账号 ID目标 AWS Account ID不要用错测试账号
Region如 ap-southeast-1、ap-northeast-1Bootstrap 需要针对每个 Region 执行
profile本地 CLI profile 名称避免默认凭证误用

3. Region 和可用区怎么选

如果你的应用面向中国大陆以外用户,常用选择是新加坡、东京、法兰克福、弗吉尼亚。不要先看价格,先看访问延迟、数据库合规要求、备份位置和后续是否要挂 CDN/证书。

场景推荐 Region原因
东南亚网站ap-southeast-1延迟较低,面向新马印用户常见
日韩业务ap-northeast-1对日本访问友好
欧美 SaaSeu-central-1 或 us-east-1根据主要客户分布选
跨区域容灾主 Region + 异地备份 Region避免单 Region 故障

三、实操:用 CDK 创建 VPC、安全组、EC2 和 RDS

下面给一个更接近实际业务的结构:1 个 VPC,2 个公有子网,2 个私有子网,1 台 Linux EC2,1 个 MySQL RDS,EC2 通过安全组访问数据库,数据库不开放公网。

步骤1:创建基础网络

在 lib 目录下编辑 stack 文件,例如 lib/app-stack.ts。

先定义 VPC:

<code>const vpc = new ec2.Vpc(this, 'AppVpc', { maxAzs: 2, natGateways: 1, subnetConfiguration: [ { name: 'public', subnetType: ec2.SubnetType.PUBLIC, cidrMask: 24 }, { name: 'private', subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS, cidrMask: 24 } ] });</code>

这里最关键的不是代码本身,而是参数选择:

参数建议值适用场景
maxAzs2兼顾可用性与成本
natGateways1测试和中小业务先控成本
公有子网保留给负载均衡、跳板机或公网 EC2 用
私有子网保留数据库、内部服务部署位置

容易出错的点:

  • 把 RDS 放到公有子网,导致数据库暴露公网。
  • NAT 网关没开,私有子网实例无法更新软件包。
  • 只建一个可用区,后续高可用扩展困难。

亚马逊云高权重账号 步骤2:创建安全组并开放必要端口

先给 EC2 建一个安全组:

<code>const ec2Sg = new ec2.SecurityGroup(this, 'Ec2Sg', { vpc, allowAllOutbound: true }); ec2Sg.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), 'SSH'); ec2Sg.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(80), 'HTTP'); ec2Sg.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(443), 'HTTPS');</code>

再给 RDS 建安全组,只允许 EC2 安全组访问 3306:

<code>const dbSg = new ec2.SecurityGroup(this, 'DbSg', { vpc, allowAllOutbound: true }); dbSg.addIngressRule(ec2Sg, ec2.Port.tcp(3306), 'MySQL from EC2');</code>

注意:

  • 不要直接把 3306 对 0.0.0.0/0 放开。
  • 如果 SSH 只供办公网络使用,把 22 端口限制到固定公网 IP 段。
  • Linux 系统内还要检查 firewalld 或 iptables,云安全组放行不代表系统防火墙也放行。

步骤3:创建 EC2 实例

实例示例:

<code>const instance = new ec2.Instance(this, 'WebServer', { vpc, vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC }, instanceType: new ec2.InstanceType('t3.small'), machineImage: ec2.MachineImage.latestAmazonLinux2023(), securityGroup: ec2Sg, keyName: 'your-keypair-name' });</code>

配置选择建议:

场景CPU/内存建议磁盘建议
个人测试t3.micro 或 t3.small30GB gp3
中小网站t3.small 或 t3.medium40-80GB gp3
Java/Node 应用t3.medium 起60GB gp3,关注内存
高并发 APIc6i.large 起按日志量规划

如果你需要 Windows 服务器,可以把 machineImage 替换成 Windows AMI,并额外开放 3389 端口用于 RDP。Windows 场景下,初始管理员密码通常需要通过密钥解密获取,不建议把 3389 暴露给全网。

步骤4:创建 MySQL RDS

示例:

<code>const db = new rds.DatabaseInstance(this, 'AppMysql', { engine: rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_0_36 }), vpc, vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }, instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO), credentials: rds.Credentials.fromGeneratedSecret('dbadmin'), allocatedStorage: 20, maxAllocatedStorage: 100, securityGroups: [dbSg], multiAz: false, publiclyAccessible: false, backupRetention: cdk.Duration.days(7), deletionProtection: false, databaseName: 'appdb' });</code>

这里有几个高频决策点:

参数测试环境建议生产建议
实例规格db.t3.micro至少 db.t3.small 或更高
存储20GB 起按增长量预留,并启用自动扩容
Multi-AZ关闭重要业务建议开启
公网访问关闭默认关闭
备份保留3-7 天7-30 天

如果数据库连接失败,优先检查三件事:RDS 所在子网是否可达、3306 安全组是否只允许了正确来源、应用是否使用了错误的 endpoint 或凭据。

四、部署、验证与连接:这是最容易“代码通过但服务不可用”的阶段

1. 部署命令

<code>cdk synth</code>

<code>cdk diff --profile devops-prod</code>

<code>cdk deploy --profile devops-prod</code>

建议每次上线前先执行 cdk diff,特别是在生产环境,避免误删数据库、安全组或 EIP。

2. SSH 连接 Linux 服务器

获取实例公网 IP 后连接:

<code>ssh -i your-key.pem ec2-user@your_public_ip</code>

如果是 Ubuntu AMI,用户名通常是 ubuntu,而不是 ec2-user。

连接失败排查顺序:

  • 安全组是否开放 22。
  • 实例是否绑定公网 IP。
  • 子网路由表是否指向 Internet Gateway。
  • 亚马逊云高权重账号 本地办公网络是否屏蔽了 22 端口。
  • 密钥权限是否过宽,需执行 chmod 400 your-key.pem。

3. RDP 连接 Windows 服务器

如果部署的是 Windows 实例,确保安全组放行 3389,并在控制台获取 Administrator 密码后使用远程桌面工具连接。若长时间黑屏或认证失败,通常是实例初始化未完成、NACL 拦截或本地网络限制导致。

4. 数据库连接测试

在 EC2 内部测试 MySQL 连通性:

<code>mysql -h your-rds-endpoint -u dbadmin -p</code>

如果报 timeout,多半是网络或安全组问题;如果报 Access denied,则是用户名密码、授权主机或数据库参数问题。

五、网站与应用场景:DNS、证书、HTTPS 怎么配更稳

如果你的目标不只是建一台机器,而是部署网站或 API,CDK 通常还会继续管理域名解析、证书和负载均衡。

1. DNS 解析

域名如果在 Route 53,可直接用 CDK 创建 A 记录或别名记录;如果在第三方 DNS 平台,则在部署后手工填入负载均衡或 EIP 地址。

2. SSL 证书配置

亚马逊云高权重账号 证书建议使用 ACM,在负载均衡或 CloudFront 层终止 HTTPS,而不是直接在 EC2 手工传证书。这样后续续期更省事。

3. HTTPS 部署常见问题

问题常见原因处理方式
证书签发失败DNS 验证记录未生效检查 CNAME 是否已解析
浏览器提示不安全域名与证书不匹配确认证书覆盖主域名和子域名
80 可访问,443 不通安全组未放行 443开放 443 并检查监听器配置
HTTPS 跳转循环反向代理或应用层重复跳转统一在 ALB 或 Nginx 做跳转逻辑

六、不同用户怎么选配置,避免一开始就配错

亚马逊云高权重账号 1. 个人开发者

优先控制成本。建议 1 个 VPC、1 台 t3.micro 或 t3.small Linux 实例、1 个小规格 RDS 或直接先用容器内 MySQL 测试、S3 存日志和静态文件。数据库先不开 Multi-AZ,备份保留 3-7 天。

2. 企业用户

建议把网络、应用、数据库拆分成多个 stack;RDS 开启自动备份;关键资源加 deletionProtection;EC2 不直接暴露公网时,通过 ALB 或跳板机访问;安全组最小权限;参数通过 SSM Parameter Store 或 Secrets Manager 管理。

3. 跨境业务

先测目标市场网络延迟,再决定 Region。静态资源建议挂 CDN,源站放新加坡或东京较常见;数据库不要跨 Region 直连业务主库;如果涉及多地访问,可用只读副本或缓存分流。

4. 网站应用

推荐 Linux + Nginx + Node/PHP/Java,开放 80/443,SSH 限制办公出口 IP。日志单独挂载目录,定期快照;高峰期观察 CPU、内存、磁盘 IO,再决定是否横向扩容。

5. 数据库业务

亚马逊云高权重账号 如果数据库是核心,优先把预算留给 RDS 而不是 EC2。关注连接数、慢查询、IOPS、备份窗口和参数组。高并发场景建议配连接池,避免应用端把数据库打满。

亚马逊云高权重账号 七、部署失败和资源异常时,按这个顺序排查最省时间

1. cdk deploy 报权限不足

先看报错里具体拒绝的是哪类服务,例如 iam:CreateRole、ec2:CreateSecurityGroup、cloudformation:CreateChangeSet。很多企业账号开启了权限边界或 SCP,仅给 EC2 权限还不够,因为 CDK 底层依赖 CloudFormation、IAM、S3 资产桶等服务。

2. Bootstrap 已做,仍提示无法发布资产

通常是 Bootstrap 做在别的 Region、别的账号,或者当前 profile 不一致。执行 aws sts get-caller-identity 确认当前身份,再核对 cdk.json 与 CLI profile。

3. 堆栈删除失败

常见原因是 S3 桶非空、RDS 开启删除保护、ENI 残留、CloudWatch Log Group 被依赖。处理时先解除依赖,再执行 destroy。生产环境不要直接 destroy,先确认备份。

4. EC2 能创建但无法访问公网

检查四层:实例是否有公网 IP、子网路由表是否关联 Internet Gateway、安全组/NACL 是否放行、系统内部防火墙是否阻断。

5. RDS 创建成功但应用连不上

先从同 VPC 的 EC2 上测试 telnet 或 nc 到 3306;如果端口不通,先查安全组和子网;端口通但认证失败,再查账号密码、数据库名、字符集、参数组。

八、上线后必须做的优化,不然后面维护成本会明显上升

1. 安全优化

  • SSH 和 RDP 限制来源 IP,不对全网开放。
  • 数据库保持私网访问,不开放公网 endpoint。
  • 凭据放 Secrets Manager,不写死在代码或 user data。
  • 关键资源开启 CloudTrail、VPC Flow Logs 或最少基础审计日志。

2. 性能优化

  • EC2 使用 gp3 磁盘,通常比默认配置更可控。
  • RDS 关注慢查询日志、连接数、CPU 与 FreeableMemory。
  • 网站前端静态资源走 CDN,减少源站带宽消耗。
  • 高并发接口优先做缓存,不要先盲目升级数据库规格。

3. 成本优化

  • 测试环境实例设定自动停机策略。
  • natGateways 数量不要超出实际需求。
  • 预留实例或 Savings Plans 适合长期稳定负载。
  • 定期清理未使用的 EBS、快照、EIP 和旧版本 AMI。

4. 稳定性优化

  • 生产环境把网络、计算、数据库拆成多个 stack,降低变更影响范围。
  • 使用 cdk diff 审核变更。
  • 亚马逊云高权重账号 重要数据库开启自动备份与快照策略。
  • 部署前在测试账号先验证一次,尤其是 IAM 和网络策略变更。

如果你的目标是把云资源真正纳入版本管理,AWS CDK 的关键不在于“把资源写成代码”这句话,而在于从第一天开始就把账号、Region、权限、网络边界、连接方式、备份和删除策略定清楚。只要这几个基础动作做对,后面的实例创建、数据库部署、HTTPS 上线和环境复制都会顺很多。

如果需要更深入咨询了解可以联系全球代理上TG: @cloudcup  他们在云平台领域有更专业的知识和建议,他们有国际阿里云,国际腾讯云,国际华为云,aws亚马逊,谷歌云一级代理的渠道,微软云开户充值。oss防风控上传加密系统。客服1V1服务,支持免实名、免备案、免绑卡。开通即享专属VIP优惠、充值秒到账、官网下单享双重售后支持。
Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系