AWS ECS Fargate не может подключить MongoDB от EC2 - PullRequest
0 голосов
/ 08 июня 2019

Я создал кластер Fargate на ECS.Но когда я запускаю свой экземпляр, я обнаружил следующее сообщение об ошибке:

Ошибка: крюк orm загружается слишком долго.Убедитесь, что он запускает обратный вызов initialize(), или установите для `sails.config.orm._hookTimeout более высокое значение (в настоящее время 20000) для Timeout.tooLong как _onTimeout

Но в экземпляре mongoDB EC2 я уже настроил bindIp следующим образом

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

Но когда я пробую этот экземпляр докера из моего локального компьютера, я не обнаружил это сообщение об ошибке и при развертывании этого источникакод в EC2, ошибки тоже нет.Пожалуйста, дайте мне знать, как решить эту проблему.Благодарю.

Вот мой пример диаграммы enter image description here

1 Ответ

1 голос
/ 08 июня 2019

Вы не указываете, является ли mongodb, который вы запускаете и подключаете из локального экземпляра докера, также локальным или это тот же экземпляр MongoDB в AWS (который, вероятно, вы будете использовать для подключения через VPN или туннелирование ssh).

Итак, почему экземпляр Docker работает локально, а не в AWS, будет довольно сложно объяснить.Я бы предположил, что это связано с сетевым подключением.

Мы запускаем ECS Fargate для экземпляра EC2, который запускает mongodb.Ключом к этому является также установление отношений группы безопасности.

Это может выглядеть, например, как показано ниже в примере Cloudformation.У вас есть группа безопасности Fargate rAppFargateSecurityGroup (предоставляющая приложение через 8080), подключенная к вашей службе Fargate.И у вас есть группа безопасности mongodb rMongoDbEc2SecurityGroup, подключенная к экземпляру mongodb EC2 (предоставляющая mongodb через порт 27017).

Вы заметите, что клей здесь - «SourceSecurityGroupId:! Ref rAppFargateSecurityGroup», который позволяет подключаться к fargatemongodb.

  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 будут (должны) настраиваться в том же VPC, что и ваш mongodbhost, если вы не используете, например, пиринг VPC или Private Link.

Я должен также добавить, что другие вещи, которые могут сбить вас с толку, это NACL .И, конечно, локальные межсетевые экраны хоста (например, iptables).

...