是否可以在自定义私有 VPC 中部署 EB 应用程序而不使用 NAT 网关?我想使用 AWS API Gateway 作为应用程序的公共入口点,同时保持服务的私有性。设置完所有内容后,我的环境不断失败:
EC2 实例无法与 AWS Elastic Beanstalk 通信,原因可能是 VPC 配置问题或 EC2 实例出现故障。检查您的 VPC 配置并尝试再次启动环境。
VPC 包括:
我使用的模板是 EB 示例存储库中的 vpc-private.yaml。
EB 应用程序是一个多容器 Docker 应用程序,带有 Nginx 反向代理和使用 uWSGI 运行的 Flask 应用程序(类似于 此配置)。我使用的是“内部”网络负载均衡器,并且实例“未”分配公共 IP 地址。 Docker 镜像托管在 AWS ECR 中。 论坛中的一个常见答案似乎是拥有一个带有 NAT 的公共子网以允许互联网访问。 AWS documentation 表明只要应用程序不需要互联网连接,通过使用
VPC Endpoints 就可以使用私有/私有配置。
我配置的端点是:
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
看起来 Beanstalk 的 VPC 端点相当新,我找不到任何其他资源来解释如何执行此操作...
谢谢!
编辑(已解决)
我忘了提及的一些设置细节:
为每个端点启用私有 DNS
和ssmmessages端点)。检查日志后,我注意到以下错误:
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
我发现
也有同样的问题,这是由于cfn-signal
未能执行造成的。我可以通过添加 cloudformation 端点来解决这个问题。在接下来的部署中,我现在注意到一个新的 sqs connection error
,这是通过添加 sqs 端点解决的。
您
链接的模板,尽管描述说它有。 AWS 错误。 该模板创建两个私有子网,完全与互联网和任何其他服务(例如 EB 或 ECR)隔离。
需要注意的重要一点(模板无法展示)是为您的端点启用 私有 DNS。
为此,您必须确保 VPC 的 EnableDnsHostnames 和
EnableDnsSupport启用。文档中的模板无法启用它们。 这些可能可以解释为什么您的 VPC 接口端点不起作用。