我使用容量提供程序的配置创建了一个 ECS 集群作为 EC2 实例。
我选择了与默认VPC类似的VPC。自动缩放组的最小大小为 1。但是当我创建集群时,容器实例中没有 EC2 注册。但是,如果我选择默认 VPC,效果会很好。是什么原因?这是我创建 VPC 的代码:
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';
export class VPC_Stack extends cdk.Stack {
public readonly vpc: ec2.Vpc;
constructor(scope: Construct, id: string, stackName: string, appName: string) {
super(scope, id, {
stackName: appName + '-' + stackName,
});
const name = appName + '-' + stackName + 'VPC';
this.vpc = new ec2.Vpc(this, name + '-id', {
cidr: '10.0.0.0/16',
maxAzs: 3,
subnetConfiguration: [
{
name: 'PublicSubnetAz1',
subnetType: ec2.SubnetType.PUBLIC,
cidrMask: 24,
}
],
natGateways: 1,
vpcName: name
});
}
}
我假设您正在将 EC2 实例部署到
PRIVATE_ISOLATED
子网中?这些子网没有到 VPC 之外的任何内容(例如 ECS 服务)的路由,因此这些 PRIVATE_ISOLATED
子网中的实例无法连接到 ECS 服务以向集群注册。您需要执行以下操作之一:
PRIVATE_WITH_EGRESS
(这将产生将要创建的 NAT 网关的成本)默认 VPC 没有
PRIVATE_ISOLATED
子网,这解释了为什么当您部署到默认 VPC 时会看到它工作。