【问题标题】:Issue Setting Up Elastic Beanstalk Instance - Could Not Connect to Server设置 Elastic Beanstalk 实例的问题 - 无法连接到服务器
【发布时间】:2015-07-18 18:47:52
【问题描述】:

我一直在尝试在 AWS 上建立一个网站,在运行 eb initeb create 并选择我的设置没有任何问题后,我遇到了以下错误:

错误:[实例:i-f8e3c005 模块:AWSEBAutoScalingGroup 配置集: null] 命令在实例上失败。返回码:1 输出: (截断)...conn = _connect(dsn, 连接工厂=连接工厂,异步=异步) django.db.utils.OperationalError:无法连接到服务器: 连接被拒绝服务器是否在主机“localhost”上运行 (127.0.0.1) 并接受端口 5432 上的 TCP/IP 连接?

我不确定它为什么拒绝连接,但我怀疑这与我的安全设置有关。我知道这有点含糊,但是以前有没有人遇到过这个问题,您是如何设法最终解决的?

完整输出如下:

INFO: createEnvironment is starting.
INFO: Using elasticbeanstalk-us-east-1-671186898336 as Amazon S3 storage bucket for environment data.
INFO: Created security group named: sg-96efb5f2
INFO: Created load balancer named: awseb-e-v-AWSEBLoa-12ABLMPELT72Q
INFO: Created security group named: awseb-e-v6mwzkkgjw-stack-AWSEBSecurityGroup-JEYPGZP3YJJG
INFO: Created Auto Scaling launch configuration named: awseb-e-v6mwzkkgjw-stack-AWSEBAutoScalingLaunchConfiguration-17DLMC0THMKW
INFO: Created Auto Scaling group named: awseb-e-v6mwzkkgjw-stack-AWSEBAutoScalingGroup-FBCJ1LFH8U38
INFO: Waiting for EC2 instances to launch. This may take a few minutes.
INFO: Created Auto Scaling group policy named: arn:aws:autoscaling:us-east-1:671186898336:scalingPolicy:9e2df788-3cee-4f47-917f-a11179972c69:autoScalingGroupName/awseb-e-v6mwzkkgjw-stack-AWSEBAutoScalingGroup-FBCJ1LFH8U38:policyName/awseb-e-v6mwzkkgjw-stack-AWSEBAutoScalingScaleDownPolicy-P6J45PB8N1XA
INFO: Created Auto Scaling group policy named: arn:aws:autoscaling:us-east-1:671186898336:scalingPolicy:e5a18684-1f95-446d-be29-ad560db7e3e6:autoScalingGroupName/awseb-e-v6mwzkkgjw-stack-AWSEBAutoScalingGroup-FBCJ1LFH8U38:policyName/awseb-e-v6mwzkkgjw-stack-AWSEBAutoScalingScaleUpPolicy-1IV5PENRNB785
INFO: Created CloudWatch alarm named: awseb-e-v6mwzkkgjw-stack-AWSEBCloudwatchAlarmHigh-K0258EMNK9O3
INFO: Created CloudWatch alarm named: awseb-e-v6mwzkkgjw-stack-AWSEBCloudwatchAlarmLow-15Z0Z4KVYDGEC
ERROR: [Instance: i-f8e3c005 Module: AWSEBAutoScalingGroup ConfigSet: null] Command failed on instance. Return code: 1 Output: (TRUNCATED)...conn = _connect(dsn, connection_factory=connection_factory, async=async)
django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?. 
EBExtension container_command 01_migrate failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.
INFO: Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
INFO: Added EC2 instance 'i-f8e3c005' to Auto Scaling Group 'awseb-e-v6mwzkkgjw-stack-AWSEBAutoScalingGroup-FBCJ1LFH8U38'.

