Контейнер AWS websocket cdk ecs

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 в контейнере, который существует. Пожалуйста, любой совет и / или помощь будут оценены.


person thekevshow    schedule 29.11.2019    source источник


Ответы (2)


Это, по-видимому, было связано с объемом памяти 1024, а не 512, также в несвязанной теме. Я использовал неправильное изображение при настройке моей собственной AutoScalingGroup в связанном фрагменте кода. Поэтому, если у кого-то возникают проблемы в этом отношении, убедитесь, что ваш machineImage имеет правильный тип.

person thekevshow    schedule 30.11.2019

//'.addCapacity' creates the ASG
const prerenderCluster = new ecs.Cluster(this, 'prerenderCluster',{
  vpc,
});

prerenderCluster.addCapacity('DefaultAutoScalingGroup', {
  instanceType: ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.XLARGE),
  machineImage: new ecs.EcsOptimizedAmi(),

На будущее, вот пример того, о чем @thekevshow говорит в отношении правильного AMI.

person Nobe's    schedule 21.06.2020