3

我有以下deploy.tf文件:

provider "aws" {
  region          = "us-east-1"
}

provider "aws" {
  alias           = "us_west_1"
  region          = "us-west-2"
}

resource "aws_us_east_1" "my_test" {
  # provider        = "aws.us_east_1"
  count           = 1
  ami             = "ami-0820..."
  instance_type   = "t2.micro"
}

resource "aws_us_west_1" "my_test" {
  provider        = "aws.us_west_1"
  count           = 1
  ami             = "ami-0d74..."
  instance_type   = "t2.micro"
}

我正在尝试使用它来部署 2 台服务器,每个地区一台。我不断收到以下错误:

aws_us_east_1.narc_test: Provider doesn't support resource: aws_us_east_1

我尝试为两个提供程序块设置别名,并以多种不同方式引用正确的区域。我已经阅读了多区域支持,一些答案表明这可以通过模块来完成,但是,这是一个简单的测试,我想保持简单。这目前可能吗?

4

2 回答 2

9

是的,它可用于在不同区域创建资源,甚至仅在一个文件内。无需为您的测试场景使用模块。

您的错误可能是由拼写错误引起的。如果你想启动一个 ec2 实例,你想创建的资源是aws_instance而不是aws_us_west_1or aws_us_east_1

果然 Terraform 不知道这种资源,因为它根本不存在。将其更改为aws_instance,您应该一切顺利!此外,您可能应该以不同的方式命名它们,以避免my_test对这两种资源使用重复命名。

于 2018-12-31T00:34:43.463 回答
2

步骤1

在您将执行 terraform 计划的 main.tf 文件中添加区域别名。

provider "aws" {
  region = "eu-west-1"
  alias = "main"
}
    
provider "aws" {
  region = "us-east-1"
  alias = "useast1"
}

第2步

在模块定义块中添加providers

module "lambda_edge_rule" {
  providers = {
    aws = aws.useast1
  }
  source            = "../../../terraform_modules/lambda"
  tags              = var.tags
}

第 3 步

将“aws”定义为providers您的模块内部。(来源 = ../../../terraform_modules/lambda")

terraform {
    required_providers {
    aws = {
          source  = "hashicorp/aws"
          version = ">= 2.7.0"
        }
      }
    }
    
resource "aws_lambda_function" "lambda" {
  function_name     = "blablabla"
    .
    .
    .
    .
    .
    .
    .
}

注意:截至目前,Terraform 版本为 v1.0.5。

于 2021-08-28T13:57:28.027 回答