Terraform:如何支持不同的提供商



我在一个名为myproject的目录中有一组地形代码:

myprojectec2.tf
myprojectprovider.tf
myprojects3.tf
....

provider.tf 显示:

provider "aws" {
region  = "us-west-1"
profile = "default"
}

因此,如果我在 MyProject 文件夹中进行地形化应用,则会在我的账户下的 us-west-1 中启动一组 AWS 资源。

现在,我想介绍一个 AWS Glue 资源,该资源仅在不同的区域 us-west-2 中可用。 那么如何布局 glue.tf 文件呢?

目前,我将其存储在myproject下的子目录中,并在该子目录中运行terraform应用程序,即

myprojectglueglue.tf
myprojectglueanother_provider.tf

another_provider.tf 是:

provider "aws" {
region  = "us-west-2"
profile = "default"
}

这是在不同区域存储启动资源的唯一方法吗? 有更好的方法吗?

如果没有更好的方法,那么我也需要在胶水子文件夹中有另一个后端文件,此外,myproject目录中的一些常见变量无法共享。

---------更新: 我点击了Phuong Nguyen发布的链接,

provider "aws" {
region  = "us-west-1"
profile = "default"
}
provider "aws" {
alias  = "oregon"
region = "us-west-2"
profile = "default"
}
resource "aws_glue_connection" "example" {
provider = "aws.oregon"
....
}

但我看到了:

Error: aws_glue_connection.example: Provider doesn't support resource:     aws_glue_connection

您可以使用提供程序别名来定义多个提供程序,例如

# this is default provider
provider "aws" {
region  = "us-west-1"
profile = "default"
}
# additional provider
provider "aws" {
alias  = "west-2"
region  = "us-west-2"
profile = "default"
}

然后在您的glue.tf中,您可以将别名提供程序称为:

resource "aws_glue_job" "example" {
provider = "aws.west-2"
# ...
}

Multiple Provider Instances部分的更多详细信息:https://www.terraform.io/docs/configuration/providers.html

阅读我的评论...

这基本上意味着您应该尽可能多地保留 aws 配置文件和区域以及不属于您的 terraform 代码的内容,并将它们用作配置,如下所示:

terraform {
required_version = "1.0.1"
required_providers {
aws = {
version = ">= 3.56.0"
source  = "hashicorp/aws"
}
}
backend "s3" {}
}
provider "aws" {
region  = var.region
profile = var.profile
}

比使用tfvars配置文件:

cat cnf/env/spe/prd/tf/03-static-website.backend-config.tfvars
profile        = "prd-spe-rcr-web"
region         = "eu-north-1"
bucket         = "prd-bucket-spe"
foobar         = "baz"

您将在地形规划期间应用并应用调用,如下所示:

terraform -chdir=$tf_code_path plan -var-file=<<line-one-^^^>>.tfvars 
terraform -chdir=$tf_code_path plan -var-file=<<like-the-one-^^^>>.tfvars -auto-approve

根据经验,您应该始终将代码和配置分开,它们越混合,您就越会陷入麻烦......这适用于任何编程语言/项目等。现在一些聪明的头脑会争辩说地形代码本身就是配置,但不,它不是。应用程序中的 terraform 代码是声明性源代码,用于配置应用程序中应用程序源代码等使用的二进制基础结构......

相关内容

  • 没有找到相关文章

最新更新