仅使用一个帐户即可在AWS中为多个环境(开发,阶段,生产)设置Terraform的最佳方法是什么。我的客户只提供了一个帐户供我们使用。大多数有关使用terraform的文章都始于使用多个我没有的帐户。我计划使用S3后端存储,因为我们中的一些人会支持基础架构。
答案 0 :(得分:-1)
这将适用于大多数用例
选项1:使用区域
这样做的好处是可以将控制台和api调用中的内容分开。您将需要处理一些全局命名服务,例如IAM和S3,但请参阅解决方案的选项2。另外,请确保所有区域都具有您需要使用的服务。
例如:
在每个区域中创建一个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