You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS-CDK创建AWS Cloud9实例失败,求技术解决方案

使用AWS CDK创建Cloud9环境失败的问题

我认可AWS CDK的设计理念,但用它创建Cloud9环境时一直失败。每次运行代码,AWS控制台都会弹出“Error while creating Cloud9”错误提示,本地终端显示“CREATE_FAILED”。我猜测问题出在EC2和Cloud9的连接上,但不知道具体该怎么操作。有没有人成功用CDK创建过Cloud9环境?求建议。

AWS控制台错误信息

AWS控制台错误信息

VSCode终端错误信息

VSCode终端错误信息

向下滚动终端可见最终报错:

Stack Deployments Failed: Error: The stack named MjwFirstCdkStack failed creation,
it may need to be manually deleted from the AWS console: ROLLBACK_COMPLETE: Cannot
create the AWS Cloud9 environment. There was a problem connecting to the environment.

使用的代码

import * as cdk from "aws-cdk-lib";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as cloud9 from "aws-cdk-lib/aws-cloud9";
import { Construct } from "constructs";

export class MjwFirstCdkStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 创建VPC
    const vpc = new ec2.Vpc(this, "my-vpc-id", {
      natGateways: 1,
      maxAzs: 2,
      ipAddresses: ec2.IpAddresses.cidr("10.0.0.0/16"),
      subnetConfiguration: [
        {
          name: "private-subnet-1",
          subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
          cidrMask: 24,
        },
        {
          name: "public-subnet-1",
          subnetType: ec2.SubnetType.PUBLIC,
          cidrMask: 24,
        },
      ],
    });

    // 创建Cloud9环境
    const myCloud9Environment = new cloud9.CfnEnvironmentEC2(
      this,
      "MyCloud9Environment",
      {
        name: "MyCloud9EnvironmentName",
        instanceType: "t2.micro",
        automaticStopTimeMinutes: 60,
        subnetId: vpc.privateSubnets[0].subnetId,
      }
    );
  }
}

解决建议

1. 先验证子网类型问题

你当前把Cloud9实例部署在PRIVATE_WITH_EGRESS子网,这类子网依赖NAT网关访问外网,但如果NAT配置或子网流量限制有问题,会导致Cloud9实例无法和AWS服务建立连接。

快速测试:修改代码中subnetId为vpc.publicSubnets[0].subnetId,将实例放到公有子网重新部署。如果成功,说明问题出在私有子网的网络配置上。

2. 私有子网下的安全组配置

如果要保留私有子网部署,需要给Cloud9实例配置允许双向连接的安全组:

// 创建Cloud9专属安全组
const cloud9Sg = new ec2.SecurityGroup(this, "Cloud9Sg", {
  vpc: vpc,
  allowAllOutbound: true,
  description: "Allow Cloud9 service access"
});

// 允许Cloud9服务的SSH入站流量(通过AWS服务前缀列表,避免开放所有IP)
cloud9Sg.addIngressRule(
  ec2.Peer.prefixList(`com.amazonaws.${cdk.Stack.of(this).region}.cloud9`),
  ec2.Port.tcp(22),
  "Cloud9 service SSH access"
);

// 将安全组关联到Cloud9实例
myCloud9Environment.addPropertyOverride("securityGroupId", cloud9Sg.securityGroupId);

3. 检查IAM权限

确保CDK部署使用的角色拥有足够权限,至少包含AWSCloud9Administrator策略,或自定义涵盖cloud9:*、ec2:CreateInstance、ec2:ModifyInstanceAttribute等操作的权限。

4. 元数据服务访问

Cloud9实例需要访问EC2元数据服务(169.254.169.254),确保子网的网络ACL和安全组没有禁止这个IP的HTTP(80)流量。

5. 实例类型兼容性

部分AWS区域已不再支持t2.micro,可以尝试换成t3.micro实例类型重新部署。

内容的提问来源于stack exchange,提问作者mjwebson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:50:21