使用AWS通过一个账户针对多个环境进行Terraform设置

时间:2020-03-06 03:42:09

标签: amazon-web-services terraform

仅使用一个帐户即可在AWS中为多个环境(开发,阶段,生产)设置Terraform的最佳方法是什么。我的客户只提供了一个帐户供我们使用。大多数有关使用terraform的文章都始于使用多个我没有的帐户。我计划使用S3后端存储,因为我们中的一些人会支持基础架构。

2 个答案:

答案 0 :(得分:-1)

这将适用于大多数用例

选项1:使用区域

这样做的好处是可以将控制台和api调用中的内容分开。您将需要处理一些全局命名服务,例如IAM和S3,但请参阅解决方案的选项2。另外,请确保所有区域都具有您需要使用的服务。

例如:

  • us-east-1:产品
  • us-east-2:qa
  • us-west-2:dev

在每个区域中创建一个S3存储桶以存储您的状态文件。诸如tfstate-01234567890-us-east-1,tfstate-01234567890-us-east-2,tfstate-01234567890-us-west-1之类的东西将确保您没有冲突。

选项2:使用环境标记

即使您正在执行选项1,我仍然建议您也实施此方法。它将使您能够进行诸如部署多个开发环境之类的事情。

对于每个资源,将环境添加到名称中,然后将环境添加到标签中。

假设您创建一个模块

variable environment {
  type = string
}
resource aws_lambda_function image_handler {
  function_name = "cool-function-${var.environment}"
  tags = {
    environment: var.environment
  }
... 

那么你会

module dev {
  source = "../path/to/above/module"
  environment = "prod"
}

答案 1 :(得分:-1)

您不应使用不同的区域拆分环境。区域可以提高系统的弹性,以防万一,例如在特定数据中心发生临时故障时。

拥有自定义环境变量也无济于事,因为您最终会 重复代码。

您的北极星应该具有两个环境的精确副本,并避免代码重复。 Terraform具有workspaces的概念,因此可以为您提供帮助。这样,您将使用相同的配置,并且可以使用诸如terraform workspace select staging/dev/production

之类的单个命令来更改环境。