AWS ECS Fargate 无法从 EC2 连接 MongoDB

PPS*_*ein 1 amazon-ec2 mongodb amazon-web-services amazon-ecs aws-fargate

我已经在 ECS 上创建了 Fargate 集群。但是当我运行我的实例时,我遇到了以下错误消息:

错误:挂钩orm加载时间过长。确保它正在触发其initialize()回调,或者在 Timeout.tooLong 处将 `sails.config.orm._hookTimeout 设置为更高的值(当前为 20000)作为 _onTimeout

但在 mongoDB EC2 实例中,我已经bindIp这样配置了

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

但是,当我从本地尝试这个 docker 实例时,我没有发现该错误消息,并且当我在 EC2 中部署该源代码时,也没有发现错误。请让我知道如何解决该问题。谢谢。

这是我的示例图 在此输入图像描述

M J*_*sen 5

您没有指定您从本地 docker 实例运行和连接的 mongodb 是否也是本地的,或者它是否是 AWS 中的同一个 MongoDB 实例(大概您会使用 VPN 或 ssh 隧道来连接)。

那么为什么 docker 实例在本地运行而不是在 AWS 中运行将有点难以解释。我建议它与网络连接相关。

我们在运行 mongodb 的 EC2 实例上运行 ECS Fargate。关键是确保建立安全组关系。

例如,这可能类似于下面的 Cloudformation 示例。您已将 Fargate rAppFargateSecurityGroup 安全组(通过 8080 公开应用程序)附加到您的 Fargate 服务。并且您将 mongodb rMongoDbEc2SecurityGroup 安全组附加到 mongodb EC2 实例(通过端口 27017 公开 mongodb)。

你会注意到这里的粘合剂是“SourceSecurityGroupId: !Ref rAppFargateSecurityGroup”,它允许fargate连接到mongodb。

  rAppFargateSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: !Sub '${pAppName}-${pEnvironment} ECS Security Group'
      VpcId: !Ref pVpcId
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 8080
          ToPort: 8080
          SourceSecurityGroupId: !Ref rAppAlbSecurityGroup

  rMongoDbEc2SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: !Sub '${pAppName}-${pEnvironment} MongoDb Security Group'
      VpcId: !Ref pVpcId
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 27017
          ToPort: 27017
          SourceSecurityGroupId: !Ref rAppFargateSecurityGroup
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式配置 Fargate 服务:

  rFargateService:
    Type: AWS::ECS::Service
    Properties:
      ...
      NetworkConfiguration:
        AwsvpcConfiguration:
          SecurityGroups:
            - !Ref pAppFargateSecurityGroup
          Subnets:
            - !Ref pPrivateSubnetA
            - !Ref pPrivateSubnetB
            - !Ref pPrivateSubnetC
Run Code Online (Sandbox Code Playgroud)

如果您不使用 VPC 对等互连或专用链接等,则需要(需要)在与 mongodb 主机相同的 VPC 中配置 Fargate 服务子网。

我还应该补充一点,其他可能让你陷入困境的事情是NACL。当然还有本地主机防火墙(如 iptables)。