为正确的架构选择哪些 AWS 服务?

Which AWS services to pick for the right architecture?

AWS 似乎有点令人生畏,因为它有太多重叠的服务,所以我正在寻找一些建议和方向。

我们有一个移动应用程序,我们为其开发了一个同步服务器(即用户将注册,同步数据保存在 AWS 上)。目前我们已经设置了一个带有 Web 服务器、Django 端点和 postgres 服务器的 EC2 实例。但是我们需要以下内容:

  1. 确保该服务可从该地区的不同地区使用 更快访问的世界
  2. 如果这需要将 postgres 服务器放在 EC2 之外,我们需要什么服务以及复制如何工作?
  3. 我们会将较大的文件附件单独存储在 S3 上,但需要安全地执行此操作并对文件进行加密
  4. 最终我们将托管一个网络应用程序(即 Angular 2 应用程序) 连接到同一个数据库。

我们还需要以最经济的方式完成所有这些工作,然后随着负载的增加进行扩展。

如有任何指导,我们将不胜感激。我现在正在为术语而苦苦挣扎。我们还设置了一个 Amazon SSL 证书,但是它需要一个 Elastic Load Balancer,但我们只有一个 EC2 实例。我们要怎么做才能让这一切安全运行?

根据提供的信息,我建议您从 AWS Elastic Beanstalk 开始,它将管理自动缩放和负载均衡,同时为您提供用于外部域映射的 DNS URL。

  1. 为确保该服务可从不同地区访问以加快访问速度,您可以使用 Cloudfront 缓存静态 Angular 应用程序。然后您将能够将 SSL 证书添加到 Cloudfront 而不是 ELB。如果您计划为不同区域创建多个环境,您可以使用 Route53 进行基于地理的路由。
  2. 要在 EC2 之外使用 Postgres 服务器,您可以使用 AWS RDS,它支持多可用区部署的同步复制和故障转移,如果您计划设置多个部署,RDS 中的 Postgres 也支持 Cross Region Replication不同地区的环境。您还可以创建读取副本以提高将被异步复制的读取速度。
  3. 您可以使用来自 KMS 或您的客户端的密钥使用 AES256 对 S3 中的文件进行加密,我建议使用 Signed URLs 并在 S3 前面使用 Cloudfront 为这些文件提供服务,以便客户端可以安全直接地访问他们通过利用分布式缓存来提高性能。
  4. 您可以使用 Cloudfront 在 AWS S3 和缓存中托管 Angular 应用程序以加快访问速度。另一种选择是在 Cloudfront 中缓存静态资产路径,以便后续对静态资产的请求将从 Cloudfront 提供服务。

FAQs 来自亚马逊

Who should use AWS Elastic Beanstalk? Those who want to deploy and manage their applications within minutes in the AWS Cloud. You don’t need experience with cloud computing to get started. AWS Elastic Beanstalk supports Java, .NET, PHP, Node.js, Python, Ruby, Go, and Docker web applications.

您当前的环境不可扩展(负载响应或其他区域)。如果您需要可扩展性,那么应该重新安排。由于所需环境取决于应用架构,因此很难为您提供详细信息,但有一些建议:

  • 数据库:为了获得更好的稳定性,建议为数据库设置多可用区 RDS。好处是 RDS 是完全托管的服务,因此您无需担心复制、维护等问题。
  • Web/app 服务器:您可以在任何区域部署副本并连接到同一个数据库。
  • S3:您可以启用跨区域复制和加密,但要确保使用得当(例如,文件从最近区域的存储桶提供给客户端)
  • 您可以在服务器上设置自己的SSL,不需要ELB。但是,您只能将 ELB 与一个 webnode 一起使用。
  • 我不建议使用 Beanstalk,因为尽管它确实使第一步更容易,但您以后可能会在尝试配置非标准的东西时遇到麻烦(当然,除非您非常熟悉 EBT) .
  • 要提高效率,您可能需要添加 CDN(AWS 或其他供应商)。

确保您的环境配置确实安全。您的团队可能需要熟悉 AWS 的人员,因为每个主题都可以转换为单独的文章。