没有 NAT 的私有 VPC 中的 Elastic Beanstalk 应用程序

Sem*_*evy 7 amazon-web-services amazon-vpc amazon-elastic-beanstalk

是否可以在不使用 NAT 网关的情况下在自定义私有 VPC 中部署 EB 应用程序?我想使用 AWS API Gateway 作为应用程序的公共入口点,同时保持服务的私有性。设置完所有内容后,我的环境不断失败:

The EC2 instances failed to communicate with AWS Elastic Beanstalk, either because of configuration problems with the VPC or a failed EC2 instance. Check your VPC configuration and try launching the environment again.
Run Code Online (Sandbox Code Playgroud)

VPC 包括:

  • EC2 实例的两个私有子网
  • 负载均衡器的两个私有子网

我使用的模板是来自 EB 示例存储库的vpc-private.yaml

EB 应用程序是一个多容器 docker 应用程序,带有一个 Nginx 反向代理和一个运行 uWSGI 的 Flask 应用程序(类似于这个配置)。我使用的是内部网络负载均衡器,并且没有为实例分配公共 IP 地址。Docker 映像托管在 AWS ECR 中。

论坛中的一个常见答案似乎是拥有一个带有 NAT 的公共子网以允许 Internet 访问。AWS文档表明,尽管使用VPC 端点,但可以使用私有/私有配置,只要应用程序不需要互联网连接。

我配置的端点是:

com.amazonaws.us-east-1.s3
com.amazonaws.us-east-1.elasticbeanstalk
com.amazonaws.us-east-1.ecs-telemetry
com.amazonaws.us-east-1.ecs-agent
com.amazonaws.us-east-1.ecs
com.amazonaws.us-east-1.ecr.dkr
com.amazonaws.us-east-1.ecr.api
com.amazonaws.us-east-1.elasticbeanstalk-health
Run Code Online (Sandbox Code Playgroud)

看起来 Beanstalk 的 VPC 端点相当新,我找不到任何其他资源来解释如何执行此操作...

谢谢!

编辑(已解决)

我忘记提及的一些设置细节:

  • 在 VPC 中启用 DNS 解析和 DNS 主机名
  • 为每个端点启用私有 DNS
  • 确保终端节点的安全组允许实例的 VPC 作为入站流量

感谢@Marcin 的建议,我能够通过会话管理器登录实例(只需添加ssmec2messagesssmmessages端点)。检查日志后,我注意到以下错误:

2020-08-01 15:15:56,801 [WARNING] Timeout of 60 seconds breached
2020-08-01 15:15:56,801 [ERROR] Client-side timeout
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 162, in _retry
    return f(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/cfnbootstrap/util.py", line 231, in _timeout
    raise TimeoutError("Execution did not succeed after %s seconds" % duration)
TimeoutError
Run Code Online (Sandbox Code Playgroud)

我发现其他人也有同样的问题,这是由cfn-signal无法执行引起的。我能够通过添加cloudformation端点来解决这个问题。在接下来的部署中,我现在注意到一个新的sqs connection error问题,通过添加sqs端点解决了这个问题

将上述端点添加到 VPC 后,部署成功。无论哪种方式,我都不确定为什么需要这些端点,以及为什么 AWS 文档中没有首先提到它。

Mar*_*cin 4

您链接的 模板没有 NAT,尽管描述说它有。AWS 错误。

该模板创建两个私有子网,完全与互联网和任何其他服务(例如 EB 或 ECR)隔离。

需要注意的重要一点(模板无法展示)是为您的端点启用私有 DNS

为此,您必须确保VPC启用EnableDnsHostnamesEnableDnsSupport 。文档中的模板未启用它们。

这些可能可以解释为什么您的 VPC 接口终端节点不起作用。