ruby - 带有 Amazon RDS 的 VPC 中的 AWS Elastic Beanstalk

标签 ruby postgresql amazon-web-services amazon-ec2 amazon-rds

我想运行一个简单的 Ruby Rack 应用程序(一个 REST API),它接受互联网请求(来自 iPhone 客户端),与 PostgreSQL 数据库对话,并用 JSON 响应。

我应该如何确切地在 Amazon Web Services (AWS) 上进行设置?

  1. 我希望该应用能够扩展以服务越来越多的客户,因此我认为我应该将 Auto Scaling 与 Elastic Load Balancing 结合使用。

  2. 我应该使用 Elastic Beanstalk 还是自己手动设置所有内容?

    问题Manual deployment vs. Amazon Elastic Beanstalk怎么办?在使用 PostgreSQL 设置 Ruby Rack 服务器时适用吗?

  3. 默认 VPC 与自定义 VPC

    我是否应该只使用默认 VPC 并使用安全组来阻止对 EC2 和数据库实例的直接 Internet 访问?或者,我应该创建自定义 VPC 并使用私有(private)子网,如 Example: Launching an Elastic Beanstalk in a VPC with Amazon RDS 中所述?

最佳答案

使用公有子网和私有(private)子网的概念可以为您的 AWS 应用程序增加一个极好的安全层。通过将您的数据库和应用程序服务器实例放置在私有(private)子网中,您可以通过设计保护它们免受外部渗透和意外暴露。

我建议您先配置 a VPC in 2 AZs每个可用区中有 1 个公共(public)子网和 1 个私有(private)子网(总共 4 个子网)。

放置一个NAT instance在每个公共(public)子网中并将私有(private)子网的主路由表更新为 send all non-vpc traffic to the NAT .这将允许在您的私有(private)子网中启动的实例与 WAN Internet 通信,即使它们本身不可公开寻址。

我建议您使用 Multi-AZ RDS deployment在每个 AZ 内的私有(private)子网中使用 RDS 实例进行 Postgres 部署。这将最大限度地提高安全性(Postgres 不可公开访问)并为您提供容错能力(AZ 故障不会关闭您的应用程序)。

我会设置你的 Ruby app on Elastic Beanstalk .这将为您提供容错和自动缩放。您的 Elastic Beanstalk 负载均衡器将驻留在每个 AZ 的公共(public)子网中,而您的 Elastic Beanstalk EC2 实例将驻留在私有(private)子网中。

关于ruby - 带有 Amazon RDS 的 VPC 中的 AWS Elastic Beanstalk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41776257/

相关文章:

ruby - 如何评估 ruby​​ 中的复杂表达式?

postgresql 回收 ID 号

postgresql - 如何结合递归 CTE 和普通 CTE

amazon-web-services - SNS 发布到多个 EC2 实例

amazon-web-services - AWS 雅典娜 : "HIVE_BAD_DATA: Error parsing column ' X' : empty String"

ruby - 如何在不创建新对象实例的情况下将 Integer 变量递增 X

ruby - 使用 Sinatra Reloader 的模块化 Sinatra 应用程序?

amazon-web-services - 使用AWS SQS作为Aurora数据库的写入队列提高系统性能是否有效

ruby - 计算同一索引处的匹配值

node.js - nodejs、postgres 和 Bluebird