首页 > 解决方案 > 如何处理 AWS 中的开发和生产环境?

问题描述

构建要在生产中启动的应用程序 - 不确定如何处理 AWS 上的开发/生产环境。

如果我使用多个存储桶、多个 DynamoDB 表、多个 Lambda 函数、多个 Elastic Search 实例、EC2、API 网关 - 拥有生产和开发环境似乎超级麻烦?

目前只有一个环境,一旦应用程序上线 - 任何更改都将改变生产环境。

那么如何在 AWS 上处理两个环境呢?我能想到的唯一方法是复制每个 lambda 函数、每个数据库、每个 EC2 实例、每个 API 和存储桶……但这将花费双倍的价格,并且一旦上线更新就非常繁琐。

有什么建议么?

标签: amazon-web-servicesamazon-s3amazon-ec2aws-lambdaamazon-elastic-beanstalk

解决方案


有几种方法。但是,无论选择哪种方式,我都发现最好尽可能多地保留基础设施作为代码。这在环境设置和可恢复性方面提供了最大的灵活性。

有单独的帐户方法

  • 创建一个新账户
  • 将您的所有对象(EC2、S3 等)移至此帐户
  • 如果您将大部分基础设施作为代码使用并且不受版本控制(例如 git)的影响,这很容易完成 - 因为您可以使用 AWS Cloudformaton。
  • 确保将 s3 存储桶重命名为全局唯一且合规的名称

然后,您将运行 2 个独立的所有实例。但是,您可以实施一些成本控制,例如更小的 EC2 实例。或者,您可以在不使用时删除整个 Cloudformation 堆栈,然后在需要时启动它。这种方法在时间方面有更多的前期成本,但从长远来看,它可以节省美元。另外,从安全角度来看,帐户分离非常有用。

一种帐户方法

这可能会有点混乱,但有几个功能可以帮助您将一个帐户拆分为开发和生产。

  • Lambda 版本控制。如果您使用 lambdas,您可以获得版本控制和别名。这实际上意味着您可以使用相同的函数名称设置一个生产版本和开发版本的 lambda。

  • API 网关方式具有“阶段”。这是一种有效的环境,您可以标记一个生产和一个开发,以分离单个 API 的关注点。

  • S3 存储桶。您始终可以在目录 S3://mybucket/prod/ 和 s3://mybuckey/dev/ 的顶层创建一个密钥。这有点混乱,但比将所有内容都放在一个目录中要好。

但是,您真正需要问的是,为这个用例运行第二个帐户与一个帐户相比,实际成本是多少?答案可能接近相同。

这就是 AWS 和一般云计算的优势。您只需为使用的内容付费。跨两个帐户运行 lambda 的成本与在单个帐户中运行一个 lambda 相同,但调用它的次数完全相同。

两个帐户的方法还可以更清楚地了解正在发生的事情,并有助于防止生产中的问题,即开发代码段因为都在一个帐户中而进入。


推荐阅读