Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Terraform workspace在aws和localstack之间切换?_Terraform_Terraform Provider Aws - Fatal编程技术网

如何使用Terraform workspace在aws和localstack之间切换?

如何使用Terraform workspace在aws和localstack之间切换?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我想使用Terraform工作区来管理两个环境,一个用于aws,另一个用于localstack。下面是Terraform的配置文件。我不想要端点和跳过aws工作区上的属性。我如何实现这种逻辑?我能想到的唯一方法是为不同的环境创建多个文件夹,例如aws、openstack和shared。但是我想在workspace上找到一个解决方案,因为它是针对不同环境的Terraform内置功能 provider "aws" { profile = "default" region = "ap-sou

我想使用
Terraform
工作区来管理两个环境,一个用于aws,另一个用于
localstack
。下面是Terraform的配置文件。我不想要
端点
跳过
aws
工作区上的属性。我如何实现这种逻辑?我能想到的唯一方法是为不同的环境创建多个文件夹,例如
aws
openstack
shared
。但是我想在
workspace
上找到一个解决方案,因为它是针对不同环境的Terraform内置功能

provider "aws" {
  profile = "default"
  region  = "ap-southeast-2"
  skip_credentials_validation = true
  skip_metadata_api_check     = true

  endpoints {
       lambda = "http://localhost:4574"
  }
}

Terraform工作区功能用于在单个位置存储多个状态并在它们之间切换。如果您希望将状态存储在不同的位置(不同的S3存储桶,或者在您的情况下不使用S3),那么

相反,您可以使用多个配置根并将共享配置分解为两个配置共享的一个或多个子模块。然后,单独的根模块可以表示这些目标之间的所有差异,包括不同的后端配置

provider "aws" {
  profile = "default"
  region  = "ap-southeast-2"

  skip_credentials_validation = true
  skip_metadata_api_check     = true

  endpoints {
    lambda = "http://localhost:4574"
  }
}

module "shared_something" {
  source = "./modules/shared-something"

  # Configuration for this module that makes sense for localstack
}
如果您的配置相对简单,那么只有一个共享模块和其中的所有内容就足够了,但是对于更复杂的情况,您可能需要使用它来分解系统,并更好地支持AWS和localstack之间需要的任何配置变体


请注意,Terraform AWS提供程序仅在尽最大努力的基础上支持非AWS实现,如果localstack与AWS的行为不完全兼容,则可能无法正常运行。如果您使用的是任何第三方模块,那么他们可能会做出不适用于localstack的假设。

您使用的是哪个Terraform版本?我使用的是
v0.12.4
如何放置这两个不同的提供程序文件?terraform如何根据工作空间选择一个而不是另一个?我认为所有工作区的所有配置文件都是可见的。对吗?每个配置都在一个单独的目录中
provider "aws" {
  profile = "default"
  region  = "ap-southeast-2"
}

module "shared_something" {
  source = "./modules/shared-something"

  # Configuration for this module that makes sense for real AWS
}