terraform 可以简单地用于在不同的 AWS 区域创建资源吗?
can terraform be used simply to create resources in different AWS regions?
我有以下 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
我已经尝试为两个提供程序块设置别名,并以多种不同方式引用正确的区域。我已经阅读了多区域支持,一些答案表明这可以通过模块来完成,但是,这是一个简单的测试,我想保持简单。目前可以吗?
是的,即使在一个文件中,它也可以用于在不同区域创建资源。您的测试场景无需使用模块。
您的错误可能是由打字错误引起的。如果你想启动一个 ec2 实例,你想创建的资源是 aws_instance
而不是 aws_us_west_1
或 aws_us_east_1
。
果然 Terraform 不知道这种资源,因为它根本不存在。将其更改为 aws_instance
就可以开始了!此外,您可能应该以不同的方式命名它们,以避免对两种资源使用 my_test
进行双重命名。
步骤 1
在要执行地形规划的 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 截至目前。
我有以下 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
我已经尝试为两个提供程序块设置别名,并以多种不同方式引用正确的区域。我已经阅读了多区域支持,一些答案表明这可以通过模块来完成,但是,这是一个简单的测试,我想保持简单。目前可以吗?
是的,即使在一个文件中,它也可以用于在不同区域创建资源。您的测试场景无需使用模块。
您的错误可能是由打字错误引起的。如果你想启动一个 ec2 实例,你想创建的资源是 aws_instance
而不是 aws_us_west_1
或 aws_us_east_1
。
果然 Terraform 不知道这种资源,因为它根本不存在。将其更改为 aws_instance
就可以开始了!此外,您可能应该以不同的方式命名它们,以避免对两种资源使用 my_test
进行双重命名。
步骤 1
在要执行地形规划的 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 截至目前。