dom*_*ato 2 amazon-web-services terraform 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"
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用它来部署 2 台服务器,每个区域一台。我不断收到以下错误:
aws_us_east_1.narc_test: Provider doesn't support resource: aws_us_east_1
Run Code Online (Sandbox Code Playgroud)
我已尝试为两个提供程序块设置别名,并以多种不同方式引用正确的区域。我已经阅读了多区域支持,一些答案表明这可以通过模块来完成,但是,这是一个简单的测试,我想保持简单。这是目前可能的吗?
是的,它可用于在不同区域创建资源,即使仅在一个文件中也是如此。无需为您的测试场景使用模块。
您的错误可能是由拼写错误引起的。如果要启动 ec2 实例,则要创建的资源是aws_instance
and not aws_us_west_1
or aws_us_east_1
。
果然 Terraform 不知道这种资源,因为它根本不存在。将其更改为aws_instance
,您应该可以开始使用了!此外,您可能应该对它们进行不同的命名,以避免my_test
对两种资源使用双重命名。
步骤1
在要执行 terraform 计划的 main.tf 文件中添加区域别名。
provider "aws" {
region = "eu-west-1"
alias = "main"
}
provider "aws" {
region = "us-east-1"
alias = "useast1"
}
Run Code Online (Sandbox Code Playgroud)
第2步
providers
在模块定义块中添加块
module "lambda_edge_rule" {
providers = {
aws = aws.useast1
}
source = "../../../terraform_modules/lambda"
tags = var.tags
}
Run Code Online (Sandbox Code Playgroud)
步骤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"
.
.
.
.
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
注意: Terraform 版本目前为 v1.0.5。
归档时间: |
|
查看次数: |
4231 次 |
最近记录: |