首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS :无法连接到EC2实例中运行的EC2服务器

AWS :无法连接到EC2实例中运行的EC2服务器
EN

Stack Overflow用户
提问于 2022-11-17 23:45:33
回答 1查看 19关注 0票数 0

我正在使用AWS CDK创建一个应该是简单的基础设施:

  • 一个EC2实例;
  • 从Docker映像运行from服务器;
  • 使用弹性集装箱服务(ECS),这样我就不必管理容器了

我可以将其全部启动并运行,但无法访问why服务器(例如,通过在浏览器中访问EC2实例的IP,或使用wget),而且我也不知道为什么无法访问它。

我尝试过/发现的事情:

  • 在同一个CDK脚本中,我可以直接创建一个EC2实例,运行码头映像,并通过互联网连接到它。因此,图像和VPC正在按预期工作。
  • 我尝试过任务定义中的AWS_VPCBRIDGE网络模式,结果相同(一切都在运行,但无法连接到服务器)
  • 如果我使用AWS_VPC模式,我将得到与EC2实例相关联的两个网络接口。即使我确保两个安全组都允许传入端口-80通信量,我仍然不能直接连接到EC2实例。
  • 我查看了所有官方的ecsec2示例。我所做的事情与示例所做的一样,尽管这些示例中没有一个似乎设置了一个web可见服务器。
  • 我已经阅读了ecsec2的CDK文档,但在那里找不到解释。
  • 我对可访问的普通EC2实例的网络和安全设置与不可访问的EC2管理的ECS实例进行了并行比较--它们在功能上似乎是等价的。

容器之外的所有内容似乎都是为了能够通过web与EC2实例对话而设置的,所以我假设它是关于任务/容器本身的。我最好的猜测是,这与任务的网络模式有关,但我还没有找到一个能让我找到答案的配置或文档。

有人知道为什么我不能访问这个EC2实例吗?或者有任何类似CDK脚本的例子可供参考?

下面是我希望得到一个可访问的webserver (但不是)的最小CDK脚本,它使用演示nginx容器作为hello-world:

代码语言:javascript
复制
import {
  Stack,
  StackProps,
  aws_ec2 as ec2,
  aws_ecs as ecs,
} from 'aws-cdk-lib';
import { Construct } from 'constructs';

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

    // VPC
    const vpc = new ec2.Vpc(this, 'VPC', {
      enableDnsSupport: true,
      enableDnsHostnames: true,
      subnetConfiguration: [{ name: 'PublicSubnet', subnetType: ec2.SubnetType.PUBLIC }],
    });

    // ECS
    const cluster = new ecs.Cluster(this, 'Cluster', {
      vpc,
      capacity: {
        instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.NANO),
        machineImage: ecs.EcsOptimizedImage.amazonLinux(),
        desiredCapacity: 1,
      },
    });
    cluster.connections.allowFromAnyIpv4(ec2.Port.tcp(80));

    // TASK DEFINITION
    const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef', {
      networkMode: ecs.NetworkMode.AWS_VPC,
    });

    const container = taskDefinition.addContainer('HelloWorldContainer', {
      image: ecs.ContainerImage.fromRegistry('nginxdemos/hello'),
      memoryReservationMiB: 256,
      portMappings: [
        {
          containerPort: 80,
          protocol: ecs.Protocol.TCP,
        },
      ],
    });

    const service = new ecs.Ec2Service(this, 'Service', {
      cluster,
      taskDefinition,
    });
    service.connections.allowFromAnyIpv4(ec2.Port.tcp(80));
  }
}
EN

回答 1

Stack Overflow用户

发布于 2022-11-18 01:17:42

终于找到了答案:

要直接连接到由ECS管理的EC2实例,任务网络模式需要为"主机“。它允许您像普通的EC2实例一样使用实例。

回想起来,相关文档是相当清楚的,我只是没有很好地摸索他们的第一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74483430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档