lass TestEcsConstruct extends core.Construct {
constructor(scope, id, props) {
super(scope, id);
const vpc = new ec2.Vpc(this, 'MyVpc', {
enableDnsSupport: true,
enableDnsHostnames: true,
cidr: '10.0.0.0/16',
maxAzs: 2,
natGateways: 0,
subnetConfiguration: [
{
cidrMask: 24,
name: 'Public',
subnetType: ec2.SubnetType.PUBLIC
}]
});
const secGroup = new ec2.SecurityGroup(this, 'SecGroup',
{
vpc: vpc,
description: 'Access to the ECS hosts that run containers',
allowAllOutbound: true
}
);
secGroup.connections.allowToAnyIpv4(new ec2.Port({
protocol: ec2.Protocol.TCP,
fromPort: 22,
toPort: 22
}), 'Ingress SSH from public sg');
secGroup.connections.allowFromAnyIpv4(new ec2.Port({
protocol: ec2.Protocol.TCP,
fromPort: 22,
toPort: 22
}), 'Ingress SSH from public sg');
secGroup.connections.allowToAnyIpv4(new ec2.Port({
protocol: ec2.Protocol.TCP,
fromPort: 8080,
toPort: 8080
}), 'Ingress Docker Port Open');
secGroup.connections.allowFromAnyIpv4(new ec2.Port({
protocol: ec2.Protocol.TCP,
fromPort: 8080,
toPort: 8080
}), 'Ingress Docker Port Open');
const cluster = new ecs.Cluster(this, 'Ec2Cluster', {
vpc
});
const autoScaleGroup = cluster.addCapacity('DefaultAutoScalingGroup', {
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.MICRO),
keyName: 'default-keypair',
minCapacity: 1,
maxCapacity: 2,
desiredCapacity: 1,
// resourceSignalTimeout: core.Duration.minutes(5),
// rollingUpdateConfiguration: {
// minInstancesInService: 1,
// maxBatchSize: 1,
// pauseTime: core.Duration.minutes(5),
// waitOnResourceSignals: true,
// suspendProcesses: [
// 'HealthCheck',
// 'ReplaceUnhealthy',
// 'AZRebalance',
// 'AlarmNotification',
// 'ScheduledActions'
// ]
// }
});
autoScaleGroup.addSecurityGroup(secGroup);
// create a task definition with CloudWatch Logs
const logging = new ecs.AwsLogDriver({
streamPrefix: "websocket-app",
logRetention: 365
})
const image = ecs.ContainerImage.fromAsset(path.join(path.resolve(), 'test-docker'));
const taskDefinition = new ecs.Ec2TaskDefinition(this, "MyTaskDefinition");
const container = taskDefinition.addContainer("AppContainer", {
image: image,
cpu: 256,
memoryLimitMiB: 1024,
environment: [('REGION', process.env.REGION),
('QUEUE_URL', core.Fn.importValue(
'NetworkStack:ApiMsgQueueUrl'
))],
logging: logging
});
container.addPortMappings({
containerPort: 8080,
hostPort: 8080
});
// Instantiate ECS Service with just cluster and image
new ecs.Ec2Service(this, "Ec2Service", {
cluster,
taskDefinition
});
}
}
У меня есть этот код, и я не могу даже связаться с этой конечной точкой на локальном хосте контейнера ecs. Этот пример был просто показан для того, чтобы показать открытый порт, доступный с внешнего адреса, я действительно не понимаю, чего мне здесь не хватает. Кажется, что внутри контейнера, к которому я подключаюсь, есть только наблюдатель докеров экземпляра ecs, но ни один другой экземпляр докера не запущен, я также не могу докер exec в контейнере, который существует. Пожалуйста, любой совет и / или помощь будут оценены.