更新:来自 eb-activity.log 的代码

 execute_from_command_line(sys.argv)
  File "/opt/python/run/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
  utility.execute()
  File "/opt/python/run/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
  django.setup()
  File "/opt/python/run/venv/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
  apps.populate(settings.INSTALLED_APPS)
  File "/opt/python/run/venv/local/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate
  app_config.import_models(all_models)
  File "/opt/python/run/venv/local/lib/python2.7/site-packages/django/apps/config.py", line 202, in import_models
  self.models_module = import_module(models_module_name)
  File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
  __import__(name)
  File "/opt/python/bundle/2/app/paypaladaptive/models.py", line 126, in <module>
  class Payment(PaypalAdaptive):
  File "/opt/python/bundle/2/app/paypaladaptive/models.py", line 178, in Payment
  def process(self, receivers, preapproval=None, **kwargs):

更新:

在尝试尼克的建议后,我得到了同样的错误:

ERROR: [Instance: i-d05e9b2f Module: AWSEBAutoScalingGroup ConfigSet: null] Command failed on instance. Return code: 1 Output: (TRUNCATED)...conn = _connect(dsn, connection_factory=connection_factory, async=async)
django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?. 
EBExtension container_command 01_migrate failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

【问题讨论】:

  • 您可以通过 ssh 连接到实例并查看 /var/log/eb-activity.log... 端口 5432 上正在运行什么?您的安全设置有什么特别之处?
  • 您也可以通过运行eb logseb logs --all获取日志
  • @NickHumrich 我在这组日志中没有看到 Rohit 要求的日志,我是不是遗漏了什么?
  • 奇怪的是他们没有出现在logs --all。试试eb ssh,看看你能不能直接在盒子上找到他们。
  • @NickHumrich 嘿尼克,我包含了我认为正确的日志 - 现在有什么用处吗?

标签: amazon-web-services amazon-elastic-beanstalk aws-ec2


【解决方案1】:

短版:您的 Django 应用程序正在尝试连接到 本地数据库实例。使用 RDS 实例

您不能在 Beanstalk 节点上拥有本地数据库实例(如 PostgreSQL)。这是因为它在自动扩展的负载平衡应用程序上没有意义,其中节点的创建和销毁取决于您的服务负载(因此会销毁本地数据库实例)。

为了解决这个问题,您需要使用一个 AWS RDS 实例,该实例位于自动缩放组外部并且是持久的。在您的设置中,使用用于创建 RDS 实例的 主机用户名密码。请记住在分配给 RDS 实例的安全组上打开正确的端口(例如 5432 用于 PostgreSQL)。

【讨论】:

  • 谢谢。创建数据库后,我在哪里可以找到用于创建数据库的主机?和Endpoint一样吗?
  • 在您的 django 设置中使用的主机是您的 RDS 实例的端点,例如 yourinstancename.cl2iy3tbhts3.eu-west-2.rds.amazonaws.com:5432
  • 值得重复的引用:记得在分配给 RDS 实例的安全组上打开正确的端口(例如 PostgreSQL 的 5432)。
【解决方案2】:

您的实例似乎正在尝试在端口 5342 上与自身连接。如果您需要此功能,可以打开端口 5342 以使其工作。

一种方法是使用 .ebextensions。

以你的项目名称.ebextensions/openport.config创建一个文件,并将以下内容放入其中。

Resources:
  databaseSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupName: {Ref : AWSEBSecurityGroup}
      IpProtocol: tcp
      ToPort: 5432
      FromPort: 5432
      CidrIp: 0.0.0.0/0

(如果需要,提交文件)然后尝试eb create

【讨论】:

  • 错误似乎来自您的迁移步骤。您应该尝试 ssh'ing 到一个实例 eb ssh 并尝试手动运行它。 (仅用于调试目的)。
  • eb ssh 工作没有问题。如何通过 ssh 手动运行?
  • @114 当您的 ssh 进入实例后,您只需自己运行命令即可。您可能需要导航到您的应用程序 /opt/python/bundle/2/app/ 您是在 .ebextensions 中放置命令的人,对吗?
  • 很遗憾没有,我实际上正在尝试重新部署此应用程序,不过无论如何我都会研究一下,再次感谢您迄今为止的所有帮助。
猜你喜欢
  • 2020-12-22
  • 2016-02-15
  • 2016-12-21
  • 2017-03-05
  • 2015-11-07
  • 2016-08-24
  • 2020-12-28
  • 2016-11-09
  • 2016-09-25
相关资源
最近更新 更多