AWS ECS Fargate 无法从 EC2 连接 MongoDB

AWS ECS Fargate cannot connect MongoDB from EC2

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

Error: The hook orm is taking too long to load. Make sure it is triggering its initialize() callback, or else set `sails.config.orm._hookTimeout to a higher value (currently 20000) at Timeout.tooLong as _onTimeout

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

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

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

这是我的示例图

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

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

我们 运行 ECS Fargate 到 运行s mongodb 的 EC2 实例。关键是确保安全组关系也建立起来。

这可能看起来像下面的 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

您将按照以下方式配置 Fargate 服务:

  rFargateService:
    Type: AWS::ECS::Service
    Properties:
      ...
      NetworkConfiguration:
        AwsvpcConfiguration:
          SecurityGroups:
            - !Ref pAppFargateSecurityGroup
          Subnets:
            - !Ref pPrivateSubnetA
            - !Ref pPrivateSubnetB
            - !Ref pPrivateSubnetC

Fargate 服务子网(需要)配置在与您的 mongodb 主机相同的 VPC 中,如果您不使用例如VPC 对等或私有 Link.

我还应该补充一点,其他可能会绊倒你的事情是 NACLs。当然还有本地主机防火墙(如 iptables)